Pixilang - пиксельно-ориентированный язык программирования для небольших графических/звуковых приложений (демки, игры, синтезаторы, эксперименты и т.п.).
Pixilang-программы хранятся в текстовых файлах (кодировка UTF-8) с расширением .txt или .pixi. Поэтому вы можете использовать любой текстовый редактор для создания таких программ. Pixilang не имеет встроенного редактора. После старта появляется файловый диалог, в котором нужно указать, где лежит запускаемая pixi-программа.
Программа может быть простым списком инструкций с условными переходами, без объявления точек входа. Сразу после старта программе выделяется чистая область (экран) внутри окна, к которой можно обращаться как к массиву пикселей и использовать готовые графические примитивы.
При запуске из командной строки Pixilang принимает дополнительные опции в приведенном ниже формате.pixilang [options] [filename] [arg]
Options:
-? показать описание опций (данный текст)
clearall сбросить все настройки
-cfg <config> дополнительная конфигурация в формате:
"OPTION1=VALUE|OPTION2=VALUE|..."
-c генерация байт-кода; будет создан файл filename.pixicode
Filename: исходный код (текстовый файл) или байткод (*.pixicode).
Дополнительные аргументы (arg): какие-то опции для Pixilang-программы.
Примечание: файлы в формате *.pixicode привязаны к архитектуре и могут неправильно работать на других устройствах.
В основе Pixilang - контейнеры (или pixi-контейнеры, как их иногда называют) и переменные.
Контейнер - это двумерный массив, таблица из X колонок и Y строк. Каждая ячейка этой таблицы - число определенного типа. Тип задан один на весь контейнер. Например, ячейки могут хранить цвета пикселей, тогда контейнер превращается в картинку. Контейнер может быть строкой текста, куском звука и т.д. Если вы знакомы с другими языками программирования, то считайте контейнер массивом, состоящим из (X*Y) ячеек. Каждый контейнер после создания имеет свой ID (порядковый номер): 0,1,2,3 и т.д. Нулевой ID по умолчанию указывает на контейнер с экраном.
Структура контейнера:
Максимальное количество контейнеров в программе - 8192. Но это число можно увеличить через параметр pixi_containers_num в файле конфигурации pixilang_config.ini. Кроме того, если вы собираете Pixilang из исходников, кол-во контейнеров можно указать в файле user_code_info.cpp, используя такой код:app_option g_app_options[] = { { "pixi_containers_num", 16384 }, { NULL } };
Переменная - имя ячейки памяти, в которой хранится одно знаковое целое 32-битное число (например, 25) или 32-битное число с плавающей запятой (например, 33.44). Локальные переменные (с символом $ перед именем) доступны только в рамках одной функции, в которой эти переменные определены. Глобальные переменные (без символа $) доступны в любом месте программы.
Числа можно описывать в различных форматах. Примеры:
Простейшие примеры применения контейнеров и переменных:x = new( 4 ) //Создаем контейнер из 4-х пикселей. Сохраняем ID контейнера в переменную x.
//Элементы контейнера адресуются с нуля:
// первый элемент - x[ 0 ];
// второй элемент - x[ 1 ];
// ...
// последний элемент - x[ размер - 1 ];
x[ 0 ] = #0000FF //Записываем значение синего цвета в первый пиксель контейнера.
x[ 2 ] = WHITE //Записываем значение белого цвета в пиксель 2.
x[ 3 ] = RED //Записываем значение белого цвета в пиксель 3.
x[ 4 ] = BLUE //Здесь ничего не произойдет, т.к. элемента под номером 4 не существует.
b = x[ 2 ] //Читаем элемент 2
//Теперь переменная b содержит число, соответствующее белому цвету.
v = x[ 8 ] //Пытаемся прочитать элемент 8
//Переменная v содержит ноль, т.к. элемент 8 прочитать не удалось
remove( x ) //Удаляем контейнер
c = new( 4, 4 ) //Создаем 2D контейнер 4 на 4 пикселя. Сохраняем ID контейнера в переменную c.
c[ 2, 2 ] = WHITE //Присваиваем пикселю с координатами 2,2 (относительно левого верхнего угла) белый цвет.
remove( c ) //Удаляем контейнер
str = "Hello" //"Hello" - это строковый контейнер, состоящий из пяти 8-битных символов (кодировка UTF-8).
//Подобные контейнеры-строки создаются автоматически на этапе компиляции программы.
//Удалять их вручную так, как это сделано в предыдущем примере, не надо.
//Контейнеру со строкой "Hello" автоматически присвоится ID (порядковый номер).
//Например, ID будет равен 4.
//Тогда код str = "Hello" будет равноценен коду str = 4.
str[ 0 ] = 'h' //Меняем самую первую букву в строке. Было - 'H'. Станет - 'h'.
str[ 2 ] = 0 //Меняем букву 'l' на нулевой символ, означающий конец строки
//...теперь строка превратилась в "he".
//Конец строки - это либо нулевой символ, либо конец контейнера.
a = 4 //Глобальная переменная
fn function()
{
$k = 2 //Локальная переменная
function2 = {
//Определяем еще одну функцию
$x = 899.334 //Локальная переменная
//В этом месте $k недоступна, т.к. находится в другой функции
}
//В этом месте $x недоступна
}
//В этом месте $k и $x недоступны
Система координат Pixilang представлена на следующей картинке:
Ниже приведены примеры, показывающие основные правила оформления имен файлов и директорий.//Файл спрятан в нескольких директориях относительно текущего местоположения пикси-программы:
"folder1/folder2/folder3/filename"
//Файл лежит в текущей рабочей папке Pixilang:
// iOS: documents;
// WinCE: корень файловой системы (/);
// для остальных систем: в той же самой папке, в которой лежит Pixilang;
"1:/filename"
//Файл лежит в директории для настроек и скрытых данных приложения:
// Linux: /home/username/.config/Pixilang;
// iOS: папка для файлов приложения (NSApplicationSupportDirectory);
// Android: папка с настройками на внутренней карте памяти устройства;
"2:/filename"
//Файл лежит во временной директории:
"3:/filename"
Рассмотрим операторы на конкретных примерах.
//Условные операторы if, else
if a == b
{ /*Код в этом месте выполняется, если a равно b*/ }
else
{ /*Код в этом месте выполняется в противном случае (a не равно b)*/ }
if x == 4 && y == 2
{ /*Код в этом месте выполняется, если x равно 4 и y равно 2*/ }
//Оператор цикла: while
a = 0
while( a < 3 )
{
//Код в этом месте выполняется, если a меньше 3
a + 3
}
//Операторы цикла: while, break
a = 0
while( a < 100 )
{
//Код в этом месте выполняется, если a меньше 100
if a == 10 { break } //Если a = 10, то разрываем цикл оператором break
//Для остановки нескольких вложенных циклов сразу можно использовать оператор breakX,
//где X - глубина. Например break2 остановит два цикла.
//А при помощи оператора breakall можно остановить все циклы,
//которые активны в данный момент для текущего потока выполнения.
a + 1
}
//Операторы цикла: while, continue
a = 0
b = 0
while( a < 100 )
{
//Код в этом месте выполняется, если a меньше 100
if a == 10 { a + 1 continue } //Если a = 10, то переходим к следующей итерации цикла
// (игнорируем следующие две строчки кода)
a + 1
b + 1
}
//Операторы перехода: go, goto
m1:
a + 1
goto m1 //Переход на метку m1
//Операторы остановки: halt, stop
halt //В этом месте программа останавливается
//Оператор подключения: include
include "prog2.txt" //В этом месте подключаем код из файла prog2.txt
//Оператор определения функции: fn
fn fff( $x, $y ) //Определяем функцию fff с параметрами $x и $y
{
//Код функции fff
ret //Простой выход из функции
ret( 4 ) //Выход из функции с возвращением значения 4
}
Ниже приведена таблица математических операторов. Приоритет 0 - наивысший, такие операции будут выполняться в первую очередь.
Приоритет | Оператор | Описание | Результат | Пример |
---|---|---|---|---|
0 | % | Деление по модулю | Целое число | a = b % 4 |
0 | / | Деление | Число с плавающей запятой | a = b / 4 |
0 | div | Целочисленное деление | Целое число | a = b div 4 |
0 | * | Умножение | Зависит от операндов | a = b * 4 |
0 | ! | Логическое отрицание (НЕ) | Целое число 1 или 0 | if !условие { ... } |
0 | ~ | Побитовая инверсия | Целое число | a = ~b |
1 | + | Сложение | Зависит от операндов | a = b + 4 |
1 | - | Вычитание | Зависит от операндов | a = b - 4 |
2 | >> | Битовый сдвиг вправо | Целое число | a = b >> 4 |
2 | << | Битовый сдвиг влево | Целое число | a = b << 4 |
3 | == | Равно | Целое число 1 или 0 | if a == b {} |
3 | != | Не равно | Целое число 1 или 0 | if a != b {} |
3 | < | Меньше | Целое число 1 или 0 | if a < b {} |
3 | > | Больше | Целое число 1 или 0 | if a > b {} |
3 | <= | Меньше или равно | Целое число 1 или 0 | if a <= b {} |
3 | >= | Больше или равно | Целое число 1 или 0 | if a >= b {} |
4 | | | Побитовая операция ИЛИ (OR) | Целое число | a = b | 4 |
4 | ^ | Побитовая операция исключающего ИЛИ (XOR) | Целое число | a = b ^ 4 |
4 | & | Побитовая операция И (AND) | Целое число | a = b & 4 |
5 | || | Логическая операция ИЛИ (OR) | Целое число 1 или 0 | if a || b {} |
5 | && | Логическая операция И (AND) | Целое число 1 или 0 | if a && b {} |
Контейнер может содержать элементы одного из нижеперечисленных типов.
64-битные типы в текущей версии не поддерживается, но поддержка может быть включена при самостоятельной сборке Pixilang из исходников. Для включения необходимо внести небольшие правки в файле pixilang.h в разделе Configuration.
Уровни компрессии:
R - чтение; W - запись.
Эти константы используются, например, при выводе текста. Их можно комбинировать при помощи побитовой операции ИЛИ (|). Отсутствие TOP и BOTTOM обозначает вертикальное выравнивание по центру. Отсутствие LEFT и RIGHT обозначает горизонтальное выравнивание по центру.
Типы эффектов для функции effector():
Режимы для gl_draw_arrays() (аналог функции glDrawArrays()):
Флаги для функции set_audio_callback():
Флаги для функций midi_get_device(), midi_open_port():
Флаги (опции) для thread_create():
Для функции op_cn():
Эти свойства могут использоваться при проигрывании, сохранении и загрузке контейнеров:
Создать новый контейнер с данными.
Сразу после создания контейнер может быть заполнен неопределенными значениями. Прежде чем читать из этого контейнера, его следует очистить функцией clean или заполнить полезными данными.
Параметры ( xsize, ysize, type )
Примерыp = new() //Создать контейнер 1x1. Тип = пиксели.
p = new( 4 ) //Создать контейнер 4x1. Тип = пиксели.
p = new( 4, 4 ) //Создать контейнер 4x4. Тип = пиксели.
p = new( 4, 4, FLOAT32 ) //Создать контейнер 4x4. Тип = 32-битные числа с плавающей запятой.
Удалить контейнер.
Параметры ( pixi )
p = new() //Создаем новый контейнер
remove( p ) //Удаляем его
Удалить контейнер и связанный с ним контейнер альфа-канала (прозрачность).
Параметры ( pixi )
Изменить параметры контейнера.
Параметры ( pixi, xsize, ysize, type, flags )
Возвращаемое значение: 0 - успешно; 1 - ошибка.
Примерыp = new() //Создаем новый контейнер 1x1
resize( p, 32 ) //Изменяем его размер на 32x1
remove( p ) //Удаляем контейнер
Перевернуть контейнер на угол angle*90 градусов, по часовой стрелке.
Параметры ( pixi, angle )
Преобразовать значения контейнера к другому типу.
Параметры ( pixi, new_type )
Очистить контейнер (заполнить нулями или указанным значением).
Параметры ( dest_cont, v, offset, count )
p = new() //Создаем новый контейнер
clean( p ) //Очищаем его
remove( p ) //И удаляем
Создать точную копию контейнера.
Параметры ( pixi )
Скопировать данные из контейнера src в контейнер dest.
Параметры ( dest, src, dest_offset, src_offset, count, dest_step, src_step, flags )
//Скопировать все элементы из контейнера img1 в img2:
copy( img2, img1 )
//Скопировать элементы 8...200 из контейнера img1 в img2:
copy( img2, img1, 8, 8, 200 )
//Скопировать 200 элементов начиная с 8 из контейнера img1 в img2 с шагом 2:
copy( img2, img1, 8, 8, 200, 2, 2 )
Возвращаемое значение: количество элементов, которые удалось успешно скопировать.
Получить размер контейнера (кол-во элементов).
Параметры ( pixi )
Размер контейнера (кол-во элементов).
Примерыp = new( 8, 8 ) //Создаем новый контейнер 8x8
size = get_size( p ) //Записываем его размер в переменную size
remove( p ) //Удаляем контейнер
Получить ширину контейнера.
Параметры ( pixi )
Примерыp = new( 8, 8 ) //Создаем новый контейнер 8x8
xsize = get_xsize( p ) //Записываем его ширину в переменную xsize
remove( p ) //Удаляем контейнер
Получить высоту контейнера.
Параметры ( pixi )
Примерыp = new( 8, 8 ) //Создаем новый контейнер 8x8
ysize = get_xsize( p ) //Записываем его высоту в переменную ysize
remove( p ) //Удаляем контейнер
Получить размер элемента контейнера (в байтах).
Параметры ( pixi )
Примерыp = new( 8, 8, INT16 ) //Создаем новый контейнер 8x8; тип элемента = INT16
esize = get_esize( p ) //Записываем размер его элемента в переменную esize
//Теперь в переменной esize находится число 2 (т.к. 16 бит - это два байта).
remove( p ) //Удаляем контейнер
Получить тип элемента контейнера.
Параметры ( pixi )
Примерыp = new( 8, 8, INT32 ) //Создаем новый контейнер 8x8; тип элемента = INT32
type = get_type( p ) //Записываем тип его элемента в переменную type
//Теперь в переменной type находится константа INT32.
remove( p ) //Удаляем контейнер
Получить флаги контейнера - 32-битное число, каждый бит в котором отвечает за включение/выключение какой-то опции контейнера.
Параметры ( pixi )
Установить флаги контейнера - 32-битное число, каждый бит в котором отвечает за включение/выключение какой-то опции контейнера.
Параметры ( pixi, flags )
set_flags( img, GL_MIN_LINEAR | GL_MAG_LINEAR )
Сбросить флаги контейнера.
Параметры ( pixi, flags )
Получить значение свойства контейнера. У каждого контейнера может быть неограниченное количество свойств.
Другой путь получения свойства контейнера - использовать оператор . (точка). Например: value = image.fps
Параметры ( pixi, prop_name, def_prop )
Установить значение свойства контейнера.
Другой путь установки свойства контейнера - использовать оператор . (точка). Например: image.fps = 20
Параметры ( pixi, prop_name, value )
p = new( 8, 8, INT32 ) //Создаем новый контейнер 8x8; тип элемента = INT32
set_prop( p, "speed", 777 ) //Добавляем свойство "speed" у созданного контейнера
v = get_prop( p, "speed" ) //Читаем значение этого свойства
//Теперь в переменной v лежит число 777
//Рассмотрим так же более простой способ работы со свойствами контейнера
//(при помощи оператора . (точка)):
p.speed = 777
v = p.speed
Удалить указанное свойство контейнера.
Parameters ( pixi, prop_name )
Удалить все свойства контейнера.
Параметры ( pixi )
Включить/выключить отладочные сообщения менеджера управления памятью.
Параметры ( enable )
Запаковать контейнер библиотекой Zlib.
Параметры ( source, level )
Распаковать контейнер библиотекой Zlib.
Параметры ( source )
Альтернативные имена: num2str.
Конвертировать число из переменной в текстовую строку (в контейнер).
Параметры ( str, num, radix )
v = 45.64
s = ""
num_to_str( s, v )
fputs( s ) fputs( "\n" )
Альтернативные имена: str2num.
Конвертировать текста (из контейнера) в число.
Параметры ( str )
Примерыa = str_to_num( "-55.44" )
b = a + 4
Добавляет строку source к строке destination. Обе строки должны заканчиваться символом с кодом 0, если кол-во остальных символов в строке меньше размера контейнера, в котором строка находится. После выполнения этой функции размер контейнера destination может увеличиться, если в нем не хватит места для строки source.
Параметры ( destination, source )
Параметры ( dest, dest_offset, source, source_offset )
Сравнивает две строки str1 и str2. Обе строки должны заканчиваться символом с кодом 0, если кол-во остальных символов в строке меньше размера контейнера, в котором строка находится.
Параметры ( str1, str2 )
Параметры ( str1, str1_offset, str2, str2_offset )
Возвращаемое значение:
Возвращает длину строки. Завершающий символ с кодом 0 не учитывается. Строки должна заканчиваться символом с кодом 0, если кол-во остальных символов в строке меньше размера контейнера, в котором строка находится.
Параметры ( str )
Параметры ( str, str_offset )
Возвращаемое значение: длина строки.
Ищет первое вхождение подстроки str2 в строке str1. Обе строки должны заканчиваться символом с кодом 0, если кол-во остальных символов в строке меньше размера контейнера, в котором строка находится.
Параметры ( str1, str2 )
Параметры ( str1, str1_offset, str2, str2_offset )
Возвращаемое значение: смещение подстроки str2 в строке str1 или -1, если подстрока не найдена.
Форматирует и запоминает наборы символов и значений в str. Каждый аргумент (если он есть), преобразуется и выводится согласно соответствующей спецификации формата в format. Подробное описание формата можно почитать здесь: https://ru.wikipedia.org/wiki/Printf или в любой документации на функцию sprintf() языка Си/Си++. Контейнер str расширяется при необходимости.
Параметры ( str, format, ... )
Возвращаемое значение: количество символов, записанных в str или отрицательное значение в случае ошибки.
Примерыsprintf( str, "Some text" ) //Записать текст в контейнер str
//В результате контейнер str будет содержать следующую строку: "Some text"
sprintf( str, "Number: %d", 12 ) //Записать знаковое десятичное число
//В результате контейнер str будет содержать следующую строку: "Number: 12"
То же самое, что sprintf, только результат (набор символов и значений) записывается в поток STDOUT.
Параметры ( format, ... )
Форматный вывод текста в указанный поток (открытый функцией fopen() или fopen_mem()).
Параметры ( stream, format, ... )
Форматный вывод текста в буфер для логов (журнал событий). Формат такой же, как в printf.
Параметры ( format, ... )
Получить буфер с логом (журнал событий).
Возвращаемое значение: ID нового контейнера, в котором лежит свежий лог; (контейнер нужно удалять вручную при помощи remove()).
Получить буфер с системным логом (журнал событий). Системный лог содержит сообщения от всех виртуальных машин Pixilang и различных системных функций (глобальная инициализация Pixilang).
Возвращаемое значение: ID нового контейнера, в котором лежит свежий лог; (контейнер нужно удалять вручную при помощи remove()).
Загрузить контейнер из файла.
Параметры ( filename, options )
Возвращаемое значение: ID загруженного контейнера или -1 в случае ошибки.
Примеры//Грузим файл:
c = load( "smile.jpg" )
if c >= 0
{
//Получаем формат загруженного файла:
file_format = c.file_format
//Возможные значения переменной file_format:
// FORMAT_RAW;
// FORMAT_JPEG;
// FORMAT_PNG;
// FORMAT_GIF;
// FORMAT_WAVE;
// FORMAT_AIFF;
// FORMAT_PIXICONTAINER;
// или еще какое-то из раздела "Типы файлов".
}
Загрузить контейнер из потока данных, открытого функцией fopen() или fopen_mem().
Параметры ( stream, options )
Возвращаемое значение: ID загруженного контейнера или -1 в случае ошибки.
Сохранить контейнер в указанном формате.
Параметры ( pixi, filename, format, options )
Примерыc = load( "smile.jpg" )
save( c, "smile.png", FORMAT_PNG )
save( c, "smile2.jpg", FORMAT_JPEG ) //Quality = 85 (default)
save( c, "smile3.jpg", FORMAT_JPEG, 100 ) //Quality = 100
Сохранить контейнер в поток данных, открытый функцией fopen() или fopen_mem().
Параметры ( pixi, stream, format, options )
Возвращаемое значение: 0 в случае успешного сохранения.
Преобразовать путь в стиле Pixilang (например, 1:/img.png) в стиль реальной файловой системы (например, C:/Documents and Settings/username/Application Data/img.png).
Параметры ( path )
Возвращаемое значение: ID контейнера с новым именем файла; (контейнер нужно удалять вручную при помощи remove()).
Examplesfilename = "1:/some_file"
realpath = get_real_path( filename )
printf( "File name: %s; Real path: %s\n", filename, realpath )
remove( realpath )
Функции для получения списка файлов.
Примерыpath = CURRENT_PATH //Директория, в которой мы будем сканировать файлы.
mask = -1 //Примеры маски: "txt/doc", "avi"; или -1 для получения всех файлов.
fl = new_flist( path, mask )
if fl >= 0
{
printf( "Some files found in %s\n", path )
while( 1 )
{
file_name = get_flist_name( fl )
file_type = get_flist_type( fl ) //0 - файл; 1 - директория;
if file_type == 0
{
printf( "FILE %s%s\n", path, file_name )
}
else
{
printf( "DIR %s%s\n", path, file_name )
}
if flist_next( fl ) == 0 //Переходим к следующему файлу
{
//Файлов больше нет
break
}
}
remove_flist( fl )
}
Получить размер файла.
Параметры ( filename )
Получить формат (одна из констант FORMAT_*) файла или потока (если задан stream и filename == -1).
Параметры ( filename, stream )
Получить строку с MIME-типом для указанного формата файла.
Параметры ( fileformat )
Получить строку с расширением для указанного формата файла.
Параметры ( fileformat )
Параметры ( filename )
Параметры ( old_filename, new_filename )
Скопировать файл из source_filename в destination_filename.
Параметры ( source_filename, destination_filename )
Создать директорию.
Параметры ( directory_name, mode )
Использовать поток данных _stream_ (открытый функцией fopen() или fopen_mem()) как виртуальный диск 0:/ . При этом _stream_ должен указывать на открытый незапакованный TAR архив. Файлы внутри TAR архива будут доступны для всех файловых функций через обращение к диску 0:/.
Параметры ( stream )
Параметры ( filename, mode )
Возвращаемое значение: ID потока данных, связанного с указанным файлом; или 0 в случае ошибки.
Примерыf = fopen( "/tmp/data.txt", "rb" ) //Открываем файл data.txt для чтения
fclose( f ) //...и закрываем его.
Открыть контейнер _data_ как файл.
Параметры ( data )
Возвращаемое значение: ID потока данных, связанного с указанным контейнером; или 0 в случае ошибки.
Параметры ( stream )
Примерыf = fopen( "/tmp/data.txt", "rb" ) //Открываем файл data.txt для чтения.
c = fgetc( f ) //Получаем байт из этого файла.
fclose( f ) //Закрываем файл.
Параметры ( c, stream )
Примерыf = fopen( "/tmp/data.txt", "wb" ) //Открываем файл data.txt для записи.
fputc( 0x12, f ) //Записываем байт 0x12 в этот файл.
fclose( f ) //Закрываем файл.
Параметры ( s, stream )
Примерыf = fopen( "/tmp/data.txt", "wb" ) //Открываем файл data.txt для записи.
str = "Hello!"
fputc( str, f ) //Записываем строку "Hello!" в этот файл.
fclose( f ) //Закрываем файл.
Параметры ( data, size, stream, data_offset_optional )
Примерыf = fopen( "/tmp/data.txt", "wb" ) //Открываем файл data.txt для записи.
str = "Hello!"
fwrite( str, 2, f ) //Записываем первые два байта из контейнера str в этот файл.
fclose( f ) //Закрываем файл.
Параметры ( stream )
Загрузить строку текста из потока stream.
Параметры ( s, n, stream, offset )
Возвращаемое значение: длина полученной строки.
Примерыstring = new( 256, 1, INT8 )
f = fopen( "/tmp/data.txt", "rb" ) //Открываем файл data.txt для чтения.
fgets( string, 256, f ) //Получаем строку текста из этого файла.
//Полученная строка помещается в указанный выше контейнер string.
//Если в контейнере недостаточно места, то строка обрезается.
fclose( f ) //Закрываем файл.
Загрузить блок данных из потока stream.
Параметры ( data, size, stream, data_offset_optional )
Параметры ( stream )
Параметры ( stream )
Параметры ( stream, offset, origin )
Параметры ( stream )
Примеры//Один из способов получения размера файла:
f = fopen( "/tmp/data.txt", "rb" )
fseek( f, 0, SEEK_END )
size_of_file = ftell( f )
fclose( f )
Установить значение одного из дополнительных атрибутов файла.
Параметры ( path, attr_name, data, data_size_in_bytes, flags )
Возвращаемое значение: 0 в случае успешного завершения или -1 в случае ошибки.
Вывести содержимое рабочего экрана на дисплей и подождать указанное количество миллисекунд.
Параметры ( delay, x, y, xsize, ysize )
Включить/выключить вертикальную синхронизацию (синхронизация кадровой частоты с частотой вертикальной развёртки монитора). vsync(1) - включить. vsync(0) - выключить.
Параметры ( enable )
Изменить размер пикселей на экране. Размер по умолчанию (минимальный) = 1. Увеличение размера ведет к уменьшению разрешения экрана.
Параметры ( size )
Получить размер экранного пикселя.
Сделать указанный контейнер текущим рабочим экраном. ID контейнера с экраном по умолчанию - 0.
Параметры ( pixi )
Получить ID контейнера, который в данный момент является рабочим экраном.
Возвращаемое значение: ID контейнера, который является рабочим экраном.
Параметры ( zbuf_container )
Указать контейнер, который будет буфером глубины (Z-Buffer) при рисовании трехмерных объектов. Подробнее про Z-буферизацию можно почитать здесь.
Контейнер должен иметь тип INT32 и по размерам совпадать с размером текущего экрана.
Получить значение цвета с заданными характеристиками r,g,b (красный,зеленый,синий).
Параметры ( red, green, blue )
Получить интенсивность красной составляющей в указанном цвете.
Параметры ( color )
Получить интенсивность зеленой составляющей в указанном цвете.
Параметры ( color )
Получить интенсивность синей составляющей в указанном цвете.
Параметры ( color )
Получить промежуточное значение цвета между двумя известными.
Параметры ( c1, c2, v )
Установить прозрачность для всех последующих функций.
Параметры ( t )
Получить текущее значение прозрачности.
Очистить текущий рабочий экран заданным цветом (или черным, если цвет не задан).
Параметры ( color )
Нарисовать точку.
Параметры ( x, y, color )
Нарисовать точку в 3D.
Параметры ( x, y, z, color )
Получить цвет в указанной точке.
Параметры ( x, y )
Получить цвет в указанной точке.
Параметры ( x, y, z )
Возвращаемое значение: значение цвета в указанной точке.
Нарисовать линию.
Параметры ( x1, y1, x2, y2, color )
Нарисовать линию в 3D.
Параметры ( x1, y1, z1, x2, y2, z2, color )
Нарисовать прямоугольник.
Параметры ( x, y, xsize, ysize, color )
Нарисовать закрашенный прямоугольник.
Параметры ( x, y, xsize, ysize, color )
Вывести на экран контейнер с картинкой.
Параметры ( pixi_cont, x, y, color, xscale, yscale, src_x, src_y, src_xsize, src_ysize )
pixi( image )
pixi( image, 10, 20 )
pixi( image, 30, 40, GREEN )
pixi( image, 90, 20, GREEN, 0.5, 0.5 )
Нарисовать массив треугольников.
Параметры ( vertices, triangles, tnum )
Отсортировать массив треугольников по глубине так, чтобы при вызове triangles3d() сначала рисовались дальние треугольники, а потом ближние.
Параметры ( vertices, triangles, tnum )
Установить/сбросить цвет прозрачности у контейнера.
Параметры ( pixi, color )
Привязать к контейнеру другой контейнер с альфа-каналом. Альфа-канал должен иметь тип INT8.
Параметры ( pixi, alpha )
Получить ID контейнера с альфа-каналом, привязанного к указанному контейнеру.
Параметры ( pixi )
Возвращаемое значение: ID контейнера или -1 (если альфа-канал отсутствует).
Вывести текст на экран.
Параметры ( text, x, y, color, align, max_xsize, str_offset, str_size )
print( "Hello Pixi!", 0, 0 ) //цвет - белый; выравнивание - по центру;
print( "line1\nline2", 50, 50, RED ) //выравнивание - по центру;
print( "line1\nline2", -50, 50, RED, TOP | LEFT ) //выравнивание - по верхнему левому краю;
Параметр ( text, align, max_xsize, str_offset, str_size )
Параметры ( first_char_utf32, font_image, xchars, ychars )
Параметры ( char_utf32 )
Возвращаемое значение: ID контейнера, в котором находится картинка шрифта для указанного символа.
Наложить эффект на выделенный участок экрана. На координаты этой функции не действует трансформация.
Параметры ( type, power, color, x, y, xsize, ysize, x_step, y_step )
Нарисовать цветной градиент в указанном прямоугольнике. На координаты этой функции не действует трансформация.
Параметры ( color1, transp1, color2, transp2, color3, transp3, color4, transp4, x, y, xsize, ysize, x_step, y_step )
Разбить картинку по каналам (красный, зеленый, синий) или наоборот собрать. Канал в данном случае - это контейнер любого типа, в который будут записываться (или считываться) значения яркости красной, зеленой или синей составляющей изображения.
Параметры ( direction, image, red_channel, green_channel, blue_channel, image_offset, channel_offset, size )
img = load( "some_image.jpg" )
xsize = get_xsize( img )
ysize = get_ysize( img )
r = new( xsize, ysize, INT16 )
g = new( xsize, ysize, INT16 )
b = new( xsize, ysize, INT16 )
split_rgb( 0, img, r, g, b ) //Разбиваем картинку img на составляющие r, g, b
//Получаем яркость красного (от 0 до 255) для первого пикселя изображения:
value = r[ 0 ]
Аналогична split_rgb(), только для преобразования в/из формата YCbCr.
Версия Pixilang с поддержкой OpenGL основана на стандартах OpenGL ES 2.0 и OpenGL ES Shading Language 1.0 (GLSL ES).
Краткое изложение стандарта на нескольких страницах: OpenGL ES 2.0 Quick Reference Card.
Установить gl_callback - функцию, которая будет отвечать за OpenGL-отрисовку кадра.
Параметры ( gl_callback, user_data )
fn gl_callback( $user_data )
{
set_screen( GL_SCREEN ) //Включить режим рисования в буфер OpenGL
clear( YELLOW )
set_screen( 0 ) //Возвращаемся в обычный режим рисования
}
set_gl_callback(
gl_callback,
0 )
while( 1 )
{
while( get_event() ) { if EVT[ EVT_TYPE ] == EVT_QUIT { break2 } }
frame()
}
set_gl_callback( -1 ) //Удалить gl_callback
Удалить из контейнера все OpenGL данные, которые были созданы автоматически во время перерисовки OpenGL кадра внутри gl_callback().
Параметры ( container )
Отправить запрос на обновление текстуры OpenGL, связанной с контейнером. Используйте эту функцию, если поменялось содержимое контейнера, но размер остался прежний.
Параметры ( container )
Гибрид OpenGL функций glColor4ub(), glBindTexture(), glVertexPointer(), glColorPointer(), glTexCoordPointer(), glDrawArrays().
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( mode, first, count, color_r, color_g, color_b, color_a, texture, vertex_array, color_array, texcoord_array )
Полный аналог OpenGL функции glBlendFunc() или glBlendFuncSeparate() (если заданы sfactor_alpha и dfactor_alpha).
Можно вызывать только внутри кода, заданного set_gl_callback().
Вызывайте эту функцию без параметров, если нужно сбросить все значения в исходное состояние.
Параметры ( sfactor, dfactor, sfactor_alpha, dfactor_alpha )
Превратить указанный контейнер cnum в OpenGL framebuffer (с прикрепленной текстурой) и сделать его текущим - то есть, все последующие операции рисования отправлять не на экран, а в этот буфер.Для отключения и перехода обратно на основной экран - вызовите эту функцию без параметров.Разрешение основного экрана никак не влияет на выбранный framebuffer.
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( cnum )
Привязать указанный контейнер cnum к текстурному блоку texture_unit.
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( cnum, texture_unit )
fn gl_callback( $userdata )
{
set_screen( GL_SCREEN )
gl_bind_texture( some_image2, 1 ) //привязать контейнер some_image2 к текстурному блоку 1
gl_bind_texture( some_image3, 2 ) //привязать контейнер some_image3 к текстурному блоку 2
gl_use_prog( gl_prog ) //Use user-defined GLSL program
gl_uniform( gl_prog.g_texture2, 1 ) //установка переменной шейдера: g_texture2 = текстурный блок 1
gl_uniform( gl_prog.g_texture3, 2 ) //установка переменной шейдера: g_texture3 = текстурный блок 2
pixi( some_image )
gl_use_prog() //Back to default GLSL program
set_screen( 0 ) //Back to the default screen
}
gl_vshader = GL_SHADER_TEX_RGB_SOLID //Vertex shader = default shader for solid primitives drawing
gl_fshader = //Fragment shader
"uniform sampler2D g_texture; //главный текстурный блок 0 (задается из pixi())
uniform sampler2D g_texture2; //текстурный блок 1
uniform sampler2D g_texture3; //текстурный блок 2
uniform vec4 g_color;
IN vec2 tex_coord_var;
void main()
{
vec4 c1 = texture2D( g_texture, tex_coord_var );
vec4 c2 = texture2D( g_texture2, tex_coord_var );
vec4 c3 = texture2D( g_texture3, tex_coord_var );
gl_FragColor = ( c1 + c2 + c3 ) * g_color;
}
"
gl_prog = gl_new_prog( gl_vshader, gl_fshader )
Получить значение параметра состояния в целочисленном формате. Полный аналог OpenGL функции glGetIntegerv().
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( pname )
Получить значение параметра состояния в формате числа с плавающей точкой. Полный аналог OpenGL функции glGetFloatv().
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( pname )
Версия Pixilang с поддержкой OpenGL может использовать вершинные (vertex) и фрагментные (fragment) шейдеры, которые описываются специальным языком (основанном на ANSI C) OpenGL ES Shading Language 1.0 (GLSL ES).
Вершинный шейдер обрабатывает параметры вершин многогранников (из которых построены все объекты в OpenGL): координаты, текстурные координаты, цвет и т.д.
Фрагментный шейдер обрабатывает цвет каждого пикселя во время рисования многогранника.
В вершинных шейдерах используйте следующие правила (для получения максимальной кросс-платформенности в Pixilang):
Создать новую GLSL программу - контейнер, совмещающий вершинный и фрагментный шейдеры. Эту функцию можно вызывать в любом месте Pixilang-кода. Непосредственная сборка программы (компиляция шейдеров и их объединение) будет происходить позже, когда вы передадите этот контейнер в функцию gl_use_prog().
Параметры ( vertex_shader, fragment_shader )
Использовать GLSL программу, созданную ранее при помощи gl_new_prog().Если программа используется впервые, то будет произведена компиляция и объединение шейдеров, находящихся внутри этой программы.
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( prog )
Pixilang может передавать данные в GLSL переменные с квалификатором uniform. Uniform-переменные являются глобальными и могут использоваться как в вершинных, так и во фрагментных шейдерах. Функции типа gl_uniform() используются для передачи значений в эти переменные.
Можно вызывать только внутри кода, заданного set_gl_callback().
Через gl_uniform() можно также менять содержимое массивов в шейдерах, если использовать эту функцию следующим образом:
gl_uniform( var_location, src_container, vector_size, first_vector, count ), где count - это количество векторов, которые будут записаны в массив из контейнера src_container.
Параметры ( var_location, v0, v1, v2, v3 )
gl_use_prog( gl_prog ) //Используем GLSL программу gl_prog
gl_uniform( gl_prog.g_time, get_timer( 0 ) ) //Задаем значение uniform-переменной g_time
Функция аналогичная gl_uniform(), но для работы с матрицами.
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( size, matrix_location, transpose, matrix )
gl_use_prog( gl_prog ) //Использовать GLSL программу gl_prog
gl_uniform( 4, gl_prog.g_mat, 0, source_matrix ) //Сохранить данные из контейнера source_matrix в матрицу g_mat
Запаковать текущее содержимое контейнера в кадр. Номер кадра должен быть в свойстве "frame" этого контейнера.
Параметры ( pixi )
Распаковать кадр в текущее содержимое контейнера. Номер кадра должен быть в свойстве "frame" этого контейнера.
Параметры ( pixi )
Создать анимацию - скрытую область контейнера, в которой будут располагаться запакованные кадры.
Параметры ( pixi )
Удалить анимацию в указанном контейнере.
Параметры ( pixi )
Продублировать текущий кадр в указанном контейнере. Номер кадра должен быть в свойстве "frame" этого контейнера.
Параметры ( pixi )
Удалить текущий кадр в указанном контейнере. Номер кадра должен быть в свойстве "frame" этого контейнера.
Параметры ( pixi )
Включить режим авто-проигрывания для указанного контейнера. В этом режиме нужные кадры будут распаковываться автоматически во время вызова функции pixi().
Параметры ( pixi )
Выключить режим авто-проигрывания для указанного контейнера.
Параметры ( pixi )
Трансформация системы координат.
Сброс (очистка текущей матрицы трансформации).
Параметры ( angle, x, y, z )
Параметры ( x, y, z )
Параметры ( x, y, z )
Сохранить текущую матрицу трансформации в стек.
Загрузить последнюю сохраненную матрицу трансформации из стека.
Получить текущую матрицу трансформации (4x4 FLOAT).
Параметры ( matrix_container )
Установить текущую матрицу трансформации (4x4 FLOAT).
Параметры ( matrix_container )
Умножить текущую матрицу трансформации на matrix_container.
Параметры ( matrix_container )
Пересчитать координаты точки с учетом текущей матрицы трансформации.
Параметры ( point_coordinates )
Задать функцию, которая будет генерировать звуковой поток.
Параметры ( callback, userdata, sample_rate, format, channels, flags )
fn audio_callback( $stream, $userdata, $channels, $frames, $time )
{
generator( OP_SIN, $channels[ 0 ], 0, 32767 / 2, 0.1, 0 ) //Левый канал
generator( OP_SIN, $channels[ 1 ], 0, 32767 / 2, 0.1, 0 ) //Правый канал
ret(1)
//возвращаемые значения:
// 0 - тишина, выходные каналы $channels не заполнены;
// 1 - выходные каналы $channels заполнены (как в примере выше);
// 2 - тишина, выходные каналы $channels заполнены нулями (или знач. близкими к нулю).
}
//Запустить звук:
set_audio_callback( audio_callback, 0, 22050, INT16, 2, AUDIO_FLAG_INTERP2 )
//Остановить звук:
set_audio_callback( -1 )
Получить локальную или глобальную частоту дискретизации.
Параметры ( source )
Параметры ( disable_enable )
Получить частоту указанной ноты (используется быстрый, не очень точный алгоритм).
Чатота ноты по стандарту MIDI = get_note_freq( midi_note, 0 ) / 64; (ниже на 5 октав)
Параметры ( note, finetune )
Параметры ( client_name )
Возвращаемое значение: ID клиента или отрицательное значение в случае ошибки.
Параметры ( client_id )
Параметры ( client_id, device_num, flags )
Возвращаемое значение: имя устройства под номером device_num или -1, если нет такого устройства.
Параметры ( client_id, port_name, device_name, flags )
Возвращаемое значение: номер открытого порта (port ID) или отрицательное значение в случае ошибки.
Параметры ( client_id, port_id )
Параметры ( client_id, port_id )
Параметры ( client_id, port_id, data_cont )
Возвращаемое значение: размер (в байтах) текущего MIDI события.
Параметры ( client_id, port_id )
Возвращаемое значение: время (в системных тиках) текущего MIDI события
Перейти на следующее сообщения в очереди.
Параметры ( client_id, port_id )
Параметры ( client_id, port_id, data_cont, data_size, t )
Движок модульного синтезатора SunVox встроен в Pixilang начиная с версии 3.8.
Подробное описание всех функций находится здесь.
Запустить таймер.
Параметры ( timer_num )
Получить значение таймера в миллисекундах.
Параметры ( timer_num )
Получить значение системного 32-битного таймера высокого разрешения. Единица измерения - 1 тик.
Получить количество системных тиков в секунду.
Заснуть на указанный промежуток времени.
Параметры ( delay )
Получить очередное событие от системы.
Возвращаемое значение: 0 - нет новых событий; 1 - очередное событие получено, и оно находится в контейнере EVT.
Установить поведение программы при получении события EVT_QUIT.
Параметры ( action )
Создать новый поток выполнения, в котором сразу после создания будет запущена функция thread_function( $thread_id, $user_data )
Параметры ( thread_function, user_data, flags_optional )
Возвращаемое значение: ID потока или -1 в случае ошибки.
Примерыfn thread_body( $thread_id, $user_data )
{
printf( "Thread code\n" )
}
thread_id = thread_create( thread_body, 0 ) //Создаем новый поток
err = thread_destroy( thread_id, 1000 ) //Ждем до 1000 миллисекунд, пока поток завершится
if err == 0 { printf( "Поток успешно завершен и закрыт\n" ) }
if err == 1 { printf( "Тайм-аут. Стоит попробовать еще раз\n" ) }
if err == 2 { printf( "Возникла ошибка в функции thread_destroy()\n" ) }
Закрыть поток выполнения.
Параметры ( thread_id, timeout_ms )
Примерыnew_mutex = mutex_create()
mutex_lock( new_mutex )
mutex_unlock( new_mutex )
mutex_destroy( new_mutex )
acos( x ); acosh( x ); asin( x ); asinh( x ); atan( x ); atanh( x ); ceil( x ); cos( x ); cosh( x ); exp( x ); exp2( x ); expm1( x ); abs( x ); floor( x ); mod( x, y ); log( x ); log2( x ); log10( x ); pow( base, exp ); sin( x ); sinh( x ); sqrt( x ); tan( x ); tanh( x );
rand() - получить случайное число в диапазоне от 0 до 32767;
rand_seed( seed ) - установить позицию (состояние) генератора случайных чисел.
Функции для смены типа данных без изменения содержимого. Подробнее
Параметры ( value, mode, intermediate_value_bits )
Примечание: функции обработки данных не работают с контейнерами динамического типа.
Выполнить операцию обработки данных. Операнды: - контейнер C1; - числовое значение N.
Для каждого элемента контейнера C1 будет выполняться следующее:C1[ i ] = C1[ i ] OP N,
где i - номер элемента; OP - выбранная операция.
Параметры ( opcode, C1, N ) - для всего контейнера С1
Параметры ( opcode, C1, N, x, xsize ) - область задана в 1D координатах
Параметры ( opcode, C1, N, x, y, xsize, ysize ) - область задана в 2D координатах
* opcode - код операции; * C1 - контейнер, над которым будет производиться выбранная операция; результат будет помещен в него же; * N - числовое значение; * x,y,xsize,ysize - регион, в котором будет выполняться операция.
Примеры//Прибавить число 32 к каждому элементу контейнера img:
op_cn( OP_ADD, img, 32 )
//Прибавить число 32 к элементам 128...256:
op_cn( OP_ADD, img, 32, 128, 128 )
//Прибавить число 32 к элементам в регионе (8,8,32,32):
op_cn( OP_ADD, img, 32, 8, 8, 32, 32 )
Выполнить операцию обработки данных. Операнды: - контейнер C1; - контейнер C2.
Для каждого элемента контейнера C1 будет выполняться следующее:C1[ i ] = C1[ i ] OP C2[ i ],
где i - номер элемента; OP - выбранная операция.
Параметры ( opcode, C1, C2 ) - для всей области контейнера С1
Параметры ( opcode, C1, C2, dest_x, src_x, xsize ) - область задана в 1D координатах
Параметры ( opcode, C1, C2, dest_x, dest_y, src_x, src_y, xsize, ysize ) - область задана в 2D координатах
Выполнить операцию обработки данных. Операнды: - контейнер C1; - контейнер C2; - числовое значение N.
Для каждого элемента контейнера C1 будет выполняться следующее:C1[ i ] = C1[ i ] OP C2[ i ] OP2 N,
где i - номер элемента; OP - выбранная операция; OP2 - дополнительная операция.
Параметры ( opcode, C1, C2, N ) - для всей области контейнера C1
Параметры ( opcode, C1, C2, N, dest_x, src_x, xsize ) - область задана в 1D координатах
Параметры ( opcode, C1, C2, N, dest_x, dest_y, src_x, src_y, xsize, ysize ) - область задана в 2D координатах
Генератор сигнала.
Параметры ( opcode, pixi, phase, amplitude, delta_x, delta_y, x, y, xsize, ysize )
//Сгенерировать синусоиду в контейнер img:
generator( OP_SIN, img, 0, 1, 0.1, 0.1 )
//Сгенерировать синусоиду по более быстрому, но менее точному алгоритму:
generator( OP_SIN8, img, 0, 1, 0.1, 0.1 )
//Сгенерировать синусоиду в элементы 8...128 контейнера img:
generator( OP_SIN, img, 0, 1, 0.1, 0.1, 8, 120 )
//Сгенерировать синусоиду в регион (8,8,32,32) контейнера img:
generator( OP_SIN, img, 0, 1, 0.1, 0.1, 8, 8, 32, 32 )
Очень быстрый многоканальный сэмплер (набор из неограниченного количества примитивных генераторов), где сэмпл имеет фиксированный размер (32768 отсчетов) и всегда зациклен (loop).
Параметры ( dest, dest_offset, dest_length, table, amp, amp_delta, pos, pos_delta, gen_offset, gen_step, gen_count )
Параметры ( sample_info )
Примерыsample_data = new( 256, 1, INT16 ) //создаем 16-битный сэмпл
sample_info = new( SMP_INFO_SIZE, 1, INT32 ) //создаем контейнер для сэмплера
clean( sample_info )
sample_info[ SMP_DEST ] = buffer //Контейнер, в который будем записывать
sample_info[ SMP_DEST_OFF ] = 0 //Смещение в контейнере
sample_info[ SMP_DEST_LEN ] = 256 //Размер области, которую будем заполнять
sample_info[ SMP_SRC ] = sample_data
sample_info[ SMP_SRC_OFF_H ] = 0 //Смещение сэмпла (левая часть числа с фиксированной точкой)
sample_info[ SMP_SRC_OFF_L ] = 0 //Смещение сэмпла (правая часть числа с фиксированной точкой, от 0 до 65535)
sample_info[ SMP_SRC_SIZE ] = 0 //Размер сэмпла (0 - весь сэмпл целиком)
sample_info[ SMP_LOOP ] = 0 //Начало лупа (повторяемого участка сэмпла)
sample_info[ SMP_LOOP_LEN ] = 128 //Длина лупа (или 0, если луп отключен)
sample_info[ SMP_VOL1 ] = 0 //Начальная громкость
sample_info[ SMP_VOL2 ] = 32768 //Конечная громкость (32768 = 1.0)
sample_info[ SMP_DELTA ] = ( 1 << 16 ) //Дельта (скорость проигрывания); fixed point (real_value * 65536)
sample_info[ SMP_FLAGS ] = SMP_FLAG_INTERP4 | SMP_FLAG_PINGPONG //Кубическая сплайновая интерполяция и луп в режиме ping-pong
sampler( sample_info ) //Записываем сэмпл с выбранными параметрами в контейнер buffer
Линейная интерполяция (по двум точкам) усиления и DC-смещения в выделенной области контейнера. Без ограничения (защиты от переполнения).
Параметры ( data_cont, v1, v2, offset, size, dc_offset1, dc_offset2 )
Параметры ( container, val1, val2, val3, val4, x, y, xsize, ysize, x_step, y_step )
Выполнить быстрое преобразование Фурье.
Параметры ( inverse, im, re, size )
Создать новый фильтр, в основе которого следующая функция:output[ n ] = ( a[ 0 ] * input[ n ] + a[ 1 ] * input[ n - 1 ] + ... + a[ a_count - 1 ] * input[ n - a_count - 1 ]
+ b[ 0 ] * output[ n - 1 ] + ... + b[ b_count - 1 ] * output[ n - b_count - 1 ] ) >> rshift;
Параметры ( flags_for_future_use )
Возвращаемое значение: ID нового контейнера, в котором находятся данные фильтра.
Параметры ( filter )
Параметры ( filter )
Параметры ( filter, a, b, rshift, flags )
Применить фильтр.
Параметры ( filter, output, input, flags, offset, size )
Подстановка значений контейнера. Типы контейнеров dest и values должны быть одинаковыми. Для каждого элемента контейнера dest будет выполняться следующее действие: dest[ i ] = values[ (unsigned)src[ i ] ]
Параметры ( dest, src, values, dest_offset, src_offset, size )
//Преобразовать 8-битную картинку в формат пикселей текущего экрана:
//src - это, например, контейнер основного экрана;
//img8 - контейнер с 8-битной картинкой (256 цветов);
//palette - контейнер с палитрой из 256 цветов;
replace_values( scr, img8, palette )
Скопировать (и растянуть/сжать, если нужно) указанную область контейнера src в указанную область контейнера dest.
Параметры ( dest, src, flags, dest_x, dest_y, dest_rect_xsize, dest_rect_ysize, src_x, src_y, src_rect_xsize, src_rect_ysize )
Применить фильтр свертки (матрица свертки).
Параметры ( dest, src, kernel, div, offset, flags, kernel_xcenter, kernel_ycenter, dest_x, dest_y, src_x, src_y, xsize, ysize, xstep, ystep )
Открыть диалоговое окно выбора файла.
Параметры ( dialog_name, mask, id, default_name, flags )
Открыть диалоговое окно с глобальными настройками Pixilang.
Открывает диалог ввода текста (пока только латиница) и возвращает введенную строку.
Параметры ( default_text, dialog_name )
Открыть указанный URL в браузере.
Параметры ( url_string )
Открыть динамически подключаемую библиотеку (например, .DLL для Windows или .SO для Linux).
Параметры ( lib_file_name )
Возвращаемое значение: ID открытой библиотеки или -1 в случае ошибки.
Примеры//Например, мы имеем какую-то C функцию int show_info( int x, int y, void* data )
//в библиотеке mylib.dll.
//Вызовем ее из Pixilang:
dl = dlopen( "mylib.dll" ) //Открываем библиотеку
if dl >= 0
{
f = dlsym( dl, "show_info", "iip" ) //Получаем ID функции show_info()
// "iip" - int int pointer
if f >= 0
{
retval = dlcall( dl, f, 1, 2, "blahblah" ) //вызываем функцию show_info() с параметрами 1, 2, "blahblah"
}
dlclose( dl ) //Закрываем библиотеку
}
Закрыть динамически подключаемую библиотеку.
Параметры ( lib_id )
Получить ID символа (функции или переменной) из динамической библиотеки.
Параметры ( lib_id, symbol_name, format, calling_convention )
Вызвать функцию из динамической библиотеки.
Параметры ( lib_id, symbol_id, optional_function_parameters )
Выполнить системную команду.
Параметры ( command )
Примеры//Удаляем файл в Unix-совместимой ОС:
system( "rm /tmp/data.txt" )
Функция возвращает количество аргументов, переданных программе.
Функция возвращает ID контейнера со строкой, в которой записан аргумент под номером n.
Параметры ( n )
Примерыif argc() >= 4
{
a = argv( 3 )
remove( a )
}
Выйти из Pixilang.
Параметры ( exit_code )
Примерыexit( 4 ) //Выйти с кодом 4