MTROUT-rutiinit Borland C++ 3.1:lle v1.2
Copyright (c) Mika "PLOTSO" Tolvanen 1996,1997

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	     JOS KONEESI SEKOAA KYTTESSSI NIT RUTIINEJA,
	      TEKIJ EI OLE MINKNLAISESSA VASTUUSSA SIIT!
- - - - - - - - - - -!!! KYT OMALLA VASTUULLASI !!! - - - - - - - - - - - -


------------------------------------------------------------------------------
| Sisllys:                                                                  |
| ---------                                                                  |
|  Trke!                                                                  |
|  Tekijn yhteystiedot:                                                     |
|  Mit rutiineja nyt tulikaan otettua?                                      |
|  C vai C++, kas siin SE                                                   |
|  Esimerkkien kntminen                                                   |
|  History                                                                   |
|  Miksi tein tmn paketin                                                  |
|  100NALLISET HELL.OT 2                                                     |
|  Hidas putsprite?                                                          |
|  Paketin sislt                                                           |
|  Mukana tulleiden apuohjelmien kytt (GETFONT, PICOPY, GETPAL)            |
|       * GETFONT  V1.0 (ei lhdekoodeja mukana)                             |
|       * PICOPY V1.0 (ei lhdekoodeja mukana)                               |
|       * GETPAL (lhdekoodit tiedostossa GETPAL.CPP)                        |
|  Rutiinien kytt                                                          |
|  Viel jotain                                                              |
|  Loppurutinat                                                              |
------------------------------------------------------------------------------

!!! IMMORTAL eiku IMPORTANT information !!!
- Trke! - 
------------ 
 
 * Tt pakettia saa levitt vapaasti kunhan
   paketti on alkuperisess muodossaan, tiedostoja
   ei ole poistettu eik muutettu!

 * Voit vapaasti kytt, muutella, ja kopioida koodia
   OMIIN tarpeisiisi.

 * Jos huomaat paketin tai paketin osan hydylliseksi,
   sittenhn en ole tehnyt turhaa tyt :)
   ..jos kytt jotain tst osaa omissa ohjelmissasi,
   voisit mainita minut!

 * Tmn paketin ohjelmat on tehty Borland C++ 3.1:lle
   mutta toimii EHK vanhemmillakin kntjill (kunhan se on C++!)

 * Kytn grafiikkarutiineissani 32-bittisi rekistereit ja
   kskyj nopeuden vuoksi, eli tm vaatii vhintn 386-koneen.
   (386/16:lla nm ovat kyll aika hitaat, ei suositeltavaa)

 * Esimerkki kuvat (c) PLOTSO 1997
   (niiss ei ole kehumista, mutta en yritkkn voittaa jotain
    tietsikkagraffakilpaa :)

 * Nm rutiinit on tehty Large modelille!

Tekijn yhteystiedot:
---------------------
Jos tulee ongelmia tmn paketin kanssa, voit
vapaasti ottaa yhteytt minuun. Mys kaikenlaiset kommentit
ja bugiraportit ovat tervetulleita.

	Posti:          Mika Tolvanen
			Kavastontie 470
			25460 TOIJA
	E-mail:         mika.janne.tolvanen@mbnet.fi

(ja jos olet MBnetin kyttj, voit lhett minulle yksityispostia.
 Kyttjtunnukseni on  mika&janne tolvanen  )

Mit rutiineja nyt tulikaan otettua?
------------------------------------
 Laitoin thn pakettiin esim. pelin tekoon tarvittavat rutiinit,
 (HNGRWORM.ZIP on tehty nill rutiineilla, lhdekoodit mukana, samoin
  SHITRIS.ZIP, lhdekoodit mukana)
 eli thn kuuluu:
	* VGA 0x13-tilan graffarutiinit (spritet,imaget,pixelit,linet, ym)
	* Fonttirutiinit (kirjoitus monivri- tai yksivrisen)
	* Palettirutiinit (asetukset, feidaukset, vieritykset, ..)
	* PCX-rutiinit (tai no, ei tss ole kuin pcx-lataus-funktio :)
	* DAT-rutiinit (ladataan PICOPY-ohjelmalla tehtyj monikuva-filuja)
	* Nppisrutiinit (voit painaa monta nappia pohjaan yhtaikaa)
	* Hiirirutiinit (tarvittavat funktiot, ehk pari liikaakin :)
	* Fixed point matikka-rutiinit (joitain funktioita..(inlinen))

