Время на прочтение
2 мин
Количество просмотров 4.8K
Привет, хабровчане!
Хочу поведать вам о языке программирования PureBasic. PureBasic — это мощный, компилируемый язык, основанный на синтаксисе стандартного Бейсика. Предназначен для создания автономных консольных и GUI приложений, игр и многого др. для различных платформ. Язык разрабатывается более 10 лет и постоянно совершенствуется.
Главная особенность PureBasic — кроссплатформенность. На данный момент поддеживаются операционные системы: Windows, Linux, MacOS и AmigaOS. Это значит, что тот же самый код может быть спокойно скомпилирован на разных платформах, с небольшими изменениями или без них вовсе.
С помощью языка PureBasic вы напишете любую программу любой сложности. Этот язык обладает очень простым синтаксисом, в то же время поражает своей функциональностью. Поэтому он легко усваивается и подходит для начинающих программистов. Впрочем, и для опытных кодеров имеется хороший арсенал инструментов.
Имеется визуальный проектировщик окон. Установленная среда разработки занимает около 25 МБ, не требует серьезных настроек и быстро загружается. В программе имеется лишь один маленький минус — она платная. Но это действительно не сильно смущает, не так ли?
Главные особенности PureBasic
- Огромный набор встроенных команд (более 800) позволяет быстро и легко создать любое приложение или игру
- Поддержаны все ключевые слова стандартного Бейсика
- Очень быстрый компилятор, создает чрезвычайно оптимизированный исполняемый код
- Созданные исполняемые файлы не требуют сторонних DLL или интерпретаторов
- Полный доступ к OS API для продвинутых программистов
- Простой и очень быстрый 2D движок для игр (DirectX, SDL, HGE…)
- Простая и высококачественная реализация 3D на движке OGRE
- Оптимальное использование доступных аппаратных средств
- Исходный текст совместим между Windows, Linux, MacOS и AmigaOS для игр и приложений
- Удобная и компактная среда разработки, встроенный визуальный GUI редактор
- Встроенный отладчик упрощает выявление и отлов программных ошибок
Также в этом Бейсике очень легко реализовывать ассемблерный код, для обработки кода используется компилятор FAsm.
Пример
Продемонстрирую вам пример «Hello, Habr». К сожалению, код после нативного хабраредактора выглядит не очень красиво, поэтому я приложу скриншот.
Эта программа открывает окно с текстом и кнопкой закрытия. Если не считать комментарии, на все ушло 9 строчек кода. Исполняемый файл занимает 13 КБ.
С официального сайта можете скачать демо-версию программы. В поставке идет большое количество примеров.
* Бесплатная демоверсия ограничивает рамер кода 800 строками и невозможностью вызывать API функции OS.
UPD: Статью дополнил.
Small Basic и VB.NET были исключены почти сразу. Первый из-за ограниченных возможностей и наличия внешнего рантайма, а второй из-за компиляции только в управляемый код, что нам не подходит, ведь на уровне ядра нет .NET Framework.
VB для создания драйверов в принципе подходит и в соседнем блоге это доказали, но методы создания драйвера, а так же внешний рантайм, ограничивают возможности и снижают удобство разработки.
Поэтому был продолжен поиск требуемого компилятора бейсика, но уже от сторонних фирм, не имеющих прямого отношения к Майкрософт. Подходящим компилятором оказался PureBasic, фирмы Fantaisie Software. Правда он не бесплатный. На данный момент, стоимость индивидуальной лицензии на все версии и платформы составляет 79€.
PureBasic подошел в первую очередь потому, что в его дистрибутиве есть почти все что нужно для компиляции драйвера и необходимо лишь немного изменить ключи ликовки чтобы получить не приложение, а драйвер. Но обо всем по порядку. Прежде рассмотрим процесс компиляции в PureBasic. Он проходит в несколько этапов. Сначала бейсик-код транслируется в ассемблер, а затем при помощи компилятора ассемблера FASM создается объектный файл, который линкуется программой Polink, с функциями PureBasic, находящимися в статических библиотеках и в результате создается исполняемый файл. Чтобы получился драйвер, а не приложение, достаточно изменить ключ линковки с на
Код:
/SUBSYSTEM:native /driver
При этом будет создан драйвер, но он окажется не рабочим, т. к. не решена еще одна проблема — несмотря на то что получился драйвер, он использует WinAPI функции вместо функций ядра. Точнее, это вшитый в него рантайм вызывает некоторые WinAPI функции при инициализации и завершении работы. Есть как минимум два варианта решения этой проблемы.
- Исключить рантайм из кода.
- Заставить рантайм использовать функции ядра вместо WinAPI.
Первый вариант реализовать не сложно. В процессе компиляции получаем ассемблерный код и несложный препроцессор, находящийся между транслятором бейсик кода (pbcompiler.exe) и ассемблером FASM справится с этой задачей. Но у такого решения есть большой минус — многие возможности станут недоступными. Например, станут недоступными строковые переменные, динамические и ассоциативные массивы, связные списки, перестанут работать многие функции и т. д. Это не лучшее решение, ведь теряется вся простота бейсика.
Второй вариант выглядит трудноосуществимым, ведь функции PureBasic скомпилированы и хранятся в статических библиотеках. Их декомпиляция, модификация и сборка, займут много времени и велика вероятность допустить ошибку, что сделать довольно просто учитывая что придется модифицировать ассемблерный код многих функций.
Так как же быть, ведь без рантайма отсутствуют многие возможности языка, но и использовать его в драйвере не представляется возможным из-за использования WinAPI функции вместо функций ядра?
На самом деле есть довольно простой способ без модификации кода рантайма и функций PureBasic, «отучить» их от WinAPI, причем не просто «отучить», но заставить использовать функции ядра. Звучит невероятно, правда? Но это возможно. Напомню, что рантайм и все функции PureBasic скомпилированы и находятся в статических библиотеках. Причем импорт WinAPI функций осуществляется посредством импорта символов из других статических библиотек и явно не указано из каких. Ничего не мешает подменить статические библиотеку из которой импортируются символы WinAPI функций (это например user32.lib, kernel32.lib и др.), на нашу из которой экспортируются символы с именами как в WinAPI функций. Таким образом чтобы отвязать рантайм и функции от WinAPI, требуется написать n-ое количество функций-переходников, которые являются в той или иной мере, аналогами WinAPI, но из них будут вызываться функции ядра. Конечно не для всех WinAPI функций есть аналоги в ядре, но во многих случаях это решаемо.
Приведу пример аналога WinAPI функции Sleep(), которая вызывает функцию ядра KeDelayExecutionThread().
PureBasic | ||
|
Как наверное поняли, код написан на PureBasic, но есть проблема, PureBasic не поддерживает создание статических библиотек, что странно, учитывая что в его дистрибутиве есть все необходимое для этого. Поэтому сборка статической библиотеки производилась в два этапа. Сначала утилитой coffIT из этого кода создавался в объектный файл (утилита при этом использовала pbcompiler и fasm), а затем, собиралась статическая библиотека при помощи утилиты polib, находящейся в папке Compilers дистрибутива PureBasic.
В этом коде, все что находится после символа «!» не обрабатывается компилятором PureBasic, а передается fasm в неизменном виде. Оператор public создает общедоступные метки, которые не будут удалены при компиляции и останутся в статической библиотеке. Именно это нам и нужно. Линкер вместо WinAPI функции Sleep() использует нашу, а поскольку есть вызов функции KeDelayExecutionThread, то линкер попытается ее найти в статических библиотеках и обнаружив в «ntoskrnl.lib», добавит функцию в импорт драйвера. WinAPI функция Sleep() туда не попадет, поскольку она заменена на нашу. Аналогичным образом подменяются и другие функции. Это позволило не только успешно инициализировать рантайм, но и заставить работать многие функции PureBasic, среди которых оказались и те, которые в драйвере вряд ли понадобятся. Например функции получения хеша (CRC32, MD5, SHA1 и т. д.) данных в памяти, а так же функции работы с регулярными выражениями.
В результате всего этого, был создан пакет файлов, который находится во вложении.
Установка.
- Установить PureBasic 5.11 x86 в любую папку.
- Открыть папку с установленным PureBasic и в папке «Compilers» переименовать файлы Fasm.exe и Polink.exe в Fasm_.exe и Polink_.exe.
- Открыть папку «PureLibrariesWindowsLibraries» и удалить все файлы.
- Извлечь архив в папку с установленным PureBasic 5.11 x86.
- Запустить программу «IDE PB5.11 x86 Patch.exe», которая изменит расширение сохраняемых исполняемых файлов с .exe на .sys.
Подчеркну что нужна версия PureBasic именно 5.11 x86. С другими версиями этот пакет может быть не совместим.
Отдельно нужно сказать про память ядра. Она существует двух типов — подкачиваемая и неподкачиваемая.
Цитата с wasm.ru
Цитата:
Системные кучи (к пользовательским кучам не имеют никакого отношения) представлены двумя так называемыми пулами памяти, которые, естественно, располагаются в системном адресном пространстве:
Пул неподкачиваемой памяти (Nonpaged Pool). Назван так потому, что его страницы никогда не сбрасываются в файл подкачки, а значит, никогда и не подкачиваются назад. Т. е. этот пул всегда присутствует в физической памяти и доступен при любом IRQL. Одна из причин его существования в том, что обращение к такой памяти не может вызвать ошибку страницы (Page Fault). Такие ошибки приводят к краху системы, если происходят при IRQL >= DISPATCH_LEVEL.
Пул подкачиваемой памяти (Paged Pool). Назван так потому, что его страницы могут быть сброшены в файл подкачки, а значит должны быть подкачаны назад при последующем к ним обращении. Эту память можно использовать только при IRQL строго меньше DISPATCH_LEVEL.
Оба пула находятся в системном адресном пространстве, а значит, доступны из контекста любого процесса. Для выделения памяти в системных пулах существует набор функций ExAllocatePoolXxx, а для возвращения выделенной памяти всего одна — ExFreePool.
По умолчанию используется только неподкачиваемая память что необходимо для инициализации рантайма, которая хоть и происходит на уровне PASSIVE_LEVEL, но ведь в дальнейшем может произойти обращение к рантайму при более высоком IRQL и если он окажется равен или выше DISPATCH_LEVEL и «очень повезет» что требуемая область памяти окажется в файле подкачки — получим BSoD «на ровном месте». Но использовать для всего только неподкачиваемую память, тоже нерационально. Для возможности выбора типа памяти (подкачиваемая или нет), был добавлен макрос.
PureBasic | ||
|
Возможные значения.
PureBasic | ||
|
Узнать текущий тип памяти можно с помощью макроса.Смена типа памяти действует только на последующие выделения памяти, а тип уже выделенной памяти не меняется. И кроме того, это действует только на функции PureBasic. На вызов функции ядра ExAllocatePool() и ей подобных, не распространяется. Так же нужно следить за освобождением памяти. Даже если драйвер был выгружен из памяти, это не освободит ресурсы и память будет занята до перезагрузки системы. Если память неподкачиваемая, это равносильно уменьшению размера физической памяти!
В конце процедуры DriverUnload() нужно добавить строку, которая освободит память используемую рантаймом PureBasic.Теперь рассмотрим простой пример драйвера, который только информирует о своей загрузке и выгрузке.
PureBasic | ||
|
Рассмотрим код подробнее. Оператор Declare объявляет процедуру с именем DriverEntry(). Это необходимо потому что компилятор однопроходный, а процедура расположена ниже по коду относительно обращения к ней. Затем в переменную *Point помещается указатель на процедуру DriverEntry() и происходит переход по адресу в переменной *Point, т. е. в процедуру DriverEntry(). Возможно возникнет вопрос, почему не указать в качестве точки входа процедуру DriverEntry() и избавится от подобного прыжка по адресу? Сделать такое конечно можно, но при этом рантайм останется не инициализированным.
Оператор IncludeFile определяет путь к подключаемым файлам, а оператор XIncludeFile подключает их, причем делает это только один раз, т. е. если в исходнике окажется несколько подключений одного и того же файла, то будет подключен только один экземпляр, а остальные проигнорированы.
При выполнении кода процедуры DriverEntry() выводится отладочное сообщение «Load Driver», записывается в структуру *DriverObject адрес процедуры выгрузки драйвера и возвращается значение успешного выполнения.
Когда драйвер выгружается, будет выполнена процедура адрес которой сохранен в поле DriverUnload структуры *DriverObject. В данном коде это процедура DriverUnload(). В ней отсылается отладочное сообщение «Unload Driver», а затем, вызывается подпрограмма «_PB_EOP». Это необходимо чтобы рантайм «убрал за собой», т. е. освободил все те ресурсы что были использованы им при инициализации.
В этой же процедуре нужно освободить все ресурсы, используемые драйвером (например, память, различные хендлы и т. д.). Потому что даже если драйвер был выгружен, это не освободит ресурсы и они будут заняты до перезагрузки системы. В случае памяти, если она неподкачиваемая, это равносильно уменьшению размера физической памяти!
Все глобальные объекты (строки, массивы, связанные списки) так же нужно уничтожать при выгрузке драйвера. Наиболее просто это сделать если их поместить в общую структуру. Тогда все сведется к одной строке — очистке структуры функцией ClearStructure().
Компиляция драйвера не сложнее создания обычного приложения. В меню «Компилятор», нужно кликнуть по пункту «Создать драйвер» и получим скомпилированный драйвер в указанной папке.
После компиляции в результате которой, получили sys-файл, его можно проверить в действии, но сначала взглянем на импорт. Как видим, от WinAPI не осталось и следа.
Драйвером импортируется функция KeGetCurrentIrql() из hal.dll, используемая для определения текущего IRQL при автоматическом выборе типа памяти (подкачиваемая или нет). Из ntoskrnl.exe импортируются функции DbgPrint(), memset(), ExAllocatePool() и ExFreePool(). Первую можно видеть в коде драйвера и она используется для вывода отладочных сообщений. Вторая функция предназначена для заполнения памяти заданными данными. В нашем случае, она используется для обнуления (очистки) памяти. Третья и четвертая функция, выделяют и освобождают память. Этих функций достаточно для инициализации рантайма, причем действительно нужны только две ExAllocatePool() и ExFreePool(), а остальные можно или исключить при определенных условиях (функция KeGetCurrentIrql()) или заменить на небольшой участок кода (функция memset()). Довольно неплохо если учитывать что рантайм PureBasic изначально рассчитан на WinAPI, а не на функции ядра.
Размер файла драйвера получился равным 2 КБ. Возможно покажется что это много для такого простого драйвера, но в этот объем входит статически прилинкованный рантайм и пара функций-переходников эмулирующих WinAPI и вызывающих функции ядра. Если отказаться это всего этого и вырезать рантайм, то размер драйвера получится около 570 байт. Но нужно ли это? Отсутствие рантайма не позволит использовать многие возможности языка.
Теперь давайте запустим драйвер и посмотрим как он работает. Лучше это делать на виртуальной машине. Для этого понадобятся утилиты KmdManager и Dbgview. Первая запускает драйвер, а вторая отображает то, что было отправлено функцией DbgPrint(). После установки на PureBasic предлагаемого архива, эти утилиты будут доступны через меню «Инструменты». Их следует запускать с правами администратора. Для Windows 7 нужно выполнить эту рекомендацию.
Цитата:
Сообщение от Убежденный
Далее по поводу DbgPrint(Ex). Как известно, на Windows Vista и выше весь
отладочный вывод фильтруется, поэтому чтобы увидеть свои отладочные сообщения,
нужно включить соответствующий флаг в реестре на гостевой машине.
Ключ HKLMSYSTEMCurrentControlSetControlSession ManagerDebug Print Filter.
Я использую параметр DEFAULT (тип REG_DWORD) со значением 0xf (15), это включает полный отладочный вывод. Хотя возможны и другие варианты.
Также нужно убедится что в меню «Capture» программы Dbgview есть галочка в пункте «Capture Kernel». Если ее там нет, ставим и перезапускаем программу.
В программе KmdManager указываем путь к драйверу и последовательно нажимаем на кнопки «Register», «Run», «Stop» и «Unregister». Если все сделано правильно, увидим примерно такую картину.
Это довольно простой драйвер, но его код можно еще сильнее упростить до такого.
PureBasic | ||
|
Код максимально прост. Импортируется функция DbgPrint() из «ntoskrnl.lib», а затем она вызывается отправляя отладочное сообщение «Load Driver».
Возможно те «кто в теме» подумают что этот код нормально работать не будет и вызовет BSoD и они будут по своему правы. Дело вот в чем. При выходе из функции DriverEntry() производится освобождение 8 байт из стека (2 локальных переменных — параметра процедуры, по 4 байта каждый), а затем возврат по текущему адресу в стеке. В этом коде ничего подобного нет. Как же он тогда работает? На самом деле все это есть. Препроцессор, находящийся между pbcompiler и fasm добавляет такой ассемблерный код.
Assembler | ||
|
Чтобы было понятней, привожу весь ассемблерный код драйвера, передаваемый FASMу.
Assembler | ||
|
Теперь рассмотрим драйвер по сложнее, в котором используются функции PureBasic, которые не работали бы без инициализации рантайма и подмены некоторых WinAPI функций на их аналоги в ядре, т. к. было бы невозможно использование двусвязного списка и строк.
PureBasic | ||
|
В процедуре DriverEntry() в первую очередь включатся автоматический выбор типа памяти (по умолчанию используется только неподкачиваемая память). Затем создается связный список с именем x, после чего в цикле в него добавляется 10 элементов. Далее формируется строка сообщающая о количестве элементов в списке и в цикле ForEach выводится текущее содержимое элементов списка.
В этом примере связный список является локальным и он автоматически уничтожается при завершении работы процедуры в которой он создан. Если бы он был бы глобальным, то необходимо было самим его очищать, т. е. вызывать функцию FreeList() когда список становился не нужным. Но в любом случае, чтобы избежать утечки памяти, это потребовалось бы сделать в процедуре DriverUnload() вызываемой при выгрузке драйвера.
Если запустить драйвер, увидим такую картину.
В папке Examples архива, есть много примеров различных драйверов, как простых, только показывающих работу функций PureBasic, переведенных с WinAPI на функции ядра, так и примеров по сложнее, среди которых можно найти коды драйверов, предоставляющих доступ к портам компьютера, защищающих процесс от завершения, скрывающих указанные процессы в диспетчере задач, а так же драйвер обрабатывающий прерывания от LPT порта.
- Главная
- Песочница
- Архив
- Полезности от Joker-2013
|
Последний раз редактировалось: Joker-2013 (2019-03-03 16:32), всего редактировалось 2 раз(а) |
Отправлено: 02-Мар-2019 21:53
(спустя 10 месяцев 11 дней)
Отправлено: 02-Мар-2019 21:53
(спустя 10 месяцев 11 дней)
Joker-2013 |
SendMessage_(WindowID(0),#WM_SETICON,0,ExtractIcon_(0,»Shell32.dll»,23)) If PathFileExists_(GetExePath()+»icon.ico») Извлечение иконок из файла: OpenWindow(0,0,0,320,240,»Window»,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) Последний раз редактировалось: Joker-2013 (2019-03-02 22:10), всего редактировалось 1 раз |
Отправлено: 02-Мар-2019 22:00
(спустя 6 минут)
Отправлено: 02-Мар-2019 22:00
(спустя 6 минут)
Joker-2013 |
|
Отправлено: 02-Мар-2019 22:12
(спустя 12 минут)
Отправлено: 02-Мар-2019 22:12
(спустя 12 минут)
AZJIO |
Но нужно много сил и времени. вот это наверно определяющее, и ещё желание. Я уже делал прогу для создания гуи где можно перемещать элементы и делать доводку до пикселей стрелками, но это в лаунчере лишнее. Я наоборот делал чтобы кнопки сами размещались автоматически. Вариант на AutoIt3 протестирован, можно указать область размещения кнопок, указать число колонок, отступы между кнопками и они сами подстроятся под размеры. |
Отправлено: 02-Мар-2019 22:36
(спустя 23 минуты)
Отправлено: 02-Мар-2019 22:36
(спустя 23 минуты)
Joker-2013 |
;Навешиваем на окно: По Enter выполняется действие как по ЛКМ и не надо дописывать дополнительные события… |
Отправлено: 04-Мар-2019 16:47
(спустя 1 день 18 часов)
Отправлено: 04-Мар-2019 16:47
(спустя 1 день 18 часов)
AZJIO |
|
Отправлено: 05-Мар-2019 19:01
(спустя 1 день 2 часа)
Отправлено: 05-Мар-2019 19:01
(спустя 1 день 2 часа)
MBTY |
|
Отправлено: 05-Мар-2019 19:17
(спустя 16 минут)
Отправлено: 05-Мар-2019 19:17
(спустя 16 минут)
dialmak |
|
Отправлено: 19-Апр-2019 13:58
(спустя 1 месяц 13 дней)
Отправлено: 19-Апр-2019 13:58
(спустя 1 месяц 13 дней)
AZJIO |
|
Отправлено: 10-Июл-2019 19:59
(спустя 2 месяца 21 день)
Отправлено: 10-Июл-2019 19:59
(спустя 2 месяца 21 день)
AZJIO |
|
Отправлено: 19-Янв-2020 16:31
(спустя 6 месяцев 8 дней)
Отправлено: 19-Янв-2020 16:31
(спустя 6 месяцев 8 дней)
AZJIO |
А как ссылку назначить на кнопку? в ini [6] или имеется ввиду это (?): Result = HyperLinkGadget(#Gadget , x , y , Width , Height , Text$ , Color [, Flags]) |
Отправлено: 20-Янв-2020 21:29
(спустя 1 день 4 часа)
Отправлено: 20-Янв-2020 21:29
(спустя 1 день 4 часа)
AZJIO |
вотEnableExplicit Так же кучка готовых примеров здесь, также русская справка здесь, на вкладке «Указатель» вводишь «Гаджет» и выбираешь что читать. И в этом лаунчере нет ini, а есть исходники ранее там не было исходников, поэтому я не понял. |
Отправлено: 23-Дек-2021 00:23
(спустя 1 год 11 месяцев)
Отправлено: 23-Дек-2021 00:23
(спустя 1 год 11 месяцев)
AZJIO |
|
Текущее время: 06-Мар 11:51
Часовой пояс: UTC + 3
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы
Новые возможности языка программирования БЕЙСИК
© 2000 Fantaisie Software
Введение
Условия применения
Системные требования
Установка продукта
Как приобрести полную версию
Связь с авторами
Благодарность помощникам
История развития проекта
Перевод руководства на русский языка выполнил MacBuster^tPA
Введение
PureBasic — это новый язык программирования «высокого уровня»,
основанный на уже давно устоявшихся и ставшими стандартными правилах языка
«БЕЙСИК». PureBasic совместим с другими компиляторами БЕЙСИКА,
существующими на Амиге или на любых других платформах. Он очень прост в
освоении как для новичков, делающих свои первые шаги в программировании,
так и для тех, кто давным-давно стал экспертом в этом деле. Особенную
привлекательность ему придает тот факт, что время компиляции ваших
программ сведено к минимуму!
В процессе создания PureBasic мы старались прежде всего ориентироваться
на особенности Амиги и использовать все ее уникальные возможности. Как
можно более полное взаимодействие с операционной системой для получения
наиболее эффективного результата — именно это было предметом особого
внимания. Нам пришлось проделать огромную работу для того, чтобы в
конечном итоге вы получили надежный, быстрый, но вместе с тем простой и
удобный язык программирования, пригодный для решения широкого круга задач.
Вы просто не сможете написать плохие программы, воспользовавшись основным
набором команд! Конечно же, вам ничто не помешает добавить ваши
собственные функции, если вы будете ощущать острую необходимость в
максимальном использовании всех возможностей Амиги.
Нам удалось добиться сочетания очень простого синтаксиса с огромными
возможностями, что особенно заметно при использовании дополнительных
функций, которые были введены нами, таких как: указатели, структуры,
связные списки, динамически изменяемые связнные списки и прочее. А для
опытных программистов введена возможность непосредственного взаимодействия
со всеми стандартными структурами и объектами, использующимися в
операционной системе Амиги.
На данный момент PureBasic поддерживает только процессоры серии 680×0, но
очень скоро появится поддержка процессоров PowerPC. Несмотря на то, что в
компиляторе уже есть генератор кода для PowerPC, он ещё не полностью
реализован. Но мы надеемся на то, что после надлежащей отладки и добавления
функций мы сможем предложить вам такой компилятор, который будет полностью
использовать все возможности этого процессора. Сейчас компилятор может
генерировать почти идеально оптимизированный код для 68000, но мы уверены в
том, что и здесь есть возможность ещё что-нибудь улучшить. И мы обещаем вам
попытаться добиться лучшего!
- Основные возможности PureBasic:
- Поддержка 68000 и 68020+ (скоро появится и PowerPC).
- Внутренняя поддержка массивов, динамически-изменяемых связных
списков, сложных структур, указателей и определения переменных. - Встроенная поддержка следующих типов данных: Байт (8 бит), Слово (16
бит), Длинное слово (32 бита), а также определяемых пользователем
типов (структур). - Стандартные типы данных могут быть знаковыми и беззнаковыми.
- Встроенная поддержка строковых типов.
- Поддержка констант, двоичной и шестнадцатеричной систем счисления.
- Оптимизатор вычислений на основе группировки констант и однотипных
числовых данных. - Все вычисления производятся с учетом приоритета, поддерживаются
следующие действия: +, -, /, *, and, or, lsl, asl, lsr, asr. - Компилируется до 30,000 строк в минуту при наличии 68030/50 (если
используется PoolMem). - Поддержка процедур в стиле структурного программирования, также
локальных и глобальных переменных (находится в стадии доработки). - Все стандартные операторы языка БЕЙСИК: If-Else-EndIf, Repeat-Until,
и прочие. - Взаимодействие с многопользовательскими библиотеками функций для
упрощения работы с такими объектами как: IFF изображения, экраны,
окна, гаджеты, и другие. - Работа со стандартными библиотеками функций операционной системы так
же проста, как и работа со стандарными операторами языка. - Встроенный ассемблер.
- В целях сокращения необходимого для компиляции времени используются
предварительно скомпилированные файлы структур и констант. - Отладчик для прерывания исполнения программы и пошаговой отладки
частей программы, вызывающих сомнения в правильности реализации. - Компилятор может принимать входные параметры через командную строку.
- Стабилен, прост в установке и освоении, постоянно развивается.
Условия применения:
Программный продукт PureBasic (далее — программный продукт) поставляется
в соответствии с общепринятым в международной компьютерной практике
принципом «КАК ЕСТЬ«. Это означает, что за проблемы, возникшие в процессе
эксплуатации программного продукта (в том числе: частичная или полная
потеря данных; частичное или полное повреждение данных; упущение выгоды;
проблемы совместимости с программными продуктами третьих фирм, а также за
проблемы, способные возникнуть из-за неоднозначного толкования данной
документации пользователем), компания Fantasie Software и лица,
осуществлявшие перевод руководства пользователя, а также локализацию
программного продукта, ответственности не несут. Приступив к использованию
программного продукта, пользователь полностью осознает тот факт, что он
использует данный программный продукт на свой собственный страх и риск, а
также подтверждает то, что он предварительно ознакомился с условиями о
пользовании программным продуктом и безоговорочно принял их.
Демонстрационная версия этого программного продукта может быть свободно
распространена при соблюдении условия сохранения неизменности содержимого
оригинального архивного файла. Удалять, добавлять, изменять файлы, а также
производить прочие изменения содержимого оригинального архивного файла
можно только с предварительного письменного разрешения Fantasie Software.
На распространение демонстрационной версии программного продукта с
применением любых средств хранения данных, распространяемых совместно c
компьютерными журналами, требуется предварительное письменное разрешение
Fantasie Software.
Fantasie software сохраняет за собой все права на изменение программного
продукта и распространяемого архива.
Системные требования
- AmigaOS версии 3.0 и выше
- 1 Мб свободной памяти
PureBasic будет работать на любой Амиге, если ее параметры совпадают с
указанными требованиями. По всем вопросам, связанным с работоспособностью
данного программного продукта, связывайтесь с нами.
Инсталяция продукта
Для установки PureBasic на ваш жесткий диск лучше всего воспользоваться
прилагаемым скриптом «Install». В том случае, если по каким-либо причинам
вы не смогли или не пожелали воспользоваться скриптом «Install», вы можете
самостоятельно скопировать подкаталог «PureBasic», находящийся в каталоге
«PureBasic_1.60_Demo», в тот каталог, куда вы хотите произвести установку
компилятора. После этого следует добавить в файл «S:User-startup»
следующую строку:
Assign PureBasic: «Work:PureBasic»
изменив путь «Work:PureBasic» на путь к тому каталогу, в который вы
установили PureBasic (если он отличается от указанного в примере). После
этого следует перезагрузить Амигу. Только произведя все эти действия, вы
сможете корректно запустить PureBasic.
Как заказать полную версию PureBasic
На данный момент PureBasic представляет собой условно бесплатный
программный продукт, регистрация которого производится за небольшую плату.
Но в самом ближайшем будущем ситуация изменится и PureBasic перейдет в
разряд коммерческого программного обеспечения. Причем произойдет это уже
при выпуске версии 2.0, в первой четверти нового тысячелетия. Конечно же,
скорость развития проекта зависит от количества зарегистрировавшихся
пользователей. Если появится пиратская версия этого продукта и вы рискнете
ей воспользоваться, то, пожалуйста, имейте ввиду, что лично вы и станете
причиной замедления, а может быть, и полного прекращения работ по его
развитию. Пожалуйста, не используте пиратские версии програмных продуктов.
Зарегистрировавшиеся пользователи получат все последующие обновленные и
исправленные версии PureBasic совершенно бесплатно!
-
Демонстрационная версия PureBasic имеет следующие ограничения:
- только 4 библиотеки дополнительных функций (misc, linked list, window,
screen) могут быть задействованы в ваших программах; - вы не можете задействовать многопользовательские библиотеки AmigaOS;
- нет средств разработки библиотек дополнительных функций;
- максимальное количество строк в вашей программе: 200;
-
Стоимость регистрации:
США : 70 долларов
Англия : 40 фунтов
Германия : 120 марок
Франция : 400 франков
Оплата может быть произведена почтовым чеком, Евро-чеком или наличными,
вложенными в конверт (прячьте как можно лучше!), которые следует выслать
на следующий адрес:
Frederic Laboureur
10, rue de Lausanne
67640 Fegersheim
France
Полноценная версия PureBasic высылается в день получения регистрационного
взноса. Не забудьте указать, каким именно образом вы желаете получить
вашу копию — по электронной или по обычной почте!
Регистрационный бланк
Заполненный латинскими буквами регистрационный бланк следует послать по
следующему адресу:
Frederic Laboureur
10, rue de Lausanne
67640 Fegersheim
France
—-8<——8<——8<——8<—Линия отрыва—8<——8<——8<——8<—
Я желаю приобрести полную версию PureBasic.
В качестве регистрационного взноса высылаю (отметьте нужный пункт):
( ) FF400.00 ( ) DM120.00 ( ) 40.00UKP ( ) US$70.00
Имя: _________________________________________________________
Адрес: _________________________________________________________
_________________________________________________________
_________________________________________________________
Страна: _________________________________________________________
Телефон: _________________________________________________________
EMail: _________________________________________________________
Вся указанная здесь информация конфиденциальна и будет сохранена
в полной тайне.
Компания Fantasie Software не будет распространять
ее ни при каких обстоятельствах.
Я высылаю свой регистрационный взнос в качестве (отметьте нужное):-
( ) Наличных, в указанной выше валюте.
( ) Евро-чека. Самый дешевый и безопасный метод для европейцев.
( ) Другое? Необходимо ПРЕДВАРИТЕЛЬНО согласовать с авторами по
E-Mail.
Регистрационный взнос может быть принят только в одной из указанных
выше валюте.
Никакая другая валюта не может быть использована.
Пожалуйста, вышлите мне полную версию (отметьте желаемый способ):-
-
( ) По EMail (UU — MIME присоединенным файлом)
( ) Международной почтой (на дискете)
Я прочитал все требования и условия и безоговорочно с ними согласен.
__________________ ________________________________________
Дата Подпись
Пожелания и предложения, касающиеся PureBasic (на английском языке):
___________________________________________________________________
___________________________________________________________________
Связь с авторами
Посылайте свои замечания, предложения, советы по улучшению, информацию о
найденных ошибках и недочетах по следующим адресам:
Фред «AlphaSND» — это основатель компании «Fantasie Software» и тот
самый человек, который написал основную часть проекта PureBasic. Все
советы, предложения, замечания и информация о найденных недочетах и
ошибках должны быть посланы ему по одному из приведенных ниже адресов:
s-mail: Frederic Laboureur
10, rue de Lausanne
67640 Fegersheim
France
e-mail: alphasnd#free.fr
Ричард — весьма талантливый программист, который очень помог Фреду при
создании стабильных и мощных ассемблерных библиотек функций,
использующихся в PureBasic. Если вам потребовалась новая библиотека
каких-нибудь функций, то не стоит медлить — cвяжитесь с ним:
e-mail: rzs735w#tninet.se
Благодарность помощникам
Я хочу от всего сердца поблагодарить всех тех людей, которые помогали
мне в работе над PureBasic. Вполне вероятно, что если бы не было их помощи
и поддержки, то проект не был бы завершен!
За то, что позволил мне использовать его превосходные ассемблеры: «pasm»
и «PhxAss!». За все подсказки и ценные предложения по их использованию. А
также за помощь в отладке генератора кода для PowerPC.
За то, что он потратил свое весьма ценное время на объяснение аспектов
программирования PowerPC, и другие, не менее ценные, советы.
За создание превосходной утилиты «PoolMem». Это небольшая резидентная
программа, применение которой позволяет сократить время компиляции в 2-3
раза! Также спасибо за разрешение включить ее в распространяемый архивный
файл PureBasic.
Первый человек, который полностью поверил в осуществимость этого проекта
и стал помогать в его реализации. Он оказал неоценимую помощь в разработке
дизайна PureBasic.
За исправление ошибок на английском варианте сайта Fantasie Software и
за исправление руководства. Теперь все это выглядит значительно лучше!
За полный перевод руководства на немецкий язык. Большое спасибо!
Помог исправить все ошибки в английском варианте руководства. Спасибо!
За поддержку Амиги и компаний, производящих для нее программные продукты.
Присылайте ваши впечатления от работы и предложения непосредственно
компании Fantasie Software по адресам, указанным в описании регистрации.
История развития проекта
-
V1.60 (09.09.2000):
- Теперь можно использовать «tab» вместо пробела
- Исправлено несколько незначительных ошибок в компиляторе
- Добавлено четыре новых библиотеки функций:
— Audio (для вывода звука)
— Protracker (для проигрывания модулей ProTracker’а)
— Network (основана на TCP/IP протоколе, предоставляет очень быстрый
доступ к сети для программ, использующих Интернет и для сетевых игр)
— Memory Bank (для работы с памятью) - Добавлены три новые функции в библиотеку Misc: MouseButtons(),
GetCliArg() и NumberOfCliArgs() - Обновлена функция: OptionGadget()
- Исправлена функция: FileRequester(), AddElement()
- Исправлена библиотека «Menu» (не работала с выпуска версии 1.50)
V1.50 (11.07.2000):
В компиляторе:
- Исправлено множество незначительных ошибок
- Добавлен оптимизатор кода для 68020+
- Применены новые методы оптимизации для уменьшения/ускорения программ
- Работает чуть быстрее и редактор больше не виснет
- Поддержка локализации. Теперь сообщения об ошибках будут на вашем
языке!
В библиотеках: - Совершенно новая библиотека: «PopupMenu» создающая всплывающие меню
- Изменения в существующих функциях (читайте документацию):
ChunkyToPlanar(), StartTimer(), StopTimer(), InitToolType()
ButtonGadget(), StringGadget(), CycleGadget(), ListViewGadget()
PaletteGadget(), OptionGadget() - Библиотека «Menu» была полностью переписана
- Исправлены функции:
AddSprite(), ReadLong(), LoadPicture(), UseGadgetList(), Left()
GetToolTypeString(), WindowMouseX(), WindowMouseY()
В редакторе: - Новая Система Вывода Структур, помогающая вам разобраться в структурах
- Редактор теперь можно открывать на своем собственном экране
- Можно сменить шрифт
- Добавлена пункт «Run»
- Исправлено много ошибок
- Обновлена документация
V1.40 (14.03.2000):
В компиляторе:
- Теперь можно использовать команды ассемблера с операторами БЕЙСИКА
- Добавлена поддержка «Объединений» в «Структурах»
- Обновлен и исправлен резидентный файл (Small_AmigaOS)
- Устранено несколько ошибок
В библиотеках функций: - Добавлено четыре совершенно новые библиотеки функций:
— AmigaSprite
— Joypad
— Sprite
— Timer - Добавлено пять новых функции:
— Requester: EasyRequester()
— BitMap : ShowBackBitMap()
— Screen : CreateDualPlayfield(), RemoveDualPlayField()
— Palette : LoadPalette() - Прочие изменения:
— ShowBitmap() теперь быстрее и больше не выполняет VWait().
— «Stop» переименован в «CallDebugger»
— Битмэпы теперь открываются в «Interleaved» режиме. Все функции были
переписаны для ускорения. - Некоторые ошибки были замечены и удалены из библиотеки «Sound».
В редакторе: - Добавлены функции «вырезать/скопировать/вставить».
- Автоматический отступ.
- Теперь спрашивает о необходимости перезаписи уже существующего файла
с таким же названием. - Вся документация была обновлена, теперь на трех языках!
- Исправлены некоторые ошибки работы с памятью.
V1.30 (24.01.2000):
В компиляторе: - Теперь ваши программы будут занимать меньший объем!
- Операнды сравнения обращаемыми (<= или =< и >= или =>).
- Нераспознаные операторы выделяются.
- Заработали программы, компилируемые для PowerPC (Смотрите примеры в
каталоге PPC_Example). - Убрано множество бесполезных библиотек для PowerPC.
- Теперь можно использовать ASCII символы для определения констант:
«value = ‘A'» тоже самое что и «value = 65». - Завершена система поддержки процедур. Они могу принимать строки как
входные параметры и возвращать их в качестве выходных результатов. - Можно опускать «=» в выражениях: «a+1» это совершенно тоже самое что
«a=a+1». Может быть использовано при любых вычислениях с любыми
типами данных. - Завершена работа по внедрению поддержки операционной системы.
- Компилятор почти полностью переписан, благодаря чему теперь процесс
компиляции значительно ускорился. - Ускорена процедура обработки оператора «include».
- Сокращено количество памяти, требующееся для работы, «PoolMem» более не
нужен. - Исправлено множество ранее замеченных ошибок.
В библиотеках: - Добавлена новая библиотека для работы с чанками и очень быстрая
процедура «chunky2planar». - Оптимизация в библиотеке поддержки связных списков.
- Новые команды: FindString(), ChangeCurrentElement().
- Исправления в следующих командах: Mid(), StripLead(), InitScreen(),
InitTagList(), BusyPointer() и ActivateGadget(). - Переименованы команда: DPrint() -> PrintText().
- Обновлено руководство.
В редакторе: - Добавлены Boopsi-слайдеры.
- Добавлен пункт «NoCli Output».
- Теперь можно сохранять настройки каждого файла.
- Исправлено несколько ошибок.
V1.20 (30.11.1999):
- Появился встроенный редактор!
- Вы можете использовать любые библиотеки AmigaOS непосредственно из
ваших программ на PureBasic! Никаких ограничений нет. Можно добавить
нужные библиотеки с помощью прилагающегося преобразователя. - Добавлено три новые библиотеки: Amiga, Sound и Sort.
- Добавлено много новых функций:
— LinkedList: ClearList(), PreviousElement(), InsertElement()
— File : MakeDirectory(), RenameFile(), DeleteFile(), WriteStringN()
— Window : ChangeIDCMP(), BevelBox()
— String : Mid(), Val(), FindString(),StripTrail(), StripHead()
— Misc : PrintNumberN(), Peek(), Poke() - Внимание! Следующие функции были переименованы:
NPrint() -> PrintN()
PrintNum() -> PrintNumber()
WriteString -> Более не выдает терминатор в конце строки.
Используйте WriteStringN(), если он нужен. - Изменение: для получения адреса метки теперь следует использовать
символ ‘?’, вместо ранее использовавшегося символа ‘@’. - Отладчик обновлен и исправлен. Теперь он намного лучше.
- Дополнено руководство о создании собственных библиотек функций. Стало
еще проще - Некоторые функции подверглись изменениям с целью их оптимизации.
- Исправлено множество ранее замеченных ошибок.
V1.10 (27.10.1999):
- Добавлены три новые библиотеки: Commodity, ToolsType и String.
- Теперь файл загружается значительно быстрее.
- Поддержка немецкого и французского языков.
- Исправлено множество ранее замеченных ошибок (как всегда).
- Улучшена поддержка PowerPC, но она еще далека от завершения.
- Добавлен плагин для редактора GoldED, которые теперь выделяет цветом
операторы PureBasic. Автор — Julian Kinraid. - Собственный редактор написан на 50 процентов.
- Исправлена структура архивного файла, добавлен скрипт-инсталлятор.
- И другое.
V1.02 (12.09.1999):
- Забыл добавить два файла для компилятора PowerPC. Теперь все должно
работать - Исправлены замеченные ошибки.
- Добавлено руководство «Reference.guide» исправленное LES’ом. Большое
спасибо ему за помощь.V1.01 (05.09.1999):
- Создан первый вариант компилятора PowerPC для WarpOS. Однако он все
еще находится в стадии разработки. - Добавлено основное руководство (вот этот файл), ошибки исправил LES.
Большое ему за это спасибо!V1.00 (01.09.1999):
- Самая первая версия.
Сайт создан в системе uCoz