VBCC:n kanssa ongelmia...

Saku-foorumi » Classic Amiga » Ohjelmointi » Viestit 2003 » VBCC:n kanssa ongelmia... « Edellinen Seuraava »

Kirjoittaja Viesti
 

Markus
Tiistaina, 13. toukokuuta, 2003 - klo 16.40:   
Olen viimeinkin kokeillut VBCC-kääntäjää. Se kuuluisa yhden printf:n testaus on tehty, mutta ongelma tulee vastaan ohjelman kanssa, joka käyttää iff.libraryä. DICE:n kanssa ohjelma kääntyy siististi, mutta kun kirjoitan "vc ohjelma.c", niin erroria tulee jokaisen iff.libraryn funktion kohdalla viestillä "undefined reference" (esim. undefined reference to _IFFL_DecodePic). Kokeilin erästä muutakin ohjelmaa kääntää, joka käyttää ulkoista kirjastoa ja samankaltainen ongelma tuli siinäkin. Ohjelman alussa on tietenkin asianmukainen header-tiedosto sisällytetty. Avut & neuvot & selitykset otetaan mielellään vastaan.

 

Markus
Tiistaina, 13. toukokuuta, 2003 - klo 16.42:   
Lisätään vielä, että include-path on kunnossa eli tarvittava libraries/iff.h löytyy.

 

miksuh
Tiistaina, 13. toukokuuta, 2003 - klo 17.21:   
Hmm kääntäjä ei siis valita headeri fileen puuttumisesta tai jotain ?

Itsellä mulla ei ole juuri kokemusta VBCC:stä vaikka mulla se asennettuna kyllä onkin. Äkkiseltään toi nyt kuitenkin kuulostaa siltä, että jotain jää linkkaamatta mukaan. Koska kyseessä on ongelma shared-libraryjen kanssa, niin lähinnä sanosin et funktio prototyypit määrittelevä headeri file jää nyt ottamatta mukaan.

Mä en nyt ole ihan varma siitä mitä tapaa VBCC käyttää kun noiden Amigan C-kääntäjien välillä on hiukan eroja siinä miten niillä noi prototyyppi hommat hoidetaan. Siitä en olisi yllättynyt vaikka vanhan DICE:n ja VBCC:n tapa hoitaa noi olisi erilainen.

Esim jos halutaan käyttää intuition.librarya niin...

GCC:n kanssa pitää tehdä näin:

#include
#include

Toinen käytetty tapa on korvata jälkimmäinen rivi tällä:

#include

Kannattaa tutkia noita hommeleita, jos vaikka ongelman syy löytys.

 

miksuh
Tiistaina, 13. toukokuuta, 2003 - klo 17.26:   
jahas ja sakufoorumi iski jälleen... Se taas luuli noita html-tageiksi. mitenkähän noi pitäs kirjottaa et ne näkyisi oikein... No yritetäänpäs uudestaan: korvaann noi pienempi ja suurempikuin merkit normaali suluilla. Eli...

---

Esim jos halutaan käyttää intuition.librarya niin...

GCC:n kanssa pitää tehdä näin:

#include (intuition/intuition.h)
#include (proto/intuition.h)

Toinen käytetty tapa on korvata jälkimmäinen rivi tällä:

#include (clib/intuition_protos.h)

Kannattaa tutkia noita hommeleita, jos vaikka ongelman syy löytys.

 

miksuh
Tiistaina, 13. toukokuuta, 2003 - klo 18.41:   
Tossa on yksi ohje miten saa aikaan kutakuinki kaikilla kääntäjilä kääntyvän koodin. Tosin toi on vähän vanha sivu, mut...

http://www.nvg.ntnu.no/amiga/amigafaq/AmigaFAQ_30.html

 

miksuh
Tiistaina, 13. toukokuuta, 2003 - klo 18.48:   
Tää on oikeestaan parempi kun toi edellinen, tossa on käytetty tota proto/ muotoa minkä sanoin eka.

http://www.lysator.liu.se/amiga/info/guide/amigafaq.guide?Pragmas

 

Jon
Keskiviikkona, 14. toukokuuta, 2003 - klo 0.43:   
Laita Markus include-rivisi nähtäväksi, samoin kääntö- ja linkkauskäskyt.

 

itix
Keskiviikkona, 14. toukokuuta, 2003 - klo 3.05:   
@miksuh:

