Miten AmigaOSin taglistit on toteutet...

Saku-foorumi » Yleinen keskustelu » Viestit 2007 » Viestit 06/2007 asti » Miten AmigaOSin taglistit on toteutettu käytännössä? « Edellinen Seuraava »

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.

Lisää viestisi tähän
Viestisi:
Käyttäjätunnus: Postitus informaatiota:
Tämä on yksityinen keskustelupalsta. Vain rekisteröidyt käyttäjät ja moderaattorit voivat postittaa tänne.
Salasana:
valinnat: Aktivoi URL:t automaattisesti tässä viestissä
Toimenpide: