Visual IRC (ViRC) is an
open-source Internet Relay Chat
Internet Relay Chat (IRC) is a text-based chat system for instant messaging. IRC is designed for group communication in discussion forums, called '' channels'', but also allows one-on-one communication via private messages as well as chat a ...
client for the
Windows
Windows is a group of several proprietary graphical operating system families developed and marketed by Microsoft. Each family caters to a certain sector of the computing industry. For example, Windows NT for consumers, Windows Server for ...
operating system. Unlike many other
IRC clients, nearly all of the functionality in ViRC is driven by the included
IRC script, with the result that the program's behavior can be extended or changed without altering the
source code
In computing, source code, or simply code, is any collection of code, with or without comment (computer programming), comments, written using a human-readable programming language, usually as plain text. The source code of a Computer program, p ...
.
History
*Visual IRC (16-bit) – Released in 1995 for Windows 3.x, written by MeGALiTH. This
program had many built-in features, but it was also scriptable with VPL (
ViRC Programming Language
Visual IRC (ViRC) is an open-source Internet Relay Chat client for the Windows operating system. Unlike many other IRC clients, nearly all of the functionality in ViRC is driven by the included IRC script, with the result that the program's beh ...
), the predecessor to
ViRCScript and
Versus
Versus (Latin, 'against') may refer to:
Film and television
* ''Versus'' (2000 film), a Japanese zombie film
* ''Versus'' (2016 film), a Russian sports drama film
* ''Versus'' (2019 film), a French thriller film
* Versus (TV channel), form ...
.
*Visual IRC '96 (and later Visual IRC '97, Visual IRC '98) – Released in 1996, written by MeGALiTH. This was the first 32-bit version of ViRC, written for Windows 9x/NT. Many of the features that were built into 16-bit ViRC were handled by the default script in ViRC '96. ViRC '98 contained some code contributed by
Jesse McGrew
Jesse may refer to:
People and fictional characters
* Jesse (biblical figure), father of David in the Bible.
* Jesse (given name), including a list of people and fictional characters
* Jesse (surname), a list of people
Music
* ''Jesse'' (a ...
AKA "Mr2001", particularly enhancements to the ViRCScript engine. The
scripting language
A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system. Scripting languages are usually interpreted at runtime rather than compiled.
A scripti ...
was incompatible with the earlier version. In later versions, voice chat and video conferencing features were added.
:Development of the second incarnation slowed and by 2000 Visual IRC appeared to be dead. The original author MeGALiTH (Adrian Cable) passed the source code to a user, Mr2001 (Jesse McGrew), who had previously contributed some code, and who had secretly been developing a
clone
Clone or Clones or Cloning or Cloned or The Clone may refer to:
Places
* Clones, County Fermanagh
* Clones, County Monaghan, a town in Ireland
Biology
* Clone (B-cell), a lymphocyte clone, the massive presence of which may indicate a pathologi ...
called
Bisual IRC (BIRC). Rather than restarting development of the ViRC '98 code base, he merged some of ViRC '98's features into BIRC and released it as Visual IRC 2.
*Visual IRC 2 – First released by Mr2001, coincidentally in 2001, this version's
Versus
Versus (Latin, 'against') may refer to:
Film and television
* ''Versus'' (2000 film), a Japanese zombie film
* ''Versus'' (2016 film), a Russian sports drama film
* ''Versus'' (2019 film), a French thriller film
* Versus (TV channel), form ...
scripting language is based on ViRCScript, but internally it has been almost totally rewritten. In fact, ViRC 2 only shares a few hundred lines of code with ViRC '98. The voice and video conferencing features were removed in this version because the
libraries used to implement them were no longer supported.
Much of the source code to BIRC, ViRC 2, and the related utilities has been released under the
GPL through the project's web site and
SourceForge
SourceForge is a web service that offers software consumers a centralized online location to control and manage open-source software projects and research business software. It provides source code repository hosting, bug tracking, mirrori ...
.
Versus
Versus is a
scripting language
A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system. Scripting languages are usually interpreted at runtime rather than compiled.
A scripti ...
originally developed for the
IRC client Bisual IRC, and currently used with Visual IRC. It is similar in many ways to the scripting languages used by
ircII and
mIRC, as well as
Tcl and
C.
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
Object-oriented programming (OOP) is a programming paradigm based on the concept of " objects", which can contain data and code. The data is in the form of fields (often known as attributes or ''properties''), and the code is in the form of ...
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.
Script storage
Scripts are stored in files, usually with a
file extension, though the .lib extension is sometimes used. A Versus script file simply contains
statements to be interpreted when the script is loaded; any blocks defined in a script (see below) will replace blocks defined with the same name by previous scripts.
Blocks that can be defined in a script
*Aliases are
subroutine
In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed.
Functions ma ...
s. They can be called from the command entry line of any window, or from other parts of the script. Aliases that return a value are called functions; an alias can determine whether it's expected to return a value, and then act as a function or a command appropriately.
*Classes are used in object-oriented scripting (OVS). Each class may contain
properties,
methods, a
constructor
Constructor may refer to:
Science and technology
* Constructor (object-oriented programming), object-organizing method
* Constructors (Formula One), person or group who builds the chassis of a car in auto racing, especially Formula One
* Construc ...
, and a
destructor.
*Events are used to
handle messages from the IRC
server, as well as certain system- or client-level occurrences, such as completing a
file transfer or opening a new window.
**Server events use
regular expression
A regular expression (shortened as regex or regexp; sometimes referred to as rational expression) is a sequence of characters that specifies a search pattern in text. Usually such patterns are used by string-searching algorithms for "find" ...
s or Versus's own
wildcard character
In software, a wildcard character is a kind of placeholder represented by a single character, such as an asterisk (), which can be interpreted as a number of literal characters or an empty string. It is often used in file searches so the full n ...
s to match messages from the server. If multiple server events match a particular message, only the one with the highest priority (calculated from the length of the pattern and the relative "value" of the wildcards therein) will be executed.
**Client events are identified by name: for example, <OnCreateWindow_foo> and <OnCreateWindow_bar> will both run when a new window is opened. They can also include patterns, which limit the particular occurrences that can trigger that event (for example, to only run when a new ''channel'' window is created).
*Menu trees and menu items define the
context menus that can appear for various elements of the client's interface, as well as the main menu which is always visible. Menu tree blocks define the menu's layout and set captions for each item; menu item blocks define the script code to be executed when an item is clicked.
*Toolbars and toolbar items are similar to menu tree and menu item blocks, but they define the
toolbars associated with each window. New toolbars can be added to the interface simply by choosing a unique name.
Aliases, methods (including constructors and destructors), events, menu items, and toolbar items are referred to as routines or code blocks.
Data storage
Files
*Scripts can access files with the functions $RandomRead() and $ReadLine(), and the commands CreateFile and AppendText.
*Scripts can also use the TStringList
VCL class to read an entire text file into memory, manipulate it, and save it.
Variables
*All variables may contain up to 4
GiB of data.
*Variable names begin with a dollar sign ($) and an uppercase letter, lowercase letter, or underscore.
*Variables may contain any characters, although they are usually used for printable text.
*Local variables are set with the
@L
command and only exist in the context of the routine that created them. They are deleted when the routine ends. Some local variables are predefined, such as $C for the current channel's name.
*Global variables are set with the
@
command and can be accessed from any routine. They are deleted when the client exits. Aliases may return a value by setting the global variable $fresult.
*Stored variables are set with the
@S
command and, like global variables, can be accessed anywhere. Their values are saved to persistent storage immediately, and restored the next time the client starts.
Associative arrays
*
Associative arrays map keys to values.
*Keys and values can contain up to 4 GiB of data with no limits on the allowed characters.
*Local, global, and stored array values can be set using the
@L
,
@
, and
@S
commands, and they behave just like the corresponding variables. When a stored array value is set, the entire array is saved.
*The syntax
$arrayname ey/code> is used to set or retrieve the value for a particular key.
*The syntax $arrayname
alone treats an array as a list of key-value pairs, allowing a script to set the entire contents of an array at once, or iterate through the keys that are already present.
Pseudovariables
*Pseudovariables (or pvars) are similar in syntax to variables, but their values cannot be changed.
*The pvars $0 through $9 contain the parameters that were passed to the current routine, in order. $0 contains the routine's name, $1 contains the first word of the parameter string, and so on.
*The pvars $0- through $9- contain the parameters that were passed to the current routine, plus all following parameters. $0- contains the routine's name and the entire parameter string, $1- contains all parameters, $2- contains all parameters after the first, and so on.
*The special sequence $?="PROMPT STRING"
causes a dialog box to appear, prompting the user to enter a value.
Code examples
Here is the Hello World code example:
Alias HELLO
TextOut > $C clBlack Hello, world!
EndAlias
Here is an example to count to ten:
Alias TEN
for (@l $i = 1; $i <= 10; $i++)
TextOut > $C clBlack $i
endfor
EndAlias
Here is an example to make everyone in the current channel an operator
Operator may refer to:
Mathematics
* A symbol indicating a mathematical operation
* Logical operator or logical connective in mathematical logic
* Operator (mathematics), mapping that acts on elements of a space to produce elements of another ...
:
Alias MASSOP
foreach ($a,$b,$c,$d; $nicklist($C))
Mode $C +oooo $a $b $c $d
endforeach
EndAlias
References
Further reading
*
* Forrest Stroud (8 April 2004
Visual IRC
WinPlanet Software Reviews
External links
Visual IRC homepage
List of features and screenshots
SourceForge project page
Collection of ViRC scripts
ViRC DocCenter (Versus language reference)
{{IRC clients
Free Internet Relay Chat clients
Internet Relay Chat clients
Scripting languages
Windows Internet Relay Chat clients