Seppo Mustonen: Sukrojen ohjelmointi Survossa

3. Sukrokielen koodisanoja

Vaikka sukro alunperin tehtäisiin opetusmoodissa, sukrojen vaativampi kehittely tapahtuu kirjoittamalla sukrokielistä ohjelmakoodia toimituskenttään. Tässä koodissa tavallinen kenttään kirjoitettavaksi tarkoitettu teksti näkyy sellaisenaan, mutta erikoisnappien painallukset ja sukron yleiseen ohjaukseen liittyvät käskyt ilmaistaan aaltosulkuhin asetetuin selväkielisin koodisanoin.
     Kaikki sukrokielen koodisanat löytyvät tämän oppaan liitteestä ja myös Survon kyselyjärjestelmästä (SUCRO?). Sukrokielisen ohjelman lukemista on mukava opetella esim. ryhtymällä määrittelemään uutta sukroa opetusmoodissa, käyttämällä määrittelyssä erilaisia näppäimiä ja näppäinyhdistelmiä sekä katsomalla määrittelyn jälkeen TUTLOAD-komennolla, miltä aikaansaatu sukro näyttää listattuna.
     Näin voi synnyttää esim. seuraavanlaisen listauksen:
  13  1 SURVO 84C EDITOR Fri Apr 26 17:52:31 1991         D:\SUOPAS\ 120  80 0
   1 *
   2 *TUTLOAD KOE1_
   3 *{R}
   4 *Painan nuolta oikealle 7 kertaa:{r7}{R}
   5 *Kokeilen sitten HOME-nappia:{home}{R}
   6 *Vielä TAB-nappia kolmasti:{tab}{tab}{tab}{R}
   7 *{end}
   8 *

Listauksesta on vaivatonta päätellä kerrottujen nappien sukrokieliset koodit. Huomaa vielä, että sukro-ohjelman listauksessa rivit saa jakaa tavallisen tekstin kohdalla miten tahansa. Edellä oleva sukro saatettaisiin kirjoittaa myös näin:
  13  1 SURVO 84C EDITOR Fri Apr 26 18:16:01 1991         D:\SUOPAS\ 120  80 0
   1 *
   2 *TUTSAVE KOE1_
   3 *{R}
   4 *Painan nuolta oikealle
   5 * 7 kertaa:{r7}{R}
   6 *Kokeilen sitten HOME-nap
   7 *pia:{home}{R}
   8 *Vielä TAB-nappia kolmasti:{tab}{tab}{tab}{R}
   9 *{end}
  10 *

TUTLOAD-komento noudattaa kuitenkin sitä käytäntöä, että rivi vaihtuu jokaisen rivinsiirtomerkin {R} kohdalla, jolloin listaus kuvaa melko uskollisesti sukron ulkoista toimintaa. Yli kentän näkyvän leveyden menevät rivit katkaistaan kuitenkin tarpeen mukaan. Rivien jakautumista on mahdollista ja usein luettavuuden kannalta syytäkin säädellä selitysriveillä (joilla on / kontrollisarakkeessa).
     Sukrokielen mutkikkaampien rakenteiden (kysymykset käyttäjälle, ehdolliset toiminnat jne.) kirjoittamista tukee apusukro SUCRO, joka komennolla /SUCRO ? antaa omat ohjeensa.

Seuraavassa taulukossa ovat tärkeimpiä erikoisnäppäimiä koskevat koodisanat:

Näppäin Koodisana Näppäin Koodisana
ENTER {R} END {line end}
ESC {act} F1:HELP {help}
HOME {home} F2:PREFIX {pre}
PgDn {pgdn} F3:TOUCH {touch}
PgUp {pgup} F4:DISK {disk}
oikealle {r} F5:FORM {form}
vasemmalle {l} F6:MERGE {merge}
ylös {u} F7:REF {ref}
alas {d} F8:EXIT {exit}
ctrl-END {erase} alt-F2 {words}
INSERT {ins} alt-F3 {copy}
DELETE {del} alt-F4 {block}
INS_LINE {ins line} alt-F5 {search}
DEL_LINE {del line} alt-F6 {file act}
TAB {tab} alt-F7 {code}
{ {(} } {)}

