Survon operaatiot kertovat käytön aikana sattuvista virheistä
(esim. kun käyttäjän pyytämää tiedostoa ei löydy) väliaikaisilla
ilmoituksilla, jotka näkyvät kuvaruudussa poikkeavan värisinä
teksteinä. Ilmoitus poistuu, kun painetaan jotain nappia ja tekeillä
oleva operaatio jää kesken toteutusta. Käyttäjä voi tällöin korjata
virheensä ja yrittää uudelleen.
Sukrot, toimiessaan inhimillisen käyttäjän sijaisina, eivät osaa
ilman muuta lukea ja ymmärtää näitä ilmoituksia. Aikaisemmin ne jäivät
kiinni virheisiin eivätkä pystyneet jatkamaan millään tavalla
järkevästi. Tämä puute on pyritty korjaamaan siten, että Survon
operaatiot tulevat toimiessaan sukron alaisuudessa jättämään suoraan
näkyvät virheilmoitukset pois. Ne korvataan vastaavilla, sukromuistiin
talletettavilla tiedoilla. Sukroille annetaan mahdollisuus tarkkailla
näitä tietoja ja päättää itse, mitä virheistä kerrotaan käyttäjälle ja
miten mahdollisesti jatketaan.
Toistaiseksi useimmat Survo-moduleista ovat tunteettomia sukrojen
suhteen. Ne pysähtyvät virheilmoituksiin. Lähiaikoina tullaan tilanne
korjaamaan ainakin tärkeimpien moduleiden osalta. Uutta virheiden
ilmoitustapaa noudattavien operaatioiden nimet löytyvät (niin kauan kun
asia on kesken) Survon neuvontajärjestelmästä kyselyllä TUTERR?
.
Havainnollistamme uutta käytäntöä seuraavalla pelkistetyllä
esimerkillä. Tarkastelemme sukroa KORREL
, jolla on tarkoitus laskea
keskiarvot, hajonnat ja korrelaatiokertoimet käyttäjän nimeämästä
Survon aineistosta. Esim. /KORREL KUNNAT
laskisi nämä tulokset
aineiston KUNNAT
kaikista aktiivisista muuttujista ja havainnoista.
Seuraavassa kuvassa näkyy KORREL
-sukron listaus ja yritys käyttää
sitä olemattomalle aineistolle OLEMATON
.
|
|
Sukro soveltaa Survon CORR
-operaatiota tehtävään. Kun CORR
-moduli
ei löydä aineistoa OLEMATON
, se nyt toimiessaan sukron KORREL
alaisuudessa ei annakaan itse mitään näkyvää ilmoitusta. Kuvaruudun
alareunaan tullut virheilmoitus on peräisin sukroille tarkoitetulta
virheenkäsittelyohjelmalta SURVOERR
, joka on sukro. Toimituskentän
otsikkorivin alussa oleva sukrotilaa osoittava indeksi on 1 eli
SURVOERR
on vielä toiminnassa. Kun painetaan kehotuksen mukaan jotain
nappia, virheilmoitus poistuu ja sukro lopettaa toimintansa.
Siis aina, kun tulee sukron aikana virhetilanne, sukron toiminta
keskeytyy ja tilalle kutsutaan sukro SURVOERR
, joka antaa ilmoituksen
ja palauttaa tilanteen normaaliksi. Sukrojen ohjelmoijat voivat
korvata sukron SURVOERR
omalla, älykkäämmällä, tilanteeseen sopivalla
sukrolla. Siitä, kuinka se tapahtuu, kerrotaan myöhemmin.
Äskeisessä esimerkkitilanteessa on ennen virheilmoitusta
tapahtunut seuraavaa. Koska CORR
-ohjelma tietää virhetilanteessa, että
se toimii sukron alaisuudessa, se tuhoaa sukromuistin nykyisen
sisällön ja korvaa sen tiedoilla
W1=*** (virhetilaa osoittava tunnus)
W2=1 (virhenumero)
W3=FILE OPEN (toiminta, jossa virhe on tullut ilmi)
W4=Survo data file D:\SUOPAS\OLEMATON.SVO not found! .
CORR
-moduli keskeyttää tämän jälkeen toimintansa, jolloin sukron
valvonta palaa Survon toimittimelle. Havaitessaan, että sukromuistin
alkuun on ilmestynyt virhetilanteesta kertova W1=***
, toimitin
keskeyttää sukron KORREL
, muuttaa muistipaikan W1
sisällöksi W1=ERR
(poistaa siis virhetilan) ja kutsuu toimintaa jatkamaan virheen
käsittelyyn tarkoitetun sukron SURVOERR
. Tämä sukro löytyy aina
Survon S
-hakemistosta ja sen listaus on:
|
|
Sukro SURVOERR
yksinkertaisesti, välittämättä muista sukromuistiin
tulleista tiedoista, muokkaa virheilmoituksen W4 message
-käskyllä
tulostettavaan muotoon ja jää odottamaan käyttäjän napinpainallusta
poistaakseen ilmoituksen ja lopettaakseen.
Levykkeellä Sukrojen ohjelmointi on toimituskenttä ERRCODES.EDT
,
jossa on tähän asti käyttöön otetut virheilmoitukset. Tarkoituksena
on, että jo pelkän virhenumeron (paikassa W2
) avulla
virheenkäsittelijä saattaisi tehdä omia päätelmiään.
Jos virheitä käsittelevää sukroa halutaan parantaa, ei ole syytä
mennä muuttamaan oletussukroa SURVOERR
. On parempi tehdä uusi omalla
nimellä, esim. VIRHE1
. Se tulee voimaan, kun virheitä mahdollisesti
aiheuttavassa sukrossa annetaan käsky
{error handler VIRHE1} .
Esimerkkitilanteessamme virheilmoituksista huolehtiva sukro vaihdetaan toiseen näin:
|
|
Tarkastelemme KORREL
-sukron muunnosta KORREL1
, jossa ennen
CORR
-modulin aktivointia annetaan käsky {error handler VIRHE1}
.
Sukron VIRHE1
listaus on riveillä 49-50 . Kun nyt aktivoidaan sukro
KORREL1
virheellisin tiedoin, nähdään, että oletussukron asemasta
virheestä on tiedottanut VIRHE1
(riveillä 54-55).
Omia virheenkäsittelysukroja ei ole tarkoitus tehdä vain virheilmoitusten suomentamiseen, vaan niillä olisi pyrittävä siihen, että käyttäjä saisi tilaisuuden yrittää uudelleen. Esim. jos käyttäjä on vastannut väärin, kysymys toistettaisiin ilmoituksen jälkeen.