#include (proto/intuition.h)

Tämä on oikea tapa. Se toinen tapa on huono.

@markus: Selvästikin puuttuu protot, eli:

#include (proto/iff.h)

 

miksuh
Keskiviikkona, 14. toukokuuta, 2003 - klo 14.53:   
itix: Jep. Noin itsekin asian käsittäny, jostain syystä tota toistakin versiota jotkut käytää nykyäänkin...

 

Piru
Keskiviikkona, 14. toukokuuta, 2003 - klo 15.24:   
Sen Toisen Tavan Käyttäjät ovat Väärämielisiä! :)

 

Markus
Keskiviikkona, 14. toukokuuta, 2003 - klo 15.38:   
Kokeilin iff.library-paketin mukana tulevaa EasyExample.c:tä kääntää. DICE:llä kääntyy (yhtä kohtaa joutui muuttamaan), mutta VBCC:llä valitusta tulee kaikista iff.libraryn funktiokutsuista.

Eli ohjelmassa on kaikki tarvittavat muut include-jutskat, sekä tämä

#include (libraries/iff.h)

Tuo on ainoa headertiedosto, mikä C-kieliseen ympäristöön koko iff.library-paketista tulee, ja sieltä löytyy monien määrittelyjen lisäksi protot. Otetaan tähän vaikka esimerkkinä yksi:

void IFFL_CloseIFF ( IFFL_HANDLE );

Samassa tiedostossa on myös pragmat:

#pragma libcall IFFBase IFFL_CloseIFF 24 901

Olen kääntäessä käyttänyt vc:tä, eli komentorivinä on ollut pelkkä

vc EasyExample.c

Olen kokeillut itse kääntäjälläkin:

vbccm68k EasyExample.c -Ivincludem68k:

Tuloksena on assembly-tiedosto EasyExample.asm

Listauksessa on loppupuolella rivi, missä on mm.

public _IFFL_CloseIFF

sekä esim. intuition.libraryn kutsuja vastaavalla tavalla.

PhxAss-assemblerilla tiedosto kääntyy ja linkitettäessä vlink-ohjelmalla valitusta ei tule muista kuin iff.libraryn funktioista, kun ottaa muutaman libin linkkauksessa mukaan, mutta nuo iff.libraryn kutsut eivät tietenkään ole standardissa amiga.lib'ssä, joten linkkeri valittaa mm.

undefined reference to _IFFL_CloseIFF

iff.librayn mukana tulee tiedosto iff.lib, mitä olen kokeillut tarjota linkkerille, mutta ei ole ollut apua.

Samantyyppinen ongelma on tullut, kun olen kokeillut kääntää (Octa)MEDiin liittyvän developer-aineiston esimerkkisorsaa, joka käyttää medplayer.libraryä, vaikka proto-tiedosto löytyy... Mikä nyt eteen? :-/

 

Jon
Keskiviikkona, 14. toukokuuta, 2003 - klo 16.27:   
Tyhmä kysymys, mutta avataanko IFF.library-koodissa? (entä IFFBasen määrittely?)

Onko IFF:ään liittyen mitään .fd-tiedostoa, jonka avulla voisi luoda oikeantyyppiset include-tiedostot eri kääntäjille?

Voin auttaa tuossa MEDin kanssa, kun oma AmiBlocks-pelini käyttää med-kirjastoja. Voin laittaa sulle sorsat siitä - Aminetissa taitaa olla joku vanhempi versio, joka ei käänny suoraan GCC:llä, mutta VBCC:llä kyllä.

 

JPQ
Keskiviikkona, 14. toukokuuta, 2003 - klo 17.20:   
Jon: please pistä tännekkin. Täälläkin olisi med kirjasto jutulle tarvetta.
Maili on tuossa JPQ linkin takana.

 

Jon
Keskiviikkona, 14. toukokuuta, 2003 - klo 17.42:   
Malttaakaa. Pitää varmaan kokeilla että kääntykö se edes tällä hetkellä :)

Pistän varmaan webbiin jossain vaiheessa ja kerron sitten.

 

JPQ
Keskiviikkona, 14. toukokuuta, 2003 - klo 18.18:   
Jon: minä maltan. Ei tässä hätää ole.

 

JPQ
Keskiviikkona, 14. toukokuuta, 2003 - klo 18.18:   
Jon: minä maltan. Ei tässä hätää ole.

 

