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.
|