Seppo Mustonen: Sukrojen ohjelmointi Survossa

13. Virhetilanteet

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 .
 1 20  1 SURVO 84C EDITOR Mon May 20 18:04:40 1991        D:\SUOPAS\ 120  85 0
   23 *
   24 *TUTSAVE KORREL
   25 *{tempo -1}{init}{line start}{R}SCRATCH {act}{line start}
   26 *CORR {print W1},CUR+1{act}
   27 *{tempo -1}{end}
   28 *
   29 */KORREL OLEMATON
   30 *CORR OLEMATON,CUR+1_
   31 *
   32 *
   33 *
   34 *
   35 *
   36 *
   37 *
   38 *
   39 *
   40 *
   41 *
   42 *
   43 *
   44 *
   45 *
       Survo data file D:\SUOPAS\OLEMATON.SVO not found!  Press any key!

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:
  21  1 SURVO 84C EDITOR Mon May 20 18:35:27 1991         D:\SUOPAS\ 120  85 0
  31 *
  32 *TUTLOAD .\S\SURVOERR_
  33 / SURVOERR: default Survo error handler for sucros      3.5.1991/SM
  34 *{tempo -1}{W5=        }{W4=W5&W4}{W5=  Press ENTER!}{W4=W4&W5}
  35 *{message W4}
  36 - on key
  37 -    key _: goto A
  38 -   wait 1200
  39 + A: {message}@{tempo +1}{end}
  40 *

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:
  57  1 SURVO 84C EDITOR Mon May 20 18:56:50 1991         D:\SUOPAS\ 120  85 0
  42 *
  43 *TUTSAVE KORREL1
  44 *{tempo -1}{init}{line start}{R}SCRATCH {act}{line start}
  45 *{error handler VIRHE1}CORR {print W1},CUR+1{act}
  46 *{tempo -1}{end}
  47 *
  48 *TUTSAVE VIRHE1
  49 *{tempo -1}{R}Jotain omituista aineistossa.{R}Virhe: {print W4}
  50 *{tempo +1}{end}
  51 *
  52 */KORREL1 OLEMATON
  53 *CORR OLEMATON,CUR+1
  54 *Jotain omituista aineistossa.
  55 *Virhe: Survo data file D:\SUOPAS\OLEMATON.SVO not found!_
  56 *

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.

Sukrojen ohjelmointi Survossa - Seppo Mustonen 1991
  1. Johdanto
  2. Esimerkki
  3. Sukrokielen koodisanoja
  4. Sukromuisti
  5. Hapuilukoodit, tulostus ja kohdistimen liikuttelu
  6. Sukrojen aloittaminen ja kytkeminen toisiinsa
  7. Ehdolliset toiminnat
  8. Käyttäjän vuorovaikutus
  9. Aritmetiikka ja muistin välitön hallinta
  10. Sukrotiedostot
  11. Sukrojen lajit
  12. Sukrojen laatiminen käytännössä
  13. Virhetilanteet
  14. Näytesovelluksia
Liite: Sukrokielen koodisanat