Lukuisien potilaiden pyynnöstä STohtori on perehtynyt syvällisemmin
                     
merkistöjen anatomiaan. Suomenkieliset tietosanomat on saanut yksin-
                     
oikeuden julkaista otteita tunteita kuohuttaneesta tutkimusraportista.
                     
                     
                     
                     
                     
Jo muinaiset amerikkalaiset...
                     
------------------------------
                     
                     
                     
Merkkien å, ä, ö, Å, Ä ja Ö eli "skandien" ongelmat johtuvat paljolti
                     
siitä, että ASCII- (American Standard Code for Information Interchange)
                     
merkistö on alunperin laadittu USA:ssa. Kansalliset merkit on pitänyt
                     
ympätä mukaan jälkeenpäin ja tähän on käytetty useita eri tapoja.
                     
                     
                     
Yleensä tietokoneissa käytetään yhden merkin esittämiseen yhtä tavua eli
                     
kahdeksaa bittiä (japanilaista merkistöä varten on olemassa 16-bittisiä
                     
toteutuksia). ASCII-merkistöä laadittaessa varattiin yksi bitti pariteet-
                     
tiin, jota käytettiin tiedon oikeellisuuden tarkistamiseen. Näin ollen
                     
merkistössä on 2^7 (2 potenssiin 7) erilaista merkkiä, desimaaliarvoltaan
                     
0-127. IBM-suurkoneympäristössä käytetään 8-bittistä EBCDIC-merkistöä,
                     
mutta siellä tiedonsiirto onkin synkronista eikä asynkronista ja virheen-
                     
tarkistus on toteutettu eri tavalla. EBCDIC eroaa muutenkin varsin paljon
                     
ASCIIsta merkkikarttansa ja ohjausmerkkiensä osalta.
                     
                     
                     
^^ Pikakurssi lukujärjestelmistä ^^28
                     
                     
                     
Merkkimuotoisen tiedon lisäksi voidaan tietokoneissa esittää erilaista
                     
binääristä tietoa kuten kokonaislukuja, etumerkittömiä kokonaislukuja,
                     
liukulukuja ja BCD- (Binary Coded Decimal) lukuja. Näiden esitystapoja
                     
on monia ja etenkin liukulukujen esitystapa ja arvoalue vaihtelee jopa
                     
eri ohjelmointikielten välillä (esim. Gfa BASIC ja Mark Williams C).
                     
C-, Pascal- sekä Modula 2-ohjelmoijalla on lisäksi käytettävissään abs-
                     
trakteja tietotyyppejä kuten luetellut tyypit, mutta niiden esittämi-
                     
seen käytetään sopivan pituista binääritietoa. STohtori voi kertoa tar-
                     
vittaessa näistä lisää. Keskitytään nyt kuitenkin merkkitietoon.
                     
                     
                     
                     
                     
ASCII-merkistö
                     
--------------
                     
                     
                     
32 ensimmäistä merkkiä ovat ns. kontrolli- eli ohjausmerkkejä, viimeinen,
                     
DEL (127), on myös tällainen ei-kirjoittuva merkki. Näitä käytetään laite-
                     
