Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также любые проблемы программирования на различных макроязыках и в скриптовых средах)

Скриптовый язык FBSL

Freestyle Basic Script Language (FBSL) - скриптовый язык, развивающийся с 2001 года энтузиастами Gerome Guillemin, Mehdi Bouaziz и Mike Lobanovsky (а также некоторыми другими). На момент написания этой статьи язык развивается довольно интенсивно, что можно увидеть по его change log'у. Это простой и лёгкий скриптовый язык, готовый к использованию сразу же после установки. Язык позиционируется как "гибридный", поэтому в названии присутствует слово "Freestyle". FBSL имеет ярко выраженный бейсикоподобный синтаксис, регистронезависимый. Отличительные черты языка:

Лицензия позволяет распространять неизменённые копии языка без специального соглашения и оплаты, при условии, что язык распространяется бесплатно и без извлечения прибыли. Скачать последнюю версию языка можно здесь. На момент написания этой статьи дистрибутив языка весит порядка 6.3 Мб. Довольно подробный справочный CHM-файл (англ.), который можно скачать и отдельно, входит в дистрибутив. Также после установки вы найдёте туториал для начинающих в формате PDF (англ.) и свыше 500 примеров скриптов, отсортированных по категориям, в каталогах Samples и Templates.

История создания языка началась в 2001 году. Язык был создан его автором, Gerome Guillemin, как инструмент для собственного использования. Изначально это было несколько инструментов на Cи, призванных заменить batch-скрипты для ряда задач. Затем была создана версия языка 0.1, которая содержала 15 специальных команд. После этого язык был выложен в сеть, где и нашёл своих приверженцев.

На данный момент язык имеет 5 базовых типов переменных: 32-битные целые, 32-битные числа с плавающей запятой, 64-битные целые с двойной точностью, строки и указатели. Язык имеет встроенные модули для работы с COM, API, буфером обмена, строками, математическими операциями, регулярными выражениями, динамическими массивами, MMF (Memory Mapped Files), сжатием по алгоритму LZO, сокетами, потоками и консолью.

Как неприятность следует отметить несколько корявую работу с кодировками: язык не работает напрямую с Юникодом, и работа со строками на русском языке может быть неудобной.

Hello, World!

Создайте текстовый файл с расширением fbs следующего содержания:

#AppType Console
Print "Hello World!"
Pause 

Запустите его на исполнение двойным щелчком и вы увидите окно консоли со следующим выводом:

Hello World!
Press any key to continue...

Первая строка скрипта определяет вид программы (возможные значения - CONSOLE, GUI, CGI, MDI). Вторая строка выводит текст на консоль. И наконец, третья строка обеспечивает, что окно консоли не захлопнется сразу, а будет ожидать пользовательского ввода. Примечание: чтобы вывести на консоль русский текст, придётся сохранить текст скрипта в кодировке cp866.

Пример объектно-ориентированного подхода:

#AppType Console
#Option Explicit

NameSpace Test
Class CEN
    Private:
    s
    Sub Initialize(s_)
        s = s_
    End Sub
    Public:
    Method Hello()
        Return "Hello " & s
    End Method
End Class

Class CFR
    Private:
    s
    Sub Initialize(s_)
        s = s_
    End Sub
    Public:
    Method Hello()
        Return "Salut " & s
    End Method
End Class
End NameSpace

Dim H As New Test.CEN("Gerome"), I As New Test.CFR("Mehdi")

Print H.Hello()
Print I.Hello()

Pause

Здесь создаётся пространство имён "Test", которое содержит два класса: CEN и CFR. Первый составляет текст приветствия по-английски, второй - по-французски. Каждый из классов содержит секции Private и Public. Приватный метод класса Initialize() получает строку для составления приветствия при создании объекта класса, а публичный метод класса Hello() генерирует и возвращает эту строку. Директива "Option Explicit" вначале скрипта имеет тот же смысл, что и во всех бейсиках: заставляет обязательно объявлять переменные. После описания пространства имён объявляются две переменные соответствующих классов (создаются объекты этих классов), а затем вызывается метод Hello() каждого объекта, и его результаты работы выводятся на консоль.

