Kirjoittaja: Puhveli (13.12.2009)
MSL, mIRC Scripting Language, on jordanialaissyntyisen Khaled Mardam-Beyn kehittämään suosittuun Internet Relay Chat -asiakasohjelmaan sisäänrakennettu skriptikieli. Lennossa tulkattavaa kieltä käytetään automaattisen toiminnallisuuden ohjelmoimiseen tälle mIRC-nimiselle sovellukselle. Kielen laaja käskyvalikoima ja monipuolisuus selittävät suurelta osin mIRC:n sitkasta menestystä ilmaisten "irkkiklienttien" välisessä suosiotaistossa.
MSL:n kykyskaala on laajentunut tasaista tahtia sitten julkaisuvuotensa 1995. Sillä on jo alkuvaiheessa pystynyt paitsi käyttämään yleisiä yksinkertaisia IRC-käskyjä, myös graafisia ulkoasuelementtejä kuten pudotusvalikoita, painonappeja ja tekstikenttiä. Sittemmin mukaan on tullut tuki mm. äänitiedostojen käsittelyyn, pikselitason grafiikkaan ja DLL:ien toteuttamiseen.
Kielen tyypillisimpiä käyttökohteita ovat henkilökohtaista suojaa tarjoavat hyökkäysten torjujat, roskaviestien suodattajat sekä keskustelukanavien moderointioikeuksia jakavat ja valvovat automaatit. Harrastelijat ovat kehittäneet MSL:llä lukuisia valmiita laajennuspaketteja mIRC:iin, joista suosituipiin on jo vuosia lukeutunut kattava toimintokokoelma NoNameScript.
pukkitulee {
say Pukki tulee!
echo Oletko valmis?
msg #ohjelmointiputka Valkeaa joulua!
}Tulostus nykyisessä ikkunassa (jälkimmäinen rivi näkyy vain käyttäjälle itselleen):
18.05 <nimimerkki> Pukki tulee! Oletko valmis?
Tulostus IRC-kanavalla #ohjelmointiputka:
18.05 <nimimerkki> Valkeaa joulua!
Seuraava Gwaurin kirjoittama /fibo-niminen skripti eli alias tulostaa Fibonaccin lukuja:
/fibo {
set %luku 0
set %edellinenluku 1
if (!$1) { set %max 100 } ; Parametrina komennolle pitäisi antaa luku,
if ($1) { set %max $1 } ; jota fibonatsin sarja ei ylitä.
while (%luku < %max) {
echo -s %luku
set %luku $calc(%luku + %edellinenluku)
set %edellinenluku $calc(%luku - %edellinenluku)
}
}on 1:TEXT:*:#:{
if ( $pos($1-, nimimerkki, 0) ) {
set %hilitlog %hilitlog $+ $time $chan <$nick> $1- $+ $chr(1)
; $+ on komento merkkijonojen katenointiin,
; $chr(1) on merkki, jota käytetään erottamaan eri viestit toisistaan
}
}awaylog {
if ( $len(%hilitlog) < 2 ) {
echo Ei lukemattomia viestejä.
}
else {
var %s
var %c
var %i = 1
; käydään kaikki puskurissa olevat merkit läpi
while (%i <= $len(%hilitlog)) {
var %c = $mid(%hilitlog, %i, 1)
if ( %c == $chr(1) ) {
; viestin loppu, näytetään väliaikaiseen %s-muuttujaan
; kirjain kirjaimelta kerätty viesti
echo - %s
var %s ; ja tyhjennetään %s-muuttuja
}
elseif ( %c == $chr(32) ) {
; MSL ei mahdollista välilyöntien (ASCII 32) oikein tulkitsemista kaikissa tapauksissa,
; mutta tällaiset kielen puutteet onkin tavallista kiertää tai paikata
; kekseliäällä "purukumilla", tässä tapauksessa korvaamalla
; välilyönnit samannäköisillä merkeillä
%s = %s $+ $chr(160)
}
else {
; katenoidaan tämä merkki väliaikaiseen muuttujaan
%s = %s $+ %c
}
inc %i
}
echo %s
set %hilitlog ; tyhjennetään %hilitlog-puskuri
}
}Tavalliseen keskusteluun liittyvien toimintojen ja visailurobottien lisäksi muita mielenkiintoisia MSL:llä toteutettuja aiheita ovat muutamat MP3-soittimet ja kolmiulotteista grafiikkaa sisältävät lyhyet demot!