Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

problem oko zastarelih (obsolete) keyworda

[es] :: C/C++ programiranje :: problem oko zastarelih (obsolete) keyworda

[ Pregleda: 1476 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

alpha
Nemanja Janic
Beograd

Član broj: 5223
Poruke: 35
*.204.eunet.yu



Profil

icon problem oko zastarelih (obsolete) keyworda 01.06.2004. u 01:42 - pre 243 meseci
Prijatelj me je zamolio da mu pomognem oko debugovanja i kompajliranja nekog starijeg programa za koji je dobio source kod. Program je pisan u C-u, i koliko sam video po header fajlovima ima #define-ove i za MSC i za TC (sto predpostavljam da je Turbo C, ali nisam siguran - ipak se ne razumem dovoljno) - konkretno kod includeovanja <mem.h> i <memory.h> ili tako nesto - znaci da prepozna koji je kompajler pa da u zavisnosti od toga uradi include odredjenih header-a, sto mi opet govori da su autori programa racunali na to da se taj kod moze kompajlirati u razlicitim kompajlerima.

Basically, dva problema su nas zakocila:

1.Program na par mesta definise i derklarise jedan broj funkcija koje su manje vise ovog izgleda:

static void interrupt far intXX(int br) // XX je razlicit za svaku funkciju.

Posto smo ubacili program u VS6, i pokusali da uradimo build, kompajler je prvo prijavio nesto kao: "far is an obsolete keyword".

Kada sam pokusao da izbegnem ovo (pretpostavljam da se to "far" odnosi na asm i na stariju memorijsku strukturu, odnosno stranicenje - nesto malo sam o tome citao ali vezano za asembler) tako sto sam izbrisao "far" svuda, ostao je sledeci problem: kompajler se sada zali da u definiciji funkcije ima rec viska, odnosno, ne tretira rec "interrupt" kao keyword, vec kao naziv funkcije.

2. Program koristi strukturu REGS koja nije nigde definisana, pa je naravno kompajler ne prepoznaje.

Pregledao sam sve header fajlove koji su includeovani u kod, ukljucujuci i
<stdlib.h> <stdio.h> <memory.h> <dos.h> i nigde nisam nasao definicije gornjih reci, odnosno "far", "interrupt" i "REGS", sto me navodi na zakljucak da se ovde radi o nekim stvarima koje su verovatno izbacene iz C++ i C (jasno mi je da ovde nije rec o standardnom C-u, pa kad kazem izbacene, mislim na to da tih biblioteka koje su sadrzale te varijante vise nema) - ali sam ipak skloniji da poverujem da je problem u tome sto ja ne znam kako da aktiviram te keyworde, odnosno ne znam u kom se headeru u ovoj varijanti (VS6) koju ja koristim nalaze. Pokusao sam da prokopam po literaturi koju imam i nigde nisam nasao resenje za ovo, odnosno, nigde nisam nasao da neko uopste spominje programiranje interapta u C-u.

Ako bi neko mogao da me uputi ili da pomogne, bio bih zahvalan. Bas me kopka i par dana se mantam sa tim i nikako da resim stvar.

Valjda nisam bio previse konfuzan :)
...znam koliko ne znam... ili ne?
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: problem oko zastarelih (obsolete) keyworda 01.06.2004. u 08:15 - pre 243 meseci
Evo čemu služe dotične ključne reči.

1. far je modifikator koji je (nekada) govorio kompajleru da za definiciju funkcije ili pointera treba da koristi celu segment/ofset adresu. Kako je ovaj način adresiranja napušten, far se može izostaviti (ili uraditi #define far, što radi isto, samo kraće), pod uslovom da se u kodu nigde eksplicitno ne pojavljuje konstrukcija far pointera (što odaju izrazi poput segment << 4 + offset). U tom slučaju imate problem.

2. interrupt ključna reč modifikuje funkciju tako da ona postane primenljiva kao funkcija za obradu prekida. Normalna funkcija (ne-interrupt) sačuva samo okvir steka (SP) a završava se instrukcijom ret. Interrupt funkcija čuva sve registre, a završava se sa iret. Prekidi se kod modernih operativnih sistema obrađuju potpuno drugačije tako da je ova mogućnost stvarno zastarela.

Zaključak: to što imate je mašinski veoma zavisan program koji će teško raditi u danima kada su se kompajleri, operativni sistemi i memorijski modeli skroz promenili. Savet bi bio da probate da nabavite neki od kompajlera kojim su se ti programi prevodili i iskompajlirate njime. Nije preteško doći do Turbo C-a na primer, čak se može preuzeti sa Borlandovog sajta iz „istorijske sekcije“. Prevedite to, a onda se nadajte da će program i dalje raditi u nekom modu za kompatibilnost.

Portovanje programa na novi OS je verovatno suviše veliki posao. Nije nemoguć, samo verovatno preveliki za vaš vremenski budžet pošto biste želeli da program koristite, a ne da se zanimate prepisivanjem.

f
 
Odgovor na temu

alpha
Nemanja Janic
Beograd

Član broj: 5223
Poruke: 35
*.118.eunet.yu



Profil

icon Re: problem oko zastarelih (obsolete) keyworda 04.06.2004. u 01:36 - pre 242 meseci
Ok, hvala puno na savetu.
...znam koliko ne znam... ili ne?
 
Odgovor na temu

[es] :: C/C++ programiranje :: problem oko zastarelih (obsolete) keyworda

[ Pregleda: 1476 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.