ohjaukseen sekä tiedon erottimina. Kontrollimerkki (Control-@ - Control-_
                     
saadaan vastaavasta merkistä, vähentämällä sen desimaaliarvosta 64 (tai
                     
laittamalla binäärisellä AND-operaatiolla bitti 6 nollaksi), esim. BEL (7)
                     
saadaan Control-G:llä (71-64=7). Mainittakoon, että käytettävästä näppäimis-
                     
töstä ja ohjelmasta riippuen kaikki ei onnistu, esim. jos alkuperäinen merk-
                     
ki saadaan aikaan Alternate-näppäimen avulla. Se, miten laite reagoi eri
                     
ohjausmerkkeihin, riippuu ohjelmasta, driverista eli laiteajurista sekä
                     
tietysti itse laitteesta. Tästä syystä kannattaa tutustua tarkoin ko. kom-
                     
ponenttien käsikirjoihin mikäli aikoo harrastaa eksplisiittistä laiteoh-
                     
jausta kontrollikoodeilla.
                     
                                                                         
                     
Merkeistä 32-64, 91-96 sekä 123-126 löytyvät välilyönti (32), erikoismerkit
                     
sekä numerot (48-57). Numerot muistaa helposti heksadesimaaliesityksestään
                     
('0'=30,'1'=31,...,'9'=39), jollaisina ne näkyvät esim. debuggereissa ja
                     
levyeditoreissa.
                     
                     
                     
Kirjaimet A-Z ovat desimaaliarvoltaan 65-90 ja pienet kirjaimet vastaavasti
                     
97-122. Pieni kirjain saadaan siis lisäämällä ison kirjaimen desimaaliarvoon
                     
32 (tai laittamalla binäärisellä OR-operaatiolla bitti 5 ykköseksi), esim:
                     
                     
                     
         bit
                     
char  76543210 dec hex
                     
A     01000001  65  41
                     
a     01100001  97  61
                     
Z     01011010  90  5A
                     
z     01111010 122  7A
                     
                     
                     
^^ ASCII-taulukko ^^29
                     
                     
                     
                     
                     
Mistä skandit sitten löytyvät?
                     
------------------------------
                     
                     
                     
Seitsemänbittisessä merkistössä kansalliset kirjaimet on toteutettu kor-
                     
vaamalla osa erikoismerkeistä joukosta (#, $, @, [, \, ], ^, {, |, }, ~).
                     
Omat skandimme on saatu seuraavasti:
                     
                     
                     
  dec spec  skandi   dec spec skandi
                     
   93   ] =>  Å      125   } => å 
                     
   91   [ =>  Ä      123   { => ä
                     
   92   \ =>  Ö      124   | => ö
                     
                     
                     
Tästä näkee, että isojen ja pienten kirjainten ero on 32 kuten muualla-
                     
kin, mutta valitettavasti ruotsalainen å sotkee aakkosjärjestyksen.
                     
                     
                     
Suurin osa minikoneista ja elektronisista kirjelaatikoista käyttää tätä
                     
järjestelmää. DECillä ja HP:lla on tosin myös vaihtoehtoinen, ASCIIhin
                     
perustuva kahdeksan databitin 256 merkin järjestelmä (DEC Multinational
                     
Character Set, HP Roman 8 Character Set), jossa pariteettibitin käytöstä
                     
tiedonsiirrossa on luovuttu. Harrastelija saattaa törmätä näihin merkis-
                     
töihin käyttäessään HP:n kirjoittimia tai Amigaa.
                     
                     
                     
Myös DOS- ja OS/2-maailma (IBM PC, PS/2 ja yhteensopivat) käyttää omaa
                     
ASCIIhin perustuvaa kahdeksan bitin merkkivalikoimaa. Applen MacIntoshin
                     
merkistöä ei STohtori valitettavasti tunne, pitäähän omena päivässä tun-
                     
netusti lääkärin loitolla.
                     
                     
                     
ST:n merkistö on varsin pitkälle samanlainen kuin PC:n, erot ovat lähinnä
                     
kontrollimerkkien grafiikkakäytössä sekä viivanpiirtomerkkien puuttuminen
                     
ST:ssä (tilalla on hebrealaisia kirjaimia). Merkistöt ovat kuitenkin siksi
                     
paljon samanlaisia, että PC:n kirjoittimia voi vallan mainiosti käyttää
                     
ST:ssä, jopa grafiikan tulostus Alt-Helpillä onnistuu (STohtorin kirjoit-
                     
timena on kuusi vuotta vanha IBM Graphics Printer). ST:n skandit ovat:
                     
                     
                     
  char dec hex       char dec hex
                     
   Å   143  8F        å   134  86
                     
   Ä   142  8E        ä   132  84
                     
   Ö   153  99        ö   148  94
                     
                     
                     
STohtori ei löydä yllämainitusta taulukosta paljonkaan logiikkaa, aakkostus
                     
menee noiden numeroiden perusteella hakoteille eikä muunnos pienistä kirjai-
                     
mista suuriin ole yhtä suoraviivainen kuin ASCIIssa. Tähän on tyytyminen.
                     
                     
                     
                     
(ohjelma acharset.tos ja source acharset.c ovat pd-hakemistossa) 
                     
                     
                     
                     
Kirjoitin ensin valmiiksi!
                     
                     
                     
(ohjelma pcharset.tos ja source pcharset.c ovat pd-hakemistossa)
                     
                     
                     
                     
                     
Näppäimistön skandimurheet
                     
--------------------------
                     
                     
                     
ST:n näppäimistö palauttaa ns. scan-koodeja, jotka ovat pitkälle PC-
                     
yhteensopivia. Joskus saattaa joutua painamaan väärää näppäintä, joka on
                     
oikeassa paikassa tai oikeaa näppäintä, joka on väärässä paikassa, riip-
                     
puen siitä, tutkiiko ohjelma näitä näppäimistön palauttamia scan-koodeja
                     
vai TOSin palauttamia 8-bittisiä merkkikoodeja. ST:n näppäimistönluku-
                     
funktiot Bconin, Cconin, Cnecin, Crawcin, Crawio palauttavat ohjelmaan
                     
molemmat koodit, mutta AES:n evnt_keybd sekä evnt_multi palauttavat vain
                     
scan-koodin.
                     
                     
                     
                     
                     
Ohjelmiston sisäiset skandimurheet 
                     
----------------------------------
                     
                     
                     
Ohjelmistojen skandiongelmat johtuvat useimmiten yksinkertaisesti siitä,
                     
että ohjelmiston suunnittelija on olettanut, että ns. kirjoittuvat merkit
                     
ovat desimaaliarvoltaan väliltä 32-126. Esim. seuraavat suositut ASCII-
                     
merkistöön perustuvat C-kielen funktiot ja niitä käyttävät ohjelmat eivät
                     
toimi kunnolla ST:n skandeilla:
                     
                     
                     
  isalpha, isupper, islower, isalnum, ispunct, isprint, iscntrl, isascii,
                     
  tolower, toupper, toascii
                     
                     
                     
Gfa-BASICia ja sen funktioita STohtori ei ikävä kyllä tunne, sitä ei hänen
                     
opiskeluaikanaan opetettu STlääkiksessä.
                     
                     
                     
Yleisesti voidaan todeta, että lähdekielisistä ohjelmista ko. murheet löy-
                     
tyvät pienellä vaivalla, ajokelpoisten (.TTP, .TOS, .PRG ja .ACC) ohjel-
                     
mien patchaaminen skanditaitoisiksi vaatii disassemblerin ja/tai levy-
                     
editorin, kohtalaisesti MC68000-prosessorin käskykannan tuntemusta sekä
                     
paljon kärsivällisyyttä jo pienehköjenkin ohjelmien ollessa kyseessä.
                     
Alkuperäisohjelmia ei pidä missään tapauksessa mennä käpistelemään!
                     
                     
                     
GEMin G_TEXT-, G_BOXTEXT-, G_FTEXT- sekä G_FBOXTEXT-tyypin objekteissa
                     
oleva te_pvalid-struktuurin A-, a-, N- ja n-tyypit eivät kelpuuta skandeja.
                     
Levyeditorin käytön osaava harrastaja voi käydä muuttamassa nämä X-tyypeiksi
                     
ohjelman .RSC-tiedostoon. Tällöin GEM antaa kirjoittaa mitä tahansa merkkejä
                     
vastaaviin kenttiin ohjelman keskustelulaatikoissa.
                     
                     
                     
                     
                     
Kirjoitin- ja tietoliikennemurheet
                     
----------------------------------
                     
                     
                     
Lähes kaikissa tekstinkäsittely- ja tietoliikenneohjelmissa on koodikonver-
                     
siotaulut (code page, translation table tms.), joiden avulla ohjelmasta 
                     
sarja- tai kirjoitinportille lähtevä merkki voidaan muuntaa toiseksi (sar-
                     
japortin ollessa kyseessä myös sieltä saapuvat merkit voidaan muuntaa). Se
                     
miten tällaista taulua muutetaan käy yleensä ilmi ohjelman käsikirjasta.
                     
Taulun idea on hyvin yksinkertainen: siinä on 256 elementtiä, yksi kullekin
                     
merkille. Porttiin lähetetään elementin sisältämän merkin koodi. Esim. pää-
                     
teohjelmassa elementin 132 (ä) kohdalta löytyy 123 ({). Joissakin ohjelmis-
                     
sa ilmoitetaan vain ne taulun elementit, joiden kohdalla tapahtuu merkki-
                     
muunnos, toisissa laitetaan nolla kaikkiin niihin elementteihin, joiden
                     
kohdalla merkkimuunnosta ei tehdä.
                     
                     
                     
                     
                     
Ohjausmerkeistä ja escape-sekvensseistä
                     
--------------------------------------- 
                     
                     
                     
Ohjausmerkeillä on, kuten alussa mainittiin, erityinen merkitys laiteohjauk-
                     
sessa sekä tiedon erottimina. Useimmiten joutuu tekemisiin seuraavien kanssa:
                     
                     
                     
  Dec Hex ASCII Merkitys
                     
    7  07  BEL  Bell, Kilauttaa laitteen kelloa (äänimerkki)
                     
    8  08  BS   BackSpace, Siirtyy yhden merkin taaksepäin
                     
    9  09  HT   Horizontal Tab, tabulaattori
                     
   10  0A  LF   Line Feed, rivinvaihto
                     
   12  0C  FF   Form Feed, sivunvaihto
                     
   13  0D  CR   Carriage Return, kirjoitinpää (tai kursori) rivin alkuun
                     
   17  11  DC1  Device Control 1 (Control-Q), pysäyttää päätetulostuksen
                     
   19  13  DC3  Device Control 3 (Control-S), jatkaa päätetulostusta
                     
   26  1A  SUB  Substitute (Control-Z), tekstitiedoston loppumerkki
                     
   27  1B  ESC  Escape, ohjaussekvenssin aloitusMERKKI
                     
                     
                     
Nämäkin toimivat eri tavoin niilläkin laitteilla, jotka ylipäätään ymmärtävät
                     
näitä merkkejä.
                     
                     
                     
Escape-koodi on merkkiYHDISTELMÄ, jonka laite tulkitsee ohjausinformaa-
                     
tioksi. Nimensä mukaisesti se alkaa ESC-merkillä. Laite itse tietää,
                     
mihin ohjausinformaatio päättyy ja mistä varsinainen merkkitieto alkaa.
                     
                     
                     
Binääristä tietoa kuten ajokelpoisia ohjelmia ei pidä tulostaa millekään
                     
laitteelle, ohjausmerkit saattavat sekoittaa sen pahanpäiväisesti ja esim. 
                     
kirjoitinpaperia saattaa tärvääntyä sivukaupalla. Yleensä laite kuitenkin
                     
unohtaa mielenhäiriönsä kun virta katkaistaan. Mikäli laitteessa on paristo-
                     
varmennetut asetukset, on "muistinmenetys" aikaansaatava muulla tavalla.
                     
Tällöin kone palautuu tehdasasetuksille ja omat asetukset on tehtävä uudes-
                     
taan. Mutta tosi harrastajalla on tämän tilanteen varalta ne paperilla
                     
manuaalin välissä tms. turvallisessa paikassa.
                     
                     
                     
ST:ssä on "sisäänrakennettuna" näytönohjain, joka jäljittelee DECin VT-52
                     
-päätettä ohjauskomennoiltaan. Lisäksi ohjain tukee värien käyttöä. Sitä
                     
voi käyttää tekstipohjaisissa (.TOS- ja .TTP-loppuisissa) ohjelmissa.
                     
                     
                     
                     
(ohjelma showcols.tos ja source showcols.c ovat pd-hakemistossa)
                     
                     
                     
Kirjoittimien ohjauskoodit ovat varsin laiteriippuvaisia. Tyypillisesti
                     
matriisi- ja kiekkokirjoittimia ohjataan escape-koodeilla, mutta myös
                     
muita kirjoitinohjaustapoja kuten PCL (Hewlett-Packard) ja PostScript 
                     
(Adobe) on; näitä käytetään yleisesti laserkirjoittimissa. Matriisikir-
                     
joittimista Epson-yhteensopivat ovat varsin yleisiä. Ohjauskoodeilla
                     
voidaan tehdä mm. seuraavia asioita:
                     
                     
                     
- vaihtaa riviä ja sivua
                     
- asettaa sivunkoko, marginaalit ja sarkaimet
                     
- valita merkkivalikoima, -laji ja -tyyli
                     
- valita tulostuslaatu
                     
- tulostaa grafiikkaa
                     
                     
                     
Ohjauskoodit löytyvät kirjoittimen manuaalista. Se saattaa olla hyvään
                     
tarpeeseen, mikäli joutuu tekemään oman ajurin esim. tekstinkäsittely-
                     
ohjelmallesi. Kannattaa kuitenkin ensin kysyä jos joku samanmerkkisen
                     
kirjoittimen omistajalla on jo tehnyt ajurin, ettei tulisi keksittyä
                     
pyörää uudelleen.

Takaisin

(C) Marko, Suomen Atari-sivut / ArkiSTo 2003