by Lea Viljanen
5.1.1988
UniTerm on omasta mielestäni kiistatta paras Atari ST-ko-
neille tehty terminaaliohjelma tällä hetkellä. Mielipidettäni
ei suinkaan muuta se, että UniTerm on kaikkien vapaasti saata-
villa oleva julkisohjelma. Itse asiassa päinvastoin. Tämä oh-
jelma todistaa sen, että julkisohjelmissakin voi olla aivan
kaupallisen tason tuotteita.
Juuri julkaistussa UniTermin versiossa 2.0a on tavan mu-
kaan paranneltu vanhojen versioiden puutteita ja virheitä sekä
tehty uusia piirteitä vanhojen lisäksi. Näkyvin uusi muutos on
Hayes-yhteensopivien modeemien automaattisoitto-optio. Tätä it-
se olin kaivannut jo pidemmänkin aikaa ja heti ohjelman saatua-
ni ryhdyin kokeilemaan.
Tämä autodialin kokeilu johdattikin minut heti makrojen
maailmaan, sillä jokaisen numeron kohdalle oli mahdollisuus
määritellä makro eli käskysarja, joka suoritetaan kun numerossa
vastataan. Eli voisin vaikka määritellä sellaisen käskysarjan
makrotiedostoksi, joka puolestani menee sisään elektroniseen
postilaatikkoon, lukee kaikki uudet viestit sieltä puskuriin ja
tallettaa sen, sekä lopuksi käy vielä tiedostoalueella imuroi-
massa minulle tietyn tiedoston, jonka jälkeen poistuu boxista.
Ja koko tämän toiminnan aikana voin tehdä aivan jotain muuta,
eikä minun tarvitsisi olla koneen ääressä muuta kuin käynnistä-
mässä automaattisoitto.
UniTermissä tuo kaikki on periaatteessa täysin mahdol-
lista, sillä makrotiedostojen tekoon on kehitetty täysin oma
komentokielensä. Eli käytännössä UniTermiä voi ohjelmoida. Ja
kuten kaikissa 'varsinaisissa' ohjelmointikielissäkin, UniTer-
min makrokielessä on omat erikoiset käskynsä, jotka on lueteltu
seuraavassa:
%ECHO('viesti') Kaiuta 'viesti' (string) termi-
naalille.
%ECHO(asciival) Kaiuta ASCII-merkki 'asciival'
(integer)
%DROPDTR() Pudota DTR
%ASSERTDTR() Nosta DTR
%WAIT(aika) Odota 'aika' (integer) millisekun-
tia.
%GET('merkkejä',aika) Odota merkkijonoa 'merkkejä' (string),
'aika' (integer) sekuntia. Jos tu-
lee, suorita muu osa rivistä. Merk-
kijonon odotuksen saa katkaistua
painamalla Control-C.
%RUN('nimi','komennot')Suorita ohjelma 'nimi' (string) ko-
mentorivillä 'komennot' (string). Jos
se on TTP-ohjelma, sinulta kysytään
parametrejä.
%CONCAT('str1','str2') Yhdistä 'str1' (string) ja 'str2'
(string) ja sijoita tulos muuttu-
jaan $TEMP.
%ONKEY() Jos jotakin näppäintä on painettu,
suorita loppuosa rivistä.
%INPUT('prompti') Ota näppäimistöltä syöterivi muut-
tujaan $TEMP, 'prompti' (string)
on kehote. Loppuosa rivistä suori-
tetaan jos valitaan 'OK'.
%FILESELECTOR('polku','nimi','prompti')
Näytä tiedostovalitsin hakemistosta
'polku' (string), tiedostonimi 'nimi'
(string) ja kehote 'prompt' (string).
Polun ja nimen uudet arvot ovat
muuttujissa $PATH ja $FILENAME. Ri-
vin loppuosa suoritetaan, jos on
valittu 'OK'.
%JUMP(rivi) Hyppää riville numero 'rivi'.
%SEND(asciival) Lähetä ASCII-merkki 'asciival'
(integer) ulos modeemin kautta.
%SEND('string') Lähetä ulos 'string' (string)
%BREAK(pit,pudotadtr) Lähetä Break:ia 'pit' (integer) msek,
pudota DTR jos 'dropdtr' (boolean)
on tosi.
%PATH('polku') Muuta levypolku 'polku':ksi (string)
%MACRO('nimi') Suorita 'nimi' niminen makro
(string) levyltä, oletuspolku on
senhetkinen hakemisto. Mikäli mak-
ron suoritus päättyy normaalisti
(<> %ABORT) loppuosa rivistä suori-
tetaan.
%LOADSETUP('nimi') Lataa 'nimi' niminen asetuskokoelma
(string).
%KERMIT('moodi',8bitmoodi,'tdosto')
Aloita Kermit tiedostonsiirto seu-
raavilla parametreilla:
moodi (string): 'SEND' : lähetä
'REC' : vastaanota
'GET' : vastaanota
serveriltä
8bitmoodi (boolean):
FALSE : 7 bitin
ASCII teksti
TRUE : 8 bitin
binääri
tdosto (string): tiedoston nimi,
hyväksyy ?,*-mer-
kit.
%XMODEM('moodi','tdosto')
mode (string): 'SEND' : lähetä
'REC' : vast.ota
tdosto (string): Lähetettävä tai
vast.otettava tie-
dosto.
%YMODEM('moodi','tdosto')
moodi (string): 'SEND' : lähetä
'REC' : vast.ota
tdosto (string): tiedostomäärittelyt
%REASSIGN(altkey,komento)
Sijoittaa komennon numero
'komento' ALT-näppäimen kautta
tulevalle näppäimelle 'altkey'.
%POPUP(nro,komento,'nimi')
Määrittelee uudelleen oikean hii-
rinäppäimen alta tulevan valikon
osan:
nro : osan numero 1..20
komento : katso UniTermin help.
'nimi' : nimi joka näytetään
%UNICOMMAND(komento) Suorittaa Unitermin sisäisen ko-
mennon 'komento' (integer).
%DIAL(num) Valitsee numeron 'num' luettelosta.
%LOADTEL('nimi') Lataa puhelinluettelon 'nimi'.
%ABORT('msg') Poistuu makrotiedostosta ja si-
joittaa muuttujaan $TEMP viestin
'msg' (string).
Näitä komentoja voi lyhentää vaikka yhden kirjaimen mit-
taisiksi, kunhan vain katsoo ettei sekaantumisen vaaraa ole.
Esimerkiksi %L('esim') voi olla sekä %LOADTEL että %LOADSETUP,
eli tuossa on pakko käyttää koko nimeä.
Makrot ovat rakenteeltaan kahta tyyppiä. Joko ne on si-
joitettu funktionäppäimen taakse, tai sitten erilliseen makro-
tiedostoon.
Esimerkkinä funktionäppäimestä voit vaikka sijoittaa F1-
näppäimen alle makrokomennon %RUN('huu.prg'), joka näppäintä
painettuasi suorittaa ohjelman 'huu.prg', mikäli muistia riit-
tää.
Aivan samalla tavoin voidaan suorittaa erillinen tiedos-
tossa oleva makro. Kirjoitetaan vain funktionäppäimeen %MACRO
('nimi') ja sitä painamalla UniTerm alkaa suorittaa nimettyä
makroa. Toinen esimerkki samasta asiasta on automaattisoiton
tiedostot, jotka suoritetaan levyltä heti kun määrättyyn nume-
roon ollaan saatu yhteys. Näin kone voi kirjoittautua johonkin
elektroniseen postilaatikkoon puolestasi sisään jos haluat.
Nämä makrotiedostot ovat aivan tavallisia ASCII-muotoi-
sia tekstitiedostoja, joissa on makrokäskyjä ladottu peräkkäin
riveille siten että rivin pituus on enintään 80 merkkiä. Ko-
mentojen väliin jäävät sanat (kommentit jne) eivät vaikuta
suoritukseen.
Esimerkkejä:
------------
1) Makro, joka loggautuu sisään VAXIin.
%WAIT(20)
%E(10)%E(13)%E('Päästiin VAXIin!')%E(10)%E(13)
%S(10)%S(13)%W(30)
%S(13)%W(20)%S(13)
%GET('V A X I',7)%W(30)%S('tunnus')%S(13)%S('passi')%S(13)%J(7)
%JUMP(4)
Tässä on esimerkki, joka loggautuu puolestasi sisään A-leh-
tien VAXIin, kunhan vain korvaat sanan _tunnus_ omalla käyttä-
jätunnuksellasi ja _passi_n omalla salasanallasi. Ensin ilmoi-
tetaan %ECHO -käskyllä käyttäjälle että yhteys on saatu, sen
jälkeen lähetetään linjalle sopivin väliajoin pari RETURNia
(ASCII-koodi 13) ja odotetaan VAXIn heräämistä. Mikäli VAXI ei
parista ensimmäisestä herää, hypätään takaisin alkuun lähettä-
mään lisää RETURNeja. Jos herää, lähetetään käyttäjätunnus ja
salasana. HUOMIO! Tämä saattaa jäädä ikuiseen silmukkaan, mi-
käli VAXI ei herää. Tällöin auttaa vain reset-nappulan painal-
lus.
2) Sisäänloggautuminen Atari-purkkeihin.
%E(10)%E(13)%E('Tie selvä Atari-purkkiin!')%E(10)%E(13)
%GET('Press <RETURN>',10)%S(10)%S(13)%JUMP(4)
%E(7)%ABORT()
%GET('Realname',15)%S('oma nimi')%S(10)%S(13)
%GET('Password',5)%S('salasana')%S(10)%S(13)
Tällä makrotiedostolla pääsee sisään sellaisiin Atari-purk-
keihin, jotka käyttävät Michtronin purkkiohjelmaa. Tosin olen
ihmetyksekseni havainnut, että boxeissa joissa numeron loppuun
pitää valittaessa automaattisesti lisätä ',' mikään makro ei
toimi. Esimerkissä on myös otettava huomioon eri modeemityyp-
pien hitaus alkulogoa tulostettaessa. 1200 bitillä sekunnissa
(V.22) liikuttaessa tuo 'Realname':n odotus eli 15 sekuntia,
riittää yhden alkulogoruudullisen tulostamiseen. V.21 on tätä
neljä (4) kertaa hitaampi.
Suunniteltaessa ja tehtäessä automaattisesti boxiin log-
gautuvaa makronpätkää, on otettava huomioon eri boxiohjelmien
ja käyttöjärjestelmien vaatimukset. Esimerkiksi useat ohjelmat
vaativat yhden returnin painalluksen modeemin nopeudentunnis-
tusta varten. Joissain käyttöjärjestelmissä (VAXien VMS) on
olemassa puskuri, jonne voi etukäteen työntää esimerkiksi tun-
nuksensa ja salasanansa ennen kuin kone on niitä edes kysel-
lyt. Toiset taas ovat tarkkoja siitä, että käyttäjätunnus ja
salasana annetaan vasta sitten kun niitä erikseen pyydetään.
Vaikka makrojen suoritus saattaa vaikuttaa idioottivar-
malta, niin sitä se ei suinkaan ole. Yksinkertainenkin linja-
virhe boxikoneen ja oman koneen välisessä tiedonsiirrossa
saattaa sotkea koko makron suorituksen täysin. Siksi tämän ar-
tikkelin alussa mainittu esimerkki makrojen käytöstä on vain
periaatteessa mahdollinen. Hyvin harvoin puhelinlinjat ovat
niin häiriöttömiä, että niin pitkiä makroja voidaan onnistu-
neesti suorittaa. Samoin pitkän käskysarjan suorittamisen voi
saada sekaisin jokin odottamaton tapahtuma eli vaikkapa boxin
sysopin chat-pyyntö.
Kuten kaikkien ohjelmointikielten opiskelussa, niin pa-
ras tapa UniTerminkin ohjelmoinnin opettelussa on kokeilu.
Eli nyt jokainen modeemin omistava klikkaa UNITERM.PRG ikonia
ja alkaa kokeilla mitä hauskaa makroilla voikaan tehdä.
HAPPY HACKING!
P.S Tästä mainiosta terminaaliohjelmasta meidän on kiittä-
minen Simon Poolea, joka on varmasti ahkeroinut sen parissa
moniaita tunteja. Siksi olisikin aiheellista, mikäli ihastut-
te ohjelmaan ja käytätte sitä, lähettää pieni muutaman markan
rahalahjoitus hänelle, jotta saisimme jatkossakin uusia ja
parempia versioita tästä loisto-ohjelmasta. Tekijän osoitteen
löytää ohjelman Desk-valikosta.
|