| 
| Kirjoittaja | Viesti |  |       
 JPQ
 
 | 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.| Torstaina,  24. toukokuuta, 2007 - klo 10.06: |  | 
 
 
 |  |       
 Joanna
 
 | 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 (??).| Torstaina,  24. toukokuuta, 2007 - klo 11.07: |  | 
 
 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
 
 | Joanna: ehkäpä noin mutta miten ihmeessä sille funktiolle voidaan antaa se noin vain perään lista tyyliin:| Torstaina,  24. toukokuuta, 2007 - klo 11.25: |  | 
 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
 
 | preprocessor toki kirjoitin| Torstaina,  24. toukokuuta, 2007 - klo 14.31: |  | 
   
 
 |  |       
 Joanna
 
 | Piru onko se niin että tuo tagisälä tungetaan raakasti kokonaan stackkiin kutsuvaiheessa vai onko kutsussa vain pointteri alueeseen jonne se on laitettu?| Torstaina,  24. toukokuuta, 2007 - klo 15.38: |  | 
 
 Nimimerkillä siitä on liian kauan kun testasin OS1.4Alphaa
   
 
 |  |       
 Joanna
 
 | 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.| Torstaina,  24. toukokuuta, 2007 - klo 16.19: |  | 
 
 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
 
 | 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.| Torstaina,  24. toukokuuta, 2007 - klo 16.47: |  | 
 
 Taglistit talletetaan yleensä pinoon, muttei se tietenkään ole pakollista.
 
 
 |  |       
 itix
 
 | Tai no, 68k:lla C-kääntäjät rakentavat taglistan yleensä pinoon käyttämällä seuraavaa rakennetta:| Torstaina,  24. toukokuuta, 2007 - klo 16.50: |  | 
 
 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.
 
 
 |  |