Kirjoittaja |
Viesti |
JPQ
| Torstaina, 24. toukokuuta, 2007 - klo 10.06: | | Miten AmigaOSin taglistit on toteutettu käytännössä? eli kun C kieli ei niitä tue. PS. en muista kysyinkö tätä jo joskus mutta.
|
Joanna
| Torstaina, 24. toukokuuta, 2007 - klo 11.07: | | Ulkomuistista.. Taglist (2.x feature) on yhtenäinen muistialue (pointteri alkuun) johon sijoitetaan peräkkäin tagien nimiä ja sisältöjä (long-mittaisia?) niin monta kuin tarve vaatii. Viimeisenä tulee Tag-done (??). Eli siis taglistillä ei ole ennakkoon annettua mittaa tai järjetystä kuten esim structuureilla joita aiemmin (1.x) käytettiin. Structuurien ongelmaksi tuli se että kun uusia ominaisuuksia haluttiin lisätä niin piti keksiä uusia funktoioita kun vanhojen piti olla taakseppäin yhteensopivia josta syystä structien kokoa ei voinut muuttaa.
|
JPQ
| Torstaina, 24. toukokuuta, 2007 - klo 11.25: | | Joanna: ehkäpä noin mutta miten ihmeessä sille funktiolle voidaan antaa se noin vain perään lista tyyliin: HÖ_Korkeus,937,HÖ_Leveys,442,Tag_End
|
Piru
| Torstaina, 24. toukokuuta, 2007 - klo 14.31: | |
Quote:kun C kieli ei niitä tue
C:ssä on parikin tapaa toteuttaa tuo: varargs ja proprocessor-makrot. Ei tuossa siis ole yhtään mitään amiga-specifistä.
|
Piru
| Torstaina, 24. toukokuuta, 2007 - klo 14.31: | | preprocessor toki kirjoitin
|
Joanna
| Torstaina, 24. toukokuuta, 2007 - klo 15.38: | | Piru onko se niin että tuo tagisälä tungetaan raakasti kokonaan stackkiin kutsuvaiheessa vai onko kutsussa vain pointteri alueeseen jonne se on laitettu? Nimimerkillä siitä on liian kauan kun testasin OS1.4Alphaa
|
Joanna
| Torstaina, 24. toukokuuta, 2007 - klo 16.19: | | Ilmankos.. Siinä on molemmat mahdollisia.. Eli kutsuista on (ainakin yleensä) olemassa sekä versio jossa Tagit välitetään suoraan stackissä normaaien parametrien perässä ja sitten sellainen jossa parametrinä annetaan vain pointteri Tagit sisältävään muistilohkoon. Piti ihan erikseen papereista (Eurodevcon Milano 91) tarkistaa kun alkoi epäilyttämään. Pikaisesti katsottuna tuosta rakenteesta tulee ongelmia sinä päivänä jos joku alkaa toteuttamaan 64-bit varianttia käyttiksestä koska tagissa sai olla pointtereita lisädataan.
|
itix
| Torstaina, 24. toukokuuta, 2007 - klo 16.47: | | Ei 64bit ole ongelma. Ainoa ero on että tagit eivät ole enää 32 bitin mittaisia vaan 64 bitin mittaisia. AROS ja MorphOS tukevat sitä lähdekooditasolla käyttämällä IPTR/SIPTR-datatyyppejä joka on 32 tai 64 bittiä arkkitehtuurista riippuen. Taglistit talletetaan yleensä pinoon, muttei se tietenkään ole pakollista.
|
itix
| Torstaina, 24. toukokuuta, 2007 - klo 16.50: | | Tai no, 68k:lla C-kääntäjät rakentavat taglistan yleensä pinoon käyttämällä seuraavaa rakennetta: void Foobar(APTR obj, ULONG tags, ...) { FoobarA(obj, &tags); } void main(void) { Foobar(obj, 1, 2, 3, 4, 5, 6, 7, 8, TAG_DONE); } Mutta tuo toimii vain 68k:lla ja noin käytännössä se on useimmiten Amigalla toteutettu.
|
|