Koodit {r},{l},{u},{d},{del},{form}, jotka usein esiintyvät monta kertaa peräkkäin, saa varustaa toistoluvulla. Esim. {r3} on sama kuin {r}{r}{r} ja {del2} sama kuin {del}{del} . Joskus on tarpeen kirjoittaa sukrolla myös aaltosulkuja. Kuten taulukosta nähdään, niilläkin on omat koodisanansa.

Sukrokielisen ohjelman ainoa pakollinen koodisana on {end}, joka lopettaa ohjelman listauksen ja johon myös kaikki sukron ehdolliset haarat on lopulta johdettava.

Muita tärkeitä koodeja

{init} (näppäinyhdistelmä {pre} b) poistaa toimituskentästä kaikki mahdolliset erikoistehosteet ja -tilat. Tällöin mm. siirrytään lisäystilasta (INSERT) normaaliin kirjoitustilaan, poistetaan mahdollinen REF-napilla asetettu viitepaikka, poistetaan mahdollinen {pre} S -näppäimillä esiintuotu varjorivi, palautetaan mahdollinen vasemman reunan poikkeuksellinen asetus kentän ensimmäiseen sarakkeeseen ja poistetaan mahdollinen keskeneräinen tekstikappaleen määrittelytila. Näin varmistetaan, että sukro voi aloittaa ilman yllätyksiä. {init} ei lainkaan vaikuta toimituskentän sisältöön eikä kohdistimen sijaintiin. Useimmat sukrot on syytä aloittaa {init}-koodilla.

{line start} (näppäinyhdistelmä {pre} B) palauttaa kohdistimen sen nykyisestä sijainnista riippumatta tämänhetkisen rivin ensimmäiseen sarakkeeseen. Näkyvä kentän osa kelautuu siten myös automaattisesti vasempaan laitaan.

{tempo -1} lisää sukron suoritusnopeutta yhdellä pykälällä, tavallisesti suurimpaan mahdolliseen nopeuteen. Ellei tempo-koodeja käytetä, sukrot toimivat opetusohjelmille ominaisella perusnopeudella, jossa mm. sukron kirjoittamat tekstit ehtii hyvin lukea. Esim. työkaluiksi tarkoitetuissa sukroissa on kuitenkin syytä käyttää suurempaa nopeutta, joka saavutetaan käskyllä {tempo -1}. Se ei estä käyttäjää normaaliin tapaan säätelemästä tempoa napeilla + ja - . Sukron, joka näin lisää nopeutta, on syytä ennen päättymistä palauttaa nopeus entiselleen koodilla {tempo +1}.

Esimerkkinä em. koodien käytöstä teemme sukron PÄIVÄYS, joka kirjoittaa tämänhetkisen päiväyksen samalle riville (komento /PÄIVÄYS pyyhkiytyy) muodossa:

     Helsingissä, 28. huhtikuuta 1991

  16  1 SURVO 84C EDITOR Sun Apr 28 12:13:52 1991         C:\SUOPAS\ 120  80 0
   1 *
   2 *TUTSAVE PÄIVÄYS_
   3 / Siirrytään nykyisen (komento)rivin alkuun ja tyhjennetään se:
   4 *{init}{line start}{erase}{erase}
   5 /
   6 / Aktivoidaan apusukro PVM, joka kirjoittaa päiväyksen muodossa
   7 / 15. tammikuuta 1991
   8 */PVM{act}
   9 /
  10 / Lisätään vauhtia, siirrytään rivin alkuun ja lisäystilaan:
  11 *{tempo -1}{line start}{ins}
  12 /
  13 / Kirjoitetaan lisäystilassa 5 väliä ja Helsingissä, :
  14 *     Helsingissä, {}
  15 /
  16 / Poistutaan lisäystilasta ja palataan rivin alkuun:
  17 *{ins}{line start}
  18 /
  19 / Palautetaan alkuperäinen nopeus ja lopetetaan:
  20 *{tempo +1}{end}
  21 *

Huomaa, että päätyön tässä tekee Survon perusvarustukseen kuuluva apusukro PVM, joka aktivoidaan listauksen rivillä 8. PVM toimii maksiminopeudella, jonka se palauttaa normaaliksi lopettaessaan. PÄIVÄYS-sukro itse lisää vauhtia vasta rivillä 11 kirjoittaakseen omat lisäyksensä ripeästi.

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