Введение
Клиент Internet Relay Chat с открытым исходным кодом
Visual IRC (ViRC) — это клиент Internet Relay Chat с открытым исходным кодом для операционной системы Windows. В отличие от многих других IRC-клиентов, почти вся функциональность ViRC реализована с помощью встроенного IRC-скрипта, что позволяет расширять или изменять поведение программы, не изменяя исходный код.
История
Visual IRC (16 бит) – Выпущен в 1995 году для Windows 3.x, разработанный MeGALiTH. Эта программа обладала множеством встроенных функций, но также поддерживала скриптинг с помощью VPL (ViRC Programming Language) – предшественника ViRCScript и Versus. Visual IRC '96 (и позднее Visual IRC '97, Visual IRC '98) – Выпущен в 1996 году, разработанный MeGALiTH. Это была первая 32-битная версия ViRC, созданная для Windows 9x/NT. Многие функции, встроенные в 16-битный ViRC, обрабатывались скриптом по умолчанию в ViRC '96. ViRC '98 содержал код, предоставленный Тарой МакГрю, известной как "Mr2001", в частности, улучшения для движка ViRCScript. Язык скриптов был несовместим с предыдущей версией. В более поздних версиях были добавлены функции голосовой связи и видеоконференций. Разработка второго поколения замедлилась, и к 2000 году Visual IRC фактически прекратил своё существование. Изначальный автор MeGALiTH (Адриан Кэйбл) передал исходный код пользователю Mr2001 (Тара МакГрю), который ранее внес свой вклад в код, и тайно разрабатывал клон под названием Bisual IRC (BIRC). Вместо возобновления разработки кодовой базы ViRC '98, он объединил некоторые функции ViRC '98 в BIRC и выпустил его как Visual IRC 2. Visual IRC 2 – Впервые выпущенный Mr2001, случайно в 2001 году, язык скриптов Versus в этой версии основан на ViRCScript, но внутренне он был почти полностью переписан. Фактически, ViRC 2 имеет лишь несколько сотен строк кода, общих с ViRC '98. Функции голосовой и видеосвязи были удалены в этой версии, поскольку библиотеки, использовавшиеся для их реализации, больше не поддерживались. Большая часть исходного кода BIRC, ViRC 2 и связанных утилит была опубликована под лицензией GPL на веб-сайте проекта и SourceForge.
Против
Versus – это язык сценариев, изначально разработанный для IRC-клиента Bisual IRC и в настоящее время используемый с Visual IRC. Он во многом похож на языки сценариев, используемые ircII и mIRC, а также на Tcl и C. Название "Versus" было выбрано, поскольку его можно было сократить до "VS", что было распространенной аббревиатурой для ViRCScript – языка, использовавшегося в Visual IRC с 1996 по 1998 год. Versus оставался в значительной степени обратно совместимым с ViRCScript, поэтому существующая документация и комментарии, упоминавшие "VS", в основном сохраняли свою актуальность применительно к Versus. Название также отсылало к происхождению BIRC как замены ViRC. Object Versus, или OVS, обозначает объектно-ориентированные возможности Versus. Скрипты могут определять классы и работать с объектами и методами вместо текстовых данных и псевдонимов, однако на практике OVS в основном используется для манипулирования объектами VCL, составляющими интерфейс ViRC.
The name "Versus" was chosen because it could be shortened to "VS", which was a common abbreviation for ViRCScript, the language used by Visual IRC '96 through '98. Versus remained mostly backward compatible with ViRCScript, so existing documentation and commentary that mentioned "VS" remained mostly accurate when applied to Versus. The name also alluded to BIRC's origins as a replacement for ViRC. Object Versus, or OVS, refers to the object oriented features of Versus. Scripts can define classes and work with objects and methods instead of textual data and aliases; however, in practice, OVS is mostly used to manipulate the VCL objects that make up ViRC's interface.
Хранение сценариев
Скрипты хранятся в файлах, обычно с расширением файла, хотя иногда используется расширение lib. Файл скрипта Versus содержит только операторы, которые интерпретируются при загрузке скрипта; любые блоки, определенные в скрипте (см. ниже), заменяют блоки с тем же именем, определенные в предыдущих скриптах.
Блоки, которые могут быть определены в скрипте
Псевдонимы — это подпрограммы. Их можно вызывать из командной строки любого окна или из других частей скрипта. Псевдонимы, возвращающие значение, называются функциями; псевдоним может определить, ожидается ли возвращение значения, и затем действовать как функция или команда соответствующим образом. Классы используются в объектно-ориентированном скрипте (OVS). Каждый класс может содержать свойства, методы, конструктор и деструктор. События используются для обработки сообщений с IRC-сервера, а также определенных системных или клиентских событий, таких как завершение передачи файла или открытие нового окна. Серверные события используют регулярные выражения или собственные подстановочные знаки Versus для сопоставления сообщений с сервера. Если несколько серверных событий соответствуют конкретному сообщению, будет выполнено только то, которое имеет наивысший приоритет (вычисляемый на основе длины шаблона и относительной "ценности" подстановочных знаков в нем). Клиентские события идентифицируются по имени: например, <OnCreateWindow foo> и <OnCreateWindow bar> будут запущены при открытии нового окна. Они также могут включать шаблоны, которые ограничивают конкретные события, способные вызвать это событие (например, запускаться только при создании нового окна канала). Деревья меню и элементы меню определяют контекстные меню, которые могут появляться для различных элементов интерфейса клиента, а также главное меню, которое всегда видимо. Блоки деревьев меню определяют структуру меню и устанавливают заголовки для каждого элемента; блоки элементов меню определяют код скрипта, который будет выполнен при нажатии на элемент. Панели инструментов и элементы панелей инструментов аналогичны деревьям меню и блокам элементов меню, но они определяют панели инструментов, связанные с каждым окном. Новые панели инструментов можно добавить в интерфейс, просто выбрав уникальное имя. Псевдонимы, методы (включая конструкторы и деструкторы), события, элементы меню и элементы панелей инструментов называются подпрограммами или блоками кода.
Файлы
Скрипты могут получать доступ к файлам с помощью функций $RandomRead и $ReadLine, а также команд CreateFile и AppendText. Скрипты также могут использовать VCL-класс TStringList для чтения всего текстового файла в память, его обработки и сохранения.
Переменные
Все переменные могут содержать до 4 ГиБ данных. Имена переменных начинаются со знака доллара ($) и прописной буквы, строчной буквы или символа подчеркивания. Переменные могут содержать любые символы, хотя обычно они используются для представления текста. Локальные переменные задаются командой @L и существуют только в контексте подпрограммы, которая их создала. Они удаляются по завершении подпрограммы. Некоторые локальные переменные предопределены, например, $C для имени текущего канала. Глобальные переменные задаются командой @ и доступны из любой подпрограммы. Они удаляются при завершении работы клиента. Псевдонимы могут возвращать значение, устанавливая глобальную переменную $fresult. Сохраненные переменные задаются командой @S и, как и глобальные переменные, доступны из любого места. Их значения немедленно сохраняются в постоянное хранилище и восстанавливаются при следующем запуске клиента.
Ассоциативные массивы
Ассоциативные массивы сопоставляют ключи значениям. Ключи и значения могут содержать до 4 ГиБ данных без ограничений на используемые символы. Локальные, глобальные и хранимые значения массивов можно задать с помощью команд @L, @ и @S, и они работают аналогично соответствующим переменным. При установке хранимого значения массива весь массив сохраняется. Для установки или получения значения для конкретного ключа используется синтаксис $arrayname[key]. Использование синтаксиса $arrayname без указания ключа рассматривает массив как список пар ключ-значение, позволяя скрипту задать все содержимое массива сразу или перебрать уже существующие ключи.
Псевдоизменные
Псевдопеременные (или pvars) синтаксически похожи на переменные, но их значения нельзя изменять. Псевдопеременные $0–$9 содержат параметры, переданные текущей подпрограмме, в порядке их следования. $0 содержит имя подпрограммы, $1 – первое слово строки параметров и так далее. Псевдопеременные $0–$9 содержат параметры, переданные текущей подпрограмме, а также все последующие параметры. $0 содержит имя подпрограммы и всю строку параметров, $1 – все параметры, $2 – все параметры, начиная со второго, и так далее. Специальная последовательность $?="PROMPT STRING" вызывает появление диалогового окна с запросом на ввод значения.