C vai C++, kas siin SE
-----------------------
 No C++ tss tapauksessa koska kytn C++:an uusia ominaisuuksia
 kuten new/delete operaattoreita ja seuraava ptk selvent lis:
 Kytn rutiineissani luokkia BITMAP/DAT, koska niiden avulla
 bitmappien ksittely ja dat-lataukset ovat paljon helpommat.
 (No, ainakin bitmappien ksittely, ei tarvitse lev&kor arvoja tiet
  itse..samahan olisi onnistunut C:n structilla, mutta tein nyt kumminkin
  ninpin..)
 Mutta jos kytn jossain rutiineissa luokkia, miksi en kyt kaikissa?
 No, paletti-rutiineista olisi voinut tehd luokkakirjaston, mutta
 en jaksanut :)

Esimerkkien kntminen                                                   
-----------------------
Toivottavasti kytt ide. .PRJ:t ovat projektitiedostoja,
mitk lataat ideen ja run. Voit joutua muuttamaan hakemistoja ja 
muita asetuksia. Komentorivilt laitat vaan kaikki MT*.CPP:t 
mukaan joka esimerkkiin, niin pitisi toimia..

History
-------
 * 1.0   Nopeat, reunojen leikkaukset, hidas kuvan skaalaus ja rotaatio.
	 (myhemmin ne rutiinit hvisivt kovalevyltni :( )
	 hidas circle()-funktio
 * 1.2   setcut() -funktio, nopea(mpi) kuvan skaalaus, (rotatea ei ole:()
	 muuta mukavaa..(skaalauksessa ei setcut() vaikuta :( )
	 nopea circle()-funktio

Tst ei ehk tule en uudempia versioita, koska
nit rutiineja varmaan kukaan ei tule koskaan
kyttmn. Mutta jos tulee, ja lyt bugeja, niin
sen voisi kertoa minulle joka tapauksessa.

Miksi tein tmn paketin
------------------------
Sen takia, koska olin tehnyt nm BC++:lle, mutta
siirryinkin DJGPP:hen eli nm rutiinit
ovat minulla turhat..sen takia tein nist
paketin ja laitoin levitykseen.
(sama paketti DJGPP:lle knnettyn: MTROUTDJ.ZIP)

100NALLISET HELL.OT 2
---------------------
  * Kaikille tutuille ja vhemmn tutuille
    (nimi mainitsematta..niit tuttuja
     kun on niin kovin vhn :)

Hidas putsprite?
----------------
Miksi en kyt maskattuja spritej?
No, yritin tehd sellaisen rutiinin thn pakettiin,
mutta en saanut sit toimimaan nopeammin kuin tmn
mukana tuleva putsprite, joten poistin sen :)
(siin oli jotain hikk, se oli LYTTMN hidas,
 vaikka laitoin kerralla 4 tavua ruutuun..ja maski
 oli tehty samalla kun kuva ladattiin, eli se maskin
 teko ei hidastanut looppia yhtn..)
Mutta kyll tmn mukana putsprite on kohtalaisen nopea..

Paketin sislt
---------------
MT.H        headeri (includaa aina tm mukaan, jos kytt mit tahansa
	     tiedostoa tst paketista)
MTDATA.H    jos kytt MTDATA.CPP:t
EX??.CPP    esimerkkien lhdekoodit  (1-11)
MTVGA.CPP   grafiikkarutiinit
MTKEYB.CPP  nppimistrutiinit
MTDATA.CPP  DAT-file-lataaja
MTFONT.CPP  font-rutiinit
MTMATH.CPP  fixed-point matikkafunktiot
MTMOUSE.CPP hiirirutiinit
MTPAL.CPP   palettirutiinit
MTPCX.CPP   pcx-lataaja
GETPAL.CPP  PCX-kuvasta paletinnappaaja
GETPAL.EXE  paletinnappaaja exe
GETFONT.EXE tll ohjelmalla voit leikata pcx-kuvasta omat kirjaimet
PICOPY.EXE  tll ohjelmalla teet DAT-filej (kopioit monta pcx-kuvaa
	     perkkin)
*.PAL       palettitiedostoja (napattu GETPAL-ohjelmalla)
*.PCX       kuvia
*.DAT       rykelm kuvia, tehty PICOPY:lla
*.FNT       fontti-tiedostoja, leikattu GETFONT-ohjelmalla
*.PRJ       BC++ 3.1:n projektitiedostot
..ja ehk jotain muuta..(mutta ainakin nm)


Mukana tulleiden apuohjelmien kytt (GETFONT, PICOPY, GETPAL)
--------------------------------------------------------------

GETFONT  V1.0 (ei lhdekoodeja mukana)
--------------------------------------
	GETFONT -ohjelmalla voit leikata 256c pcx-kuvasta 
	(leveys 1-320, korkeus 1-200)
	kirjaimia ja tallentaa ne kovalevylle.

	GETFONT -ohjelmalle annetaan parametreiksi
		- .PCX -kuvatiedosto
		- .FNT -fonttitiedosto

	.FNT fonttitiedosto laitetaan silloin parametriksi, kun halutaan
	muuttaa sen space/enter -arvoja.

	.PCX kuvatiedoston (eli miss on leikattavat kirjaimet) kanssa
	voit kytt 2 eri helpotus-moodia.
	Eli
	  * moodi 0: pit tarkkaan rajata kirjain joka puolelta laatikolla.
	  * moodi 1: valitset alareuna-vrin, ja ohjelma katsoo sitten itse
		     mihin tulee laatikon alareuna. Helpottaa leikaamista..
	  * moodi 2: valitse reuna-vri, ja ohjelma merkkaa kirjaimen, mik
		     on piirretty laatikon sislle. Helpottaa leikaamista..
	    (tai tss ei ole en leikkaamista, vaan merkkaamista:)

	  * moodi  0 ja 1 :   ohjeet leikkaamiseen:
	  | kun haluat leikata kirjaimen, mene ristin kanssa sen
	  | vasempaan ylreunaan (tai mist reunasta on mielestsi paras
	  | aloittaa leikkaaminen). Npsyt hiiren vas. nappia, ja saat
	  | esiin laatikon reunat, mitk laitat kirjaimen ymprille, ja paina
	  | uudelleen vas. nappia (OK). Jos laatikon alkukohta on vrss
	  | kohdassa, paina hiiren oik. nappia (cancel)...Eli OK ja  merkattu
	  | alue vaihtaa vri.
	  | Jos alue on vrss kohti, paina oik. nappia (cancel) muuten
	  | vas. nappia (OK) ja kirjain tallentuu kovalevylle.

	Nppimet:
	----------
	- F1 antaa ohjeita.
	- F5 tallentaa ja lopettaa
	- F10 lopettaa ilman tallennusta
	- Z  laittaa zoom-ikkunan nkyviin ja piiloon
	- S  saat mrt zoom-ikkunan paikan ruudulla

	Muuta:
	------
	Kun lopetat, ohjelma haluaa kirjaimet siin jrjestyksess
	miss olet ne leikannut. Eli ennen kuin alat leikkaamaan mitn
	kirjoita vaikka paperille yls merkkien jrjestys. Ota yls mys
	hyv vlilynti-arvo, ja korkeimman kirjaimen korkeus, mik ky
	enterist.
	(space/enter arvoja voit muuttaa jlkikteen mutta jos kirjoitat
	 kirjainrivin vrin, niin sit ei voi muuttaa)

	Jos kytt modea 1 tai 2, niin kannattaa piirt piirto-ohjelmalla
	kirjainten ymprille laatikko (muilta sivuilta seuraavassa
	 pixeliss, mutta alhaalta pit katsoa erikseen, selitn kohta).
	Tai, jos kytt modea 1, et tarvitse kuin sen alareunan.
	Eli alareuna viiva piirretn seuraavasti:
	   
	   Kirjoita kirjaimet samalle tasolle, niin net, ett jotkut
	   kirjaimet menevt alemmas mit toiset. (esim j tai p )
	   Vedt vaakaviivan alimmaksi menneen pikselin alapuolelta.
	   (jos kirjaimet on monella rivill, niin katso, mill rivill
	    on kirjain, mik on alimpana, ja ved sitten se viiva.
	    Sitten laske pixelit, montako siit viivasta on muiden
	    kirjainten alimpaan kohtaan. Sitten vedt viivan muiden
	    rivien alle, mutta list y:t sill pixelivlill.)
	   Katso FONTS.PCX, mist min leikkasin ne omat kirjaimeni.
	   Kun pidin liian isoja laatikkoja, niin niihin kirjaimiin
	   tulee liian isot vlit. Kun laitat joka kirjaimen _ihan_
	   ymprille laatikon, ei vlej tule. 
	   mtwrite() yms. funktioissa on parametri plus, mik
	   lis vli. Eli siihen sitten 1 tai 2, jos haluaa
	   niit enemmn yhteen, niin -1 tai -2..

	Ja viel yksi huomautus:
	------------------------
	Jos kuvassa on joku outo paletti, niin GETFONT -ohjelman
	helppej ei vlttmtt ny :(
	eli lue helpit jonkun ok-palettisen kuvan kanssa
	ja sitten lataa outo-paletti-kuva, leikkaa kirjaimet,  
	muistele ett miten tallennettiin (F5 ja K).
	Sitten ohjelma siirtyykin textitilaan, ja siell ei
	pitisi olla mitn ongelmia (toivon mukaan, kertoi Toivo :)

PICOPY V1.0 (ei lhdekoodeja mukana)
------------------------------------

	Picopy-ohjelmalla voit valita .PCX -tiedostoja ja ohjelma kopioida ne
	yhteen tiedostoon.
	Jos teet esimerkiksi peli, miss on paljon PCX-kuvia, niin
	voit joutua kyttmn lhdekoodissasi useasti loadpcx-funktiota.
	Tll ohjelmalla voit kopioida PCX-kuvat yhteen tiedostoon ja sielt
	ne on helppo ladata.
	Tm ohjelma EI tallenna palettia eli GETPAL.EXE:ll
	ota paletti talteen.

	Aseman,hakemiston,hakusana ja tiedoston uuden nimen
	voi tietenkin muuttaa. Niihin psee ksiksi painamalla TAB.
	Vlilynnill joko merkataan tiedosto tai otetaan merkki pois.
	 * M kirjain merkitsee kaikki tiedostot ylhlt alas 1-n.
	 * U ottaa kaikki merkit pois.
	 * S tallentaa tiedostot merkatussa jrjestyksess.
	 * ESC quittaa kyselemtt, eik tallenna merkattuja tiedostoja
	   uuteen tiedostoon.

	MUTTA MUISTA TM:
	  kun vaihdat hakemistoa Picopy -ohjelmassa, se vaihtuu mys oikeasti
	  eli siis kun tallennat lopuksi kuvat, niin output-file menee sinne
	  hakemistoon, miss on ne .pcx-kuvatkin!

	JA TRKET:
	  kun vaihdat hakemistoa, anna ensimmisen merkin AINA olla '\'.
	  Sillon ohjelma toimii hyvin (tai ainakin hakemisto vaihtuu)!


GETPAL (lhdekoodit tiedostossa GETPAL.CPP)
-------------------------------------------
	Ohjelma ottaa pcx-kuvasta 256-vrisen paletin ja tallentaa
	sen erilliseen tiedostoon. Ohjelma ottaa parametreiksi
	 * pcx-tiedosto (mist paletti napataaan) ja
	 * paletti-tiedosto, mihin se paletti tallennetaan.
	PICOPY-ohjelma tallentaa vain leveydet&korkeudet ja kuvadatan
	rle-pakattuna, mutta headerin ja paletin se jtt pois.
	      (data-tiedostosta tulee sill tavoin pienempi!)
	Kun sill tehdn data-tiedosto, tll otetaan yhden kuvan
	paletti (tai kaikki erilaiset paletit).

-----


Rutiinien kytt
----------------
bitmap *screen
useassa funktioissa kytetn viimeisen
parametrin bitmap *dest/*source/*pic tai jotain,
mihin siis piirretn, siihen voidaan
laittaa screen, tai jos ollaan luotu virtual screeni,
niin laitetaan se.

paletti mritelln joko
  rgb pal[256];   tai ihan vaan   palette pal;
(loadpal()-funktion eka versio vaatii ett laitetaan nin: rgb *pal;
 mutta et tarvitse tuota, jos kytt loadpal():n toista versiota :)

key[] taulukosta voit katsoa, onko tietty
 nappi painettuna. Napit on #definoitu
 mt.h tiedoston lopussa. Muoto on KEY_<thn nappi>

errors err();
 jos on tullut latausvirhe, muistiloppu
 tai muuta, niin err() funktio palauttaa
 sen virhearvon.

Nyt yritn selitt jotenkin funktioiden toiminnan:

char initmath();
 varataan sin ja cos taulukoille muistia
 ja laitetaan arvot taulukoihin.
 nyt voit kytt sintbl ja costbl taulukoita
 sin/cos funktion sijasta.

char *load_pcx(char *file,rgb *pal=0,int *lev=0,int *kor=0);
 lataa pcx-kuvan, palauttaa datan osoitteen.
 file  PCX-tiedoston nimi
 pal,lev,kor  jos haluat ett funktio palauttaa nuo arvot, anna
	      osoite, mihin haluat tiedon menevn

void createbitmap(bitmap *pic,int lev,int kor);
 pic    mihin varataan muistia (lev*kor verran)
 lev    leveys
 kor    korkeus

void setmode(int mode);
 mode   anna moodi, vga320x200x256, mille nm rutiinit on tehty,
	on 0x13, ja textitila on 3

void vretrace();
 odottaa vertical retracea

void put_image(int x,int y,int lev,int kor,char *pic,bitmap *dest);
 laita pic destiin x ja y kohtaan lev=kuvan leveys, kor=kuvan korkeus.

void put_sprite(int x,int y,int lev,int kor,char *pic,bitmap *dest);
 laita pic destiin x ja y kohtaan lev=kuvan leveys, kor=kuvan korkeus.

void scale_pic(int x,int y,int lev,int kor,int uuslev,int uuskor,char *pic,bitmap *dest);
 laita pic destiin x ja y kohtaan lev=kuvan oikea leveys, kor=kuvan oikea
 korkeus, uuslev=uusi leveys, uuskor=uusi korkeus

void scale_spr(int x,int y,int lev,int kor,int uuslev,int uuskor,char *pic,bitmap *dest);
 laita pic destiin x ja y kohtaan lev=kuvan oikea leveys, kor=kuvan oikea
 korkeus, uuslev=uusi leveys, uuskor=uusi korkeus

void put_spritecol(int x,int y,int lev,int kor,char col,char *pic,bitmap *dest);
 piirr pic col-vrill destiin x ja y kohtaan lev=leveys,kor=korkeus

void clear(bitmap *dest);
 'maalaa' dest mustaksi (nopea!)

void clear(char col,bitmap *dest);
 'maalaa' dest col-vrill

void putpixel(int x,int y,char col,bitmap *dest);
 laita piste x ja y kohtaan vrill col destiin
 (tarkistaa mys, ettei piirret dest -alueen yli)

char getpixel(int x,int y,bitmap *sour);
 ota piste x ja y kohdasta. funktio palauttaa vrin arvon
 (jos x ja y on sour -alueen ulkopuolella, funktio palauttaa 0)

void line(int x1,int y1,int x2,int y2,char c,bitmap *dest);
 piirr viiva x1,y1 kohdasta x2,y2 kohtaan vrill c destiin.

void vline(int x,int y,int kor,char c,bitmap *dest);
 piirr pystysuora viiva

void hline(int x,int y,int lev,char c,bitmap *dest);
 vaakasuora viiva (nopea!)

void hline2(int x,int x2,int y,char c,bitmap *dest);
void vline2(int x,int y,int y2,char c,bitmap *dest);
 samat kuin yll, parametrit on vhn erilaiset

void circle(int x,int y,int r,char c,bitmap *dest);
 piirr ympyr x ja y kohtaan, sde r, vri c 

void fcircle(int x,int y,int r,char c,bitmap *dest);
 piirr tytetty ympyr 

void copy(bitmap *sour,bitmap *dest, int sx,int sy,int dx,int dy,int lev,int kor);
 kopioi sour:sta sx ja sy kohdasta dest:iin dx ja dy kohtaan lev ja kor
 verran dataa

void mirrorv(bitmap *dest,bitmap *sour);
 tee peilikuva sour:ista dest:iin
 l kyt tt funktiota loopissa, koska
 tm on hidas! tee peilikuvat esim. ukoista
 ennen looppia.

inline void setcut(int x,int y,int ex,int ey,bitmap *pic);
 aseta leikkausreuna. oletuksena on 0,0, leveys,korkeus,
 mutta voit muuttaa ne tll. skaalaus-funktioissa tm ei vaikuta,
 koska en saanut sit toimimaan oikein tmn kanssa :( :(

inline void toscreen(bitmap *pic) { put_image(0,0,pic->lev,pic->kor,pic->data,screen); }
 laittaa pic:in ruutuun

inline void putpixel2(int x,int y,char col,bitmap *dest)
 sama kuin putpixel, mutta nyt ei tarkisteta mitn, meneek yli vai ei

inline char getpixel2(int x,int y,bitmap *sour)
 sama kuin getpixel, mutta ei tarkisteta, otetaanko yli sour-alueen
---

void fadein(palette pal,int luku);
 vaalenna paletti mustasta pal:iin, luku on nopeus

void fadeout(palette pal,int luku);
 tummennta paletti pal:sta mustaan, luku on nopeus

void setpal(palette pal);
 aseta paletti pal

void setpalblack();
 laita paletti mustaksi

void setcol(char col,char r,char g,char b);
 laita col:iin rgb arvot

void getcol(char col,char *r,char *g,char *b);
 ota col:n rgb-arvot

void fadepartin(unsigned int eka,unsigned int monta,palette pal,unsigned int luku);
 vaalenna tietty kohta pal:sta, luku on nopeus.
 eka on ensimminen vaalennettava vri, monta on ett monta vaalennetaan

void fadepartout(unsigned int eka,unsigned int monta,palette pal,unsigned int luku);
 tummenna tietty kohta pal:sta, luku on nopeus.
 eka on ensimminen tummennettava vri, monta on monta tummennetaan

void palleft(unsigned int eka,unsigned int monta,palette pal);
 'vierit' palettia vasenmalle

void palright(unsigned int eka,unsigned int monta,palette pal);
 'vierit' palettia oikealle

rgb *loadpalette(char *file,long offs=-1);
 lataa paletti (funktiossa varataan muistia, ja palautetaan osoitin.
  tt kyttess pit tehd nin:  rgb *pal=loadpalette("filu.PAL",0); )
 file  tiedosto nimi
 offs  jos tm on -1, ladataan paletti pcx-kuvasta, mutta
       muuten ladataan siit kohdasta mink offs mr (eli 0 tiedoston
	alusta)
void loadpalette(palette pal,char *file,long offs=-1);
 muuten sama kuin yll, paitsi ett nyt annetaan JO varattu paletinpaikka
 funktiolle (pal parametri). Nyt tm ei palauta mitn.
---

char ismouse();
 katsoo lytyyk hiirt, jos lytyy, palauttaa nappien lukumrn,
 muuten 0

void showmouse();
 nyt hiirikursori (ky textitilassa ja vga:ssa)

void hidemouse();
 piilota hiirikursori

char mousepos(int *x,int *y,int *but);
 lue hiiren x ja y kohta, but:ssa on napit. funktio palauttaa
 mys but:in

void setmousepos(int x,int y);
 laita hiiri x ja y kohtaan

void setmousearea(int xm,int ym,int xa,int ya);
 aseta hiiren liikkumisalue

void getmousespd(int *hor,int *ver);
 ota hiiren nopeus

void setmousespd(int hor,int ver);
 aseta hiiren nopeus

---

void installkeyb();
 laita oma handleri

void removekeyb();
 ota handleri pois (trke! jos kytt installkeyb() funktiota,
		    muista kutsua ttkin, muuten kone ei en ne
		    nppimenpainalluksia)

char keypressed();
 katsoo, ett onko jotain painettu

void waitifprs(char but);
 odottaa jonkun napin painallusta

---

void freefont(mtfont *fnt);
 vapauttaa fontit

mtfont *loadfont(char *fntfile);
 lataa fontit
 fntfile  fonttitiedosto

void mtwrite(int x,int y,char *str,mtfont *fnt,int minus=0,bitmap *dest);
 kirjoita x ja y kohtaan str=teksti ja fnt-fonteilla destiin
 minus on montako pixeli vhennetn kirjainten vlist.

void mtputchar(int x,int y,char ch,mtfont *fnt,int minus=0,bitmap *dest);
 laita merkki x ja y kohtaan fnt-fonteilla destiin
 minus on montako pixeli vhennetn kirjainten vlist.

void mtwritecol(int x,int y,char *str,mtfont *fnt,char col, int minus=0,bitmap *dest);
 kirjoita x ja y kohtaan str=teksti ja fnt-fonteilla destiin vrill col
 minus on montako pixeli vhennetn kirjainten vlist.

void mtputcharcol(int x,int y,char ch,mtfont *fnt,char col,int minus=0,bitmap *dest);
 laita merkki x ja y kohtaan fnt-fonteilla destiin vrill col
 minus on montako pixeli vhennetn kirjainten vlist.

inline void mtwrite(char *str,mtfont *fnt,int minus=0,bitmap *dest) { mtwrite(tx,ty,str,fnt,minus); }
inline void mtputchar(char ch,mtfont *fnt,int minus=0,bitmap *dest) { mtputchar(tx,ty,ch,fnt,minus); }
inline void mtwritecol(char *str,mtfont *fnt,char col, int minus=0,bitmap *dest) { mtwritecol(tx,ty,str,fnt,col,minus,dest); }
inline void mtputcharcol(char ch,mtfont *fnt,char col,int minus=0,bitmap *dest) { mtputcharcol(tx,ty,ch,fnt,col,minus,dest); }
inline void mtgoto(int x,int y) { tx=x; ty=y; }
 helpottavia funktioita, tekee saman kuin yll, parametreissa ei tarvita
 x ja y kohtaa..ne kun on samat, mihin edellinen teksti jtti "kursorin"
 eli seuraavan tekstipositionin.
-----

char opendat(char *file,dat *sama);
 avaa .dat-tiedoston (tehty PICOPYlla), parametrina annetaan
 avattava tiedosto, ja MIHIN tiedot dat tiedostosta laitetaan.
 (katso esimerkki EX4.CPP)

char loaddat(bitmap *dat,dat *vara,int mones);
 lataa kuvan *dat:iin *vara:sta (vara on sama, mik opendat():ssa kytetn
  toisena parametrin), ja mones ilmoittaa, monesko kuva tiedostosta
 ladataan (0=eka kuva)

void closedat(dat *sama);
 sulje dat-tiedosto (kun kaikki kuvat on ladattu sielt, se kannattaa
  sulkea, ettei TURHAAN j avattuja filuja)

void freedat(dat *sama);
 vapauta dat-tiedostoheaderin varaama muisti. Kun kytt tt,
 tm *EI* vapauta dat-tiedostosta ladattuja kuvia, nehn ladataan
 bitmap *dattiin

Katso MTDATA.H -filusta, mitk funktiot luokassa on..
(EX4.CPP kytt luokkaversiota :)
-----

Viel jotain
------------
Sorry nit parametrien nimi... pic/dest/source/dat/sama/vara ja
vaikka mit muuta..ne on tullut laitettua vhn ajattelemattomasti,
mutta toivottavasti ymmrrt, mik laitetaan mihinkin kohtaan..
(mutta ellet, tutki esimerkkej)

-----------------------------------------------------------------------------

Loppurutinat
------------
Sorry, ei ole aikaa kirjoittaa kovin pitki selityksi noille funktioille, 
mutta ellet ymmrr, niin tutki esimerkkej.
Ja jos kytt bitmap-luokkaa, funktionimet on vhn erilaiset
mutta paljon helpompi kytt. (katso funktiot mt.h:sta)
Tekstissni voi olla PALJON kirjoitusvirheit, mutta l vlit,
koska en minkn..

-PLOTSO-