Пример построения GUI-интерфейса:

#Option Explicit

Dim %hHello ' integer
Dim %hButton ' integer
Const IDB_HELLO = 1000
Const WM_CLOSE = &H10
Const WM_COMMAND = &H111


FBSL_SetText(Me, "Test GUI") ' the caption of the main window "Me"
hButton = FBSL_Control("Button", Me, "Hello", IDB_HELLO, 10, 10, 75, 23, 0, 0) ' button
hHello = FBSL_Control("Static", Me, "", 0, 0, 50, 300, 150, 0, 0) ' label
FBSL_SetFont(hHello, "Verdana", 34, 0, 0, 0, 0) ' sets font
Show(Me) ' displays the main window

Begin Events ' events loop
    If CBMSG = WM_CLOSE Then ExitProgram(0)
    If CBMSG = WM_COMMAND And CBCTL = IDB_HELLO Then EventHello()
End Events

Sub EventHello() ' button "Hello"
    FBSL_SetText(hHello, "Hello, World!")
    Hide(hButton)
End Sub

Скрипт выше выведет на экран окно с заголовком "Test GUI". При нажатии на кнопку "Hello" появится надпись "Hello, World!", а кнопка будет скрыта. Примечание: чтобы вывести в окне русский текст, придётся сохранить текст скрипта в кодировке cp866.

Небольшой пример работы с COM:

Const szScript = "MsgBox( ""Это тест VBScript."" & vbcrlf & ""Работает!"", 64 Or 3 )"
Dim %scrCtl

InitializeCom( True )
scrCtl = CreateObject("MSScriptControl.ScriptControl", "")

If scrCtl <> 0 and PutValue( scrCtl, ".Language = %s", "VBScript" ) = 0 Then
    PutValue(scrCtl, ".AllowUI = %b", TRUE)
    PutValue(scrCtl, ".UseSafeSubset = %b", FALSE)
    CallMethod(scrCtl, ".Eval(%s)", szScript)
End If

ReleaseObject(scrCtl)
UnInitializeCom()

Скрипт выше исполняет небольшой фрагмент кода VBScript, используя MSScriptControl (будет выведено диалоговое окно).

Демонстрация нескольких способов вызова функций Win32 API:

#AppType Console

#dlldeclare kernel32("Beep", "Sleep")
Beep(260, 200) : Sleep (200) : Beep(260, 200)

#Uses "@|WIN32"

Print ApiCall("MessageBox", "user32", 0, "Hello!", "Alert!", MB_YESNO)
Pause

#dllImport User32 as Usr
Print Usr("MessageBox", 0, "Hello!", "Alert!", MB_YESNO )
Pause

#dllDeclare User32.MessageBox As MBox
Print MBox(0, "Hello!", "Alert!", MB_YESNO + MB_ICONSTOP)
Pause

Скрипт выше издаёт звук системным динамиком, а затем трижды вызывает API-функцию MessageBox различными способами с демонстрацией кодов её возврата в консоли.

Исполняемые файлы

После установки FBSL вы получите команду контекстного меню для fbs-файлов "[FBSL v3] Compile script". Эта команда позволяет практически мгновенно получить исполняемый файл (exe), который будет работать на компьютерах, где не установлен FBSL. При компиляции будет запрошен пароль на последующую декомпиляцию. После установки FBSL вы также получите команду контекстного меню для exe-файлов "[FBSL3] Decompile". Эта команда позволяет получить текст скрипта, который будет отображён в открывшемся окне декомпилятора. Если при компиляции был задан пароль, он будет запрошен.

Fbsl_Tiny.exe позволяет создавать исполняемые программы меньшего размера, которые имеют зависимость FBSL.DLL (библиотека должна находиться рядом или в каталоге Windows). Этому соответствует команда контекстного меню "[FBSL v3] Compile script Tiny".

Программа FBSL2EXE\Fbsl2exe.fbs позволяет выполнить компиляцию выбранного скрипта в диалоговом режиме.

Людоговский Александр, 15.01.2009г.

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.