Markus
Keskiviikkona, 14. toukokuuta, 2003 - klo 18.54:   
Jon: Kyllä, iff.library avataan ja IFFBase määritellään. .fd-tiedosto löytyy lisäksi tuosta iff.library-paketista.

Hain muuten Aminetista tuon AmiBlocks-paketin. Kokeilin kääntää sieltä löytyvää med.c:tä (otin käännäkseen mukaan proplayer.h:n, jota ei paketissa ollut), ja törmäsin tähän samaiseen ongelmaan, eli kaikista medplayer.library-kutsuista sanottiin "undefined reference", eli tämän ongelman täytyy olla ihan tässä kääntämis- ja linkittämistavassa.

Näin laitoin käännösprosessin päälle:

vc med.c -c -cpp-comments

Tuloksena objektitiedosto jonka linkittämisen yhteydessä tulee herjaa medplayer.library-kutsuista (undefined reference).

Tähän asiaan liittyen kysyisin, että minkälainen formaatti on vbcc:n makefile-tiedostolla (miksuh selitti asiaa GCC:hen liittyen aiemmin, onko samanlainen formaatti?)? Mites niitä makefilejä sitten käytetään, miten saa kääntäjän ja linkkerin seuraamaan makefilen ohjeita (en ole koskaan eläessäni omissa ohjelmissani käyttänt makefileä :-0)...

Ai niin, minulla muuten ei musiikki soinut tuossa AmiBlocks-pelissä. Kun pelin aikana painoin sitä kysymysmerkki-gadgettia, ja painoin sitä "music on/off"-checkmark-gadgettia, niin koko WinUAE hävisi alta ilman mitään virheilmoituksia.

 

Jon
Keskiviikkona, 14. toukokuuta, 2003 - klo 20.01:   
Wau :) Enpä olekaan itse kokeillu WinUAE:lla...

No aluksi kannattaa hakea Aminetista fd2pragma-ohjelma, ja perehtyä sen käyttöohjeeseen. Siellä on myös valmiita skriptejä, joilla saa tehtyä kasan header-tiedostoja kerralla - tosin kannattaa varautua siihen, että jokin tiedosto puuttuu. Muistaakseni vaivaan auttaa jos nostaa esim. FailAt-arvon 20:een. (failat 20).

Amigalla ohjelmoinnissa alkuun pääsy ei ole turhan helppoa, mutta kannattaa lukea ainakin GG:n mukana tuleva guide, VBCC:n ohjeet sekä fd2pragman ohjeet.

Palaan tuohon med-asiaan kun ehdin.

 

Jon
Keskiviikkona, 14. toukokuuta, 2003 - klo 20.01:   
ps... optio -+ tai -c99 mahdollistaa myös //-kommentit...

 

Jon
Keskiviikkona, 14. toukokuuta, 2003 - klo 21.07:   
makefile vaatii siis make-ohjelman (Aminet esim.). VBCC:n ohjeista saa osviittaa oikeista parametreistä yms (esim. -cpu=68020).

Hetkinen, onhan sinulla muuten kaikki soittokirjastot LIBSissä? Muistaakseni uusimmat löytyy (med, octamed ja octamix) löytyy SoundStudion developer-matskuista, Aminetista. Siellä on muistaakseni fd-tiedostot, joista voi fd2pragmalla luoda sopivat include-tiedostot.

 

Markus
Keskiviikkona, 14. toukokuuta, 2003 - klo 22.20:   
Jeps, muistelinkin Linux-ajoistani, että make-ohjelmalla niitä isoja sorsakokonaisuuksia laitoin kuntoon.

VBCC:n mukana tulee fd2pragma-ohjelma, katsoin, että sillä tulee juuri sen muotoista jälkeä, kuin mitä nuo iff.librayn-paketin ja med-aineiston mukana tulevat pragma-määrittely ovat (plus toisenlaista jälkeä mm. StormC:lle).

libs:-hakemistossa on kaikki MEDien soittoon tarvittavat 3 libraryä.

Mutta takaisin ongelmaan, kyhäsin MEDin developer-aineistosta pienen medplayer.libraryä käyttävän testiohjelman, joka näyttää seuraavalta (kutsutaan tätä nimellä "play.c":

--

#include <stdio.h>

#include <exec/types.h>
#include <libraries/dos.h>
#include <proto/exec.h>
#include <proto/dos.h>

/* These two must be included in this order. */
#include "myprotos.h"
#include "proplayer.h"

int main(int argc,char *argv[])
{
struct MMD0 *sng;
struct Library *MEDPlayerBase = NULL;

if(argc < 2) { printf("Usage: example2 <song>\n"); return;
MEDPlayerBase = OpenLibrary "medplayer.library",7);
if(!MEDPlayerBase) { printf("Can't open medplayer.library!\n"); return; }
sng = LoadModule(argv[1]);
if(!sng) { printf("Load error."); goto exit; }

PlayModule(sng);

Wait(SIGBREAKF_CTRL_C);

exit:
FreePlayer();
UnLoadModule(sng);
CloseLibrary(MEDPlayerBase);
}

Tuo myprotos.h näyttää tältä:

--

#pragma libcall MEDPlayerBase LoadModule 48 801
#pragma libcall MEDPlayerBase FreePlayer 24 0
#pragma libcall MEDPlayerBase UnLoadModule 4e 801
#pragma libcall MEDPlayerBase PlayModule 2a 801

void PlayModule(struct MMD0 *module);
void FreePlayer(void);
void UnLoadModule(struct MMD0 *module);
struct MMD0 *LoadModule(char *name);

--

Sitten tuo proplayer.h on se developer-aineston file, jossa on mm. määritelty tuo MMD0-strukture.

Kun annan komentorivillä komennon:

vc -cpp-comments play.c

tulee erroria jokaisesta medplayer.library-kutsusta, sekä tuosta sng-viittauksesta (undefined reference), mistään muusta ei tule erroria, muutama varoitus kylläkin. Miten tästä eteenpäin?

 

Jon
Keskiviikkona, 14. toukokuuta, 2003 - klo 22.46:   
Joo, elin äsken testasin miten VBCC:llä käännetään/linkataan AmiBlocksin med.c tiedosto.

Katso kohta "Beginners" fd2pragman guidesta ja käytä SPECIAL 70 ja 38 -optioita kuten neuvottu.

Sitten inkluudat proplayer.h:n ja protot.

Ilmeisesti tuossa esimerkissäsi pitäisi olla ensin proplayer.h, vasta sitten myprotos.

Tässäpä esimerkiksi luotu proto/medplayer.h:

(eli se ottaa clibin alta tiedoston, samoin inlinen.)

#ifndef _PROTO_MEDPLAYER_H
#define _PROTO_MEDPLAYER_H

#ifndef EXEC_TYPES_H
#include
#endif
#ifndef CLIB_MEDPLAYER_PROTOS_H
#include
#endif

#ifndef __NOLIBBASE__
extern struct Library *MEDPlayerBase;
#endif

#ifdef __GNUC__
#include
#elif defined(__VBCC__)
#ifndef __PPC__
#include
#endif
#else
#include
#endif

#endif /* _PROTO_MEDPLAYER_H */

 

Jon
Keskiviikkona, 14. toukokuuta, 2003 - klo 22.51:   
Noniin, selain/foorumi teki temput ja otti kaikki -merkit pois. Laita Markus sähköpostiosoite niin laitan sulle vaikka nuo headerit tulee henk. koht. En tiedä saako niitä levitellä miten julkisesti, vaikka enpä usko että TeijoK tai RBF hyökkää kimppuun :)

 

Markus
Keskiviikkona, 14. toukokuuta, 2003 - klo 23.48:   
Jeps, tuonne nimen alla olevaan sähköpostiosoitteeseen voi lähettää. :)

 

Markus
Torstaina, 15. toukokuuta, 2003 - klo 0.21:   
Tuossa itse kikkailin header-tiedostojen kanssa, ja homma eteni siihen asti, että

vc -cpp-comments play.c

antaa erroriksi enää "undefined reference to _sng". Edistystä... :)

 

Markus
Torstaina, 15. toukokuuta, 2003 - klo 1.19:   
Köh, minulla oli jostain syystä tuossa play.c-tuotoksessani "extern" tuossa alussa ennen "struct MMD0 *sng;"-kohtaa, ja sen vuoksi tuli tuo mainittu errori. Nyt saan tuotoksen kääntymään ilman erroria, mutta ohjelman ladattua kappaleen mitään ei kuulu. Yllä oleva ohjelma muuten kysyy medplayer.librarystä versiota 7, mutta huomasin, että minulla on vain vesrio 5, enkä äkksieltään löytänyt Aminetista uudempaa, joten muutin tuon versiovaatimuksen viideksi...

 

Markus
Torstaina, 15. toukokuuta, 2003 - klo 1.38:   
Ohjelmastahan tietysti puuttui GetPlayer()-rutiinin kutsu, lisäsin sen, muttei auttanut... Mutta nyt kyllä jo väsyttää liikaa...

 

Jon
Torstaina, 15. toukokuuta, 2003 - klo 8.34:   
Laitoin sulle ja JPQ:lle includet postissa. Ne toimii todennäköisesti vain VBCC:llä, koska siihen käyttöön ne on tarkoitettu.

Eli lisäsit GetPlayer():n, eikä anna mitään virheilmoituksia? Hmmm. Ja olet varma että laite soittaa MED-musa, esim. HippoPlayer?

 

Jon
Torstaina, 15. toukokuuta, 2003 - klo 8.36:   
Hmmm...eikö tuo "extern"-määrite tarkoita, että muuttuja on määritelty jossain muualla, ja että se ikäänkuin otetaan käyttöön ko. kääntöyksikössä sen avulla.

 

Markus
Torstaina, 15. toukokuuta, 2003 - klo 12.38:   
Olen pikaisesti kokeillut tuota tuotostani uudestaan, ja nyt se toimi! :)

Eilen oli kyllä aika spooky hommaa tuo "koodaminen". Nimittäin monta kertaa oli niin, että kun tekstieditorissa asiat olivat tavalla A ja talletin tekstin, niin multiviewillä katsoessani samaa tekstiä asiat olivat tavalla B (savettamisen tulos ei näkynyt). Liekkö jotain WinUAE:n bugeja vai mitä...

Tänään mitä kerkesin katsomaan, niin tilanne oli se, että GetPlayer-rutiini oli sorsassa kommenteissa! Ei ihme, että ei musiikki kuulunut. Outoa, olin kai liian väsynyt tai jotain... :)

Tuo extern on käytössä example1.c:ssä niissä MEDin developer-sorsissa. Tuossa ei käytetä libraryä, vaan linkitetään alunperin käännetyt asemblykoodit mukaan.

 

tomppa
Torstaina, 15. toukokuuta, 2003 - klo 15.18:   
Omien kokemusteni mukaan WinUAE saattaa häröillä talletusten kanssa välillä, ainakin winukan filesysteemiä käytettäessä. Varmuuden vuoksi kannattanee heittää ainakin kriittiset tiedostot hardfileille, olen käsittänyt että ompi turvallisempi.

 

Markus
Torstaina, 15. toukokuuta, 2003 - klo 18.35:   
VBCC:n vlink-linkkerin käytön kun vielä hallitsisi... Eli tämä alunperin assembly-koodia olevien objektitiedostojen linkkaaminen mukaan C-kieliseen ohjelmaan... (Konekieliseen ohjelmaan MEDin rutiinien linkkaaminen onnistuu kivuttomasti vanhalla blink-linkkerillä (tokihan omaan konekieliseen koodin voi toisaalta sisällyttää vaikka koko playroutinen))... Esimerkkinä tämä MEDin developer-aineiston example1.c:

--

#include (exec/types.h)
#include (libraries/dos.h)
#include (proto/exec.h)
#include (proplayer.h)

/* Use symbol name 'song' when using Objconv, or change this. */
extern struct MMD0 far song;

void main() /* this can be linked without c.o */
{
RelocModule(&song);
InitPlayer();
PlayModule(&song);
Wait(SIGBREAKF_CTRL_C);
RemPlayer();
}

--

Eli kun minulla example1.o ja tarvittavat 3 objektitiedostoa (reloc.o, proplayer.o (tätä ei mainittu example1.c:n kommenteissa, mutta luonnollisesti sen on oltava mukana) ja module.o (soitettava moduuli objektitiedostoksi muutettuna objconv-ohjelmalla)) + amiga.lib, vc.lib ja startup.o ja linkkaan nämä kaikki vlinkillä, tulee kyllä tuloksena ajettava tiedosto, mutta se vain sekoittaa systeemin. :-/

 

Jon
Torstaina, 15. toukokuuta, 2003 - klo 18.51:   
En tiedä mitään noista konekielisistä jutuista, mutta voiskohan ne assemblysorsat kääntää uudestaan esim Ph???-mikäseassemblernytolikaan ja yrittää sitten linkata.

Oispa mahtavaa kun joku porttais med-soittorutiinit (kaikki 3) C:lle. Ilmeisesti SoundStudion nykyisellä kehittäjällä tämä nakki onkin.

 

Markus
Torstaina, 15. toukokuuta, 2003 - klo 19.14:   
Jep, eli olen kääntänyt reloc.a:n ja proplayer.a:n (tästä täytyi muistaakseni ainakin yksi kaksoispistekommentti korjata puolipistekommentiksi, joissakin vahoissa proplayer.a-sorsissa täytyy lisätä "even" muutamaan paikkaan) molemmat objektitiedostoiksi ja nämä pitäisi laittaa kyytipoikina example1.o:n kanssa.

Olen kokeillut vanhalla blink-linkkkerillä example1.c:n kommenteissa olevien ohjeiden mukaan

blink from lib:c.o+example1.o+module.o+reloc.o to example1 lib lib:lc.lib+lib:amiga.lib nd sc sd

linkittää lisäten tuonne proplayer.o:n ja ottamalla c.o:n pois (laitoin startup.o:n tilalle), ja noiden lib-tiedostojen paikalle laitoin vlibm68k:amiga.lib:n ja vlibm68k:vc.lib:n. Mutta ei toimi. vlinkillä tosiaan ajettava tulee, mutta jumiuttaa systeemin... :-/

 

Jon
Torstaina, 15. toukokuuta, 2003 - klo 22.48:   
Markus, laita varulta se exe sähköpostiosoitteeseeni (tuolla ylempänä jossain), niin voihan sitä piruuttaan kokeilla ihan oikeallakin Amigalla.

 

Markus
Perjantaina, 16. toukokuuta, 2003 - klo 15.28:   
Siirsin PC:ltä omalle aidolle Amigalle ja käynnistin: Ei toiminut.

Mutta täytyyhän täällä foorumilla joku olla, joka osaa tuon linkittämisen tehdä. :)

Eli kerrataan nyt, että tässä on

example1.o, reloc.o, proplayer.o, module.o

Näistä pitäisi saada ajettava ohjelma example1, joka käyttää reloc.o:ssa ja proplayer.o:ssa olevia rutiineita ja soittaa tuota module.o:ssa olevaa objektitiedostoksi muutettua modulea.

Näiden mukaan olen linkittänyt v´libm68k:-hakemistosta amiga.lib, vc.lib ja startup.o-tiedostot.

 

Markus
Perjantaina, 16. toukokuuta, 2003 - klo 15.29:   
Korjataan tuosta ylempää, että siis vlibm68k:-hakemistosta.

 

itix
Lauantaina, 17. toukokuuta, 2003 - klo 1.51:   
Voisihan olla että siellä on jossain virhe? Ei muuta kuin printf() kutsuja koodin sekaan.. ;)

 

Markus
Perjantaina, 13. kesäkuuta, 2003 - klo 14.12:   
...pitkästä aikaa taas tekemässä näitä olennaisia asioita...

Tein konekielisen pikku ohjelman, johon linkitettiin nuo samat reloc.o, proplayer.o ja module.o tiedostot. Toimi. Ohjelma on suora konekielinen versio tuosta yo. C-kielisestä ohjelmasta. Eli tällä perusteella näyttäisi, että ongelma tuon C-kielisen ohjelman kanssa, johon linkittämällä liitetään nuo käytettävät rutiinit ja moduuli, on nimenomaan tuossa linkittämisessä (rutiinit ovat siis ok). Tämän kyllä pitäisi olla ihan perusasioita, mutta enpä koskaan tainut mistään lukea kunnolla näistä perusasioista Amiga-ympäristössä(kään)... (Tuo proto-systeemikin oli minulle uusi asia. Aiemmin kuvittelin, että homma on ok, jos libraries/iff.h-tiedosto sisältää nuo prototiedoston jutskat...)

Onneksi kuitenkin tuo MED-musiikkien soittaminen libraryä käyttäen on hanskassa...

 

Anu Seilonen
Keskiviikkona, 17. tammikuuta, 2007 - klo 19.21:   
Suljettu spammin vuoksi.