unknown.1ppekovic,
A? ne, B? ne, C???? Daaaaa, CCCC, zašto kako gde šta i sva slična pitanja
komentare, predloge i sl. ostavite ovde.
Paya
unknown.2djelovic,
Ima li nacina da se u TC++-u nekom pragmom iskljuci upozorenje u jednom
redu. Recimo ako imate legalnu liniju "if (*q = *p)", kompajler ce tu stalno
davati upozorenje "possibly incorect assignment in function xxxx", sto ne smeta
mnogo, ali...
unknown.3ppekovic,
Kako da dobijem segment početka aktivne video strane???
Paya
unknown.4igor.mil,
-> #2, djelovic> Ima li nacina da se u TC++-u nekom pragmom iskljuci upozorenje u jednom
> redu. Recimo ako imate legalnu liniju "if (*q = *p)", kompajler ce tu
> stalno davati upozorenje "possibly incorect assignment in function xxxx",
> sto ne smeta mnogo, ali...
Ne znam TC++, posto ga na zalost nemam, ali znam kako je u obicnom TC.
#pragma warn -pia /* iskljuci navedeno upozorenje */
if (*q = *p) {
#pragma warn +pia /* ponovo ukljuci upozorenje */
. . .
"pia" je oznaka upozorenja "possibly incorect assignment". Pogledaj
help za #pragma. Pomocu njega se mogu selektivno iskljucivati i sva
ostala upozorenja i tamo ces naci njihove oznake.
Igor
unknown.5glisin,
-> #2, djelovic
-> Ima li nacina da se u TC++-u nekom pragmom iskljuci upozorenje...
Eh! Ne znam da li se može isključiti, ali mogu nešto drugo da
prokomentarišem. TC++ je dovoljno pametan da ta upozorenja ne puca bez veze,
nego dobro "razmisli" šta će da kaže. Ukoliko upozorenja tog tipa ignorišeš,
program će ti proraditi uz malo nameštanja i radiće lepo iz ko zna kojih
razloga. Međutim, pokušaj prenosa na drugi kompajler će dati neko slično
upozorenje, ali program uopšte ne mora raditi kako treba. To se čak dešava i
sa EXE-om ako se nosi na drugu mašinu.
Meni se dešavalo da kompajliram program, on da upozorenje, ja ga ignorišem,
startujem i neće, lupa gluposti. Onda se vratim, malo modifikujem sors, opet
neko upozorenje, ali stvar proradi kako treba. To recimo radim na 386. E,
onda mi padne na pamet da nekome pokažem EXE na 386SX, startujem i cvrc!
Opali neku grešku, sj*be sistem ili nešto drugo. Pomislim da je nešto otišlo
na disketi, vratim kod na izvornu mašinu, kad ono sve u redu. E onda se
potrudim da napišem stvar tako da ne dobijem upozorenje, i sve ide kako treba.
Isto se dešava ako kod recimo prenesem na ATARI TC 2.0 ili UNIX-ov C. Lupa,
neće, prijavi upozorenje, muči se, ne radi kako treba, slupa memoriju. A ako
kod koji nije davao upozorenja na PC-u, probam na ST TC-u ili UNIX C-u, ide
lepo gotovo sigurno.
Zato, svima koji rade na TC++ preporučujem da ne pišu programe o kojima će
pričati da "pojma nemam kako, ali mi radi" ;-))) i koji im izdaju gomilu
upozorenja, nego da čiste sve od upozorenja, što će obezbediti bolju
prenosivost kako izvorne, tako i izvršne verzije. To je moje iskustvo. Ako
neko ima nešto da popljuje ;-) ili dopuni, samo napred. C je pravljen da
njegovi sorsovi budu prenosivi, pa ovo pitanje nije za zanemarivanje.
▀▀▀ ĎÍ─ĚÍ─ĚĎ Ď ▀▀▀
▀▀▀ ║║ Ě║ ĚËĎŻ ▀▀▀
▀▀▀ đË─ŻË─Ż đ ▀▀▀
unknown.6ljupco,
Probajte ovo:
#include <stdio.h>
char c;
void main(){
switch(c=getchar()){
case 'a': printf("aaaa\n"); break;
defoult : printf("****\n");
}
}
Q: Zvezdice ("****") ne dobijte nikad. Kompajler ne javlja gresku.
A: Nije "defOult" nego "defAult".
Q: Zasto kompajler (tcc) ne prijavljuje nista?
unknown.7zkehler,
-> #5, glisinSlažem se sa Iggyem za upozorenja u kompajliranju C i C++ programa.
Dok se nisam par puta opekao sa programima koji su bili prevedeni
sa upozorenjima (prenos PC_XT<->PC_AT<->VAX), nisam na to ni
obraćao pažnju. Nakon toga, stekao sam naviku da uključim sve
moguće warninge.
ZK
unknown.8ppekovic,
-> #6, ljupco>>Probajte ovo:
>>#include <stdio.h>
>> char c;
>> void main()
>> š
>> switch(c=getchar())
>> š
>> case 'a': printf("aaaaĐn");
>> break;
>> defoult : printf("****Đn");
>>
>> ć
>>
>> ć
>>
>>
>>Q: Zvezdice ("****") ne dobijte nikad. Kompajler ne javlja
>> gresku.
>>A: Nije "defOult" nego "defAult".
>>
>>
>>Q: Zasto kompajler (tcc) ne prijavljuje nista?
Umesto defoult možeš da staviš šta god hoćeš i
kompajler neće prijaviti grešku. Razlog je jednostavan, on
defoult smatra za labelu (za goto), koju naravno nikad ne
izvrši. MSC kopajler će sa /W4 (warning level 4) dati
upozorenje da se komanda nikada neće izvršiti.
Paya
unknown.9bjankovic,
-> #6, ljupco> Probajte ovo:
>
> #include <stdio.h>
> char c;
> void main()š
> switch(c=getchar())š
> case 'a': printf("aaaaĐn"); break;
> defoult : printf("****Đn");
> ć
> ć
>
> Q: Zvezdice ("****") ne dobijte nikad. Kompajler ne javlja gresku.
> A: Nije "defOult" nego "defAult".
>
> Q: Zasto kompajler (tcc) ne prijavljuje nista?
Zato što nema greške (defoult je labela):
#include <stdio.h>
char c;
void main()
š
switch(c=getchar())
š
case 'a': printf("aaaaĐn"); break;
defoult : printf("****Đn");break;
default: goto defoult;
ć
ć
unknown.10djelovic,
TC++ mi stalno kiksira na linijama tipa: scanf ("%f", r); i to sa greskom
floating point formats not linked?! printf normalno radi. Pregledao sam celu
razvojnu okolinu (ih, al ga srocih) i nigde nisam nasao opciju koja bi
ulinkovala FP formate... postajem ocajan...
unknown.11ppekovic,
-> #10, djelovic>> TC++ mi stalno kiksira na linijama tipa: scanf ("%f", r); i to sa greskom
>> floating point formats not linked?! printf normalno radi. Pregledao sam
>>celu razvojnu okolinu (ih, al ga srocih) i nigde nisam nasao opciju koja
>>bi ulinkovala FP formate... postajem ocajan...
E to zavisi kakav ti je program. Naime, pre izvesnog vremena sam se ja
petljao nešto sa MSC-om i napisao jednostavan program koji je učitavao broj u
pokretnom zarezu, pa sam onda petljao nešto sa zajedničkim memorijskim zonama
da bi taj broj rastavio na činioce itd. itd. da ne tupim dalje, ukratko, sa tim
brojem dalje nisam radio baš ništa, tj. nigde u programu se nisu pojavile
operacije nad brojevima u pokretnom zarezu. E onda je tu optimizator uradio
svoj posao i lepo konstatovao da nema nikave potrebe da ulinkuje podršku za rad
sa PZ brojevima i naravno javila se greška slična kao tvoja. O ovome je pisao i
zzivotic u računarima u rubrici "moja škola c-a".
Inače, ovo važi samo za scanf, tj. ako se u programu pojavi printf("%f",r);
a nigde nema nikavih operacija na PZ brojevima sve će biti u redu.
Mislio sam da je ovo problem samo sa MSC-om kad ono vidi ni Borland ne maši
tu caku.
Zaključak: Učitelju, učitelju, BORLAND OPE PREPISUJE ;)))))
Paya
unknown.12djelovic,
-> #11, ppekovic Ma nebuloza! Kao poslednji idiot sam zaboravio da deklarisem p kao float*,
tj. deklarisao sam ga kao float, a TC++ ga upropasti. Treba brate napraviti
gresku: "To sto ste zadali kao format ne slaze se sa promenjljivima, ali cu ja
to ipak iskompajlrati, tek da te nerviram. A i ova linija je verovatno previse
duga da bi je procitao iz integrisane okoline ovog kompajlera... |)". Tj. ne
gresku nego warning... Mene je razmazio C++, jer sada u svojim programima uvek
pisem float &p, pa nek C++ razbija glavu... Back to K&R.
P.S. Prvo nisam hteo da napisem da sam napravio ovakvu banalnu gresku (blam
me), ali kada si poceo da mi diras BORLAND...
P.P.S. Ocekujte za jedno desetak dana oficijelne Borlandove patch-eve za TC++.
Ja nisam primetio neki veci bug, osim u exit f-ji. Doduse, ja kada mi program
ne radi ne ubacujem to u debugger vec sednem pa ga napisem iz pocetka |)).
unknown.13glisin,
-> #10, djelovic
-> Pregledao sam celu razvojnu okolinu (ih, al ga srocih) i nigde nisam
-> nasao opciju koja bi ulinkovala FP formate... postajem ocajan...
Ih, nisi dobro gledao. Ima jedna opcija (čini mi se baš u linker opcijama)
koja nudi izbor: FLOATING POINT: NONE, EMULATION, 8087/80287. Ja sam imao
problem sa printf-om, bio mi je na NONE (ista greška) a ti kažeš da to radi.
žudno, ali svejedno probaj, ima negde to podešavanje.
▀▀▀ ĎÍ─ĚÍ─ĚĎ Ď ▀▀▀
▀▀▀ ║║ Ě║ ĚËĎŻ ▀▀▀
▀▀▀ đË─ŻË─Ż đ ▀▀▀
unknown.14glisin,
-> #12, djelovic
Eto, poslah odgovor a vidim da si rešio stvar.
Nema veze, biće korisno ako se neko za.ebe sa istom cakom i ostavi NONE.
▀▀▀ ĎÍ─ĚÍ─ĚĎ Ď ▀▀▀
▀▀▀ ║║ Ě║ ĚËĎŻ ▀▀▀
▀▀▀ đË─ŻË─Ż đ ▀▀▀
unknown.15mkehler,
-> #10, djelovic▄▀ TC++ mi stalno kiksira na linijama tipa: scanf ("%f", r); i to sa greskom
▄▀ floating point formats not linked?! printf normalno radi. Pregledao sam
▄▀ celu
/* varanje kompajlera da bi linkovao floating point konverziju */
float linkfloat (float *f)
š
float g = *f;
linkfloat (&g);
ć
Ova f-ja koristi fp broj kao lokalnu promenljivu i uzima adresu
te promenljive. Ova funkcijica je predložena od Borlanda u njihovim
"novinama" Hot topics for TC users (neko reče da Borland prepisuje ;)).
Linkfloat poziva sam sebe, pa ga ne treba nigde pozivati, nego samo
dodati (na kraj, npr.) u program. Zauzima samo par byte-a
ram-a i nikad se ne poziva iz programa pa ti neće poremetiti brzinu
tvog programa. Stvar radi, istina nisam probao TC++, ali TC da.
MK
unknown.16aradovanovic,
Da li je neko primetio da funkcija cprintf u Turbo C-u ne radi
korektno? Desava se vrlo retko i potpuno neregularno (posebno na EGA
karticama) pa ne uspevam da uhvatim u cemu je stvar.
unknown.17djelovic,
Achtung! Achtung! Ako gajite pilice, pazite da vas PC ne bude previse blizu
kavezu u kome se zivina nalazi, inace ce pilici uginuti!
Hint: Procitajte help TC++a za komandu nosound.
unknown.18ppekovic,
-> #17, djelovic>> Achtung! Achtung! Ako gajite pilice, pazite da vas PC ne bude previse
>>blizu kavezu u kome se zivina nalazi, inace ce pilici uginuti!
>>
>>Hint: Procitajte help TC++a za komandu nosound.
;)))) Eto, bar neke koristi da ima od tog Borlanda, da se zabavimo malo.
Ajde ako ti nije teško prenesi taj deo iz priručnika ovde, ako je toliko
zanimljiv.
Paya
unknown.19igor.mil,
-> #15, mkehler> /* varanje kompajlera da bi linkovao floating point konverziju */
Ja sam na "floating point formats not linked" gresku naisao u
sledecem slucaju:
1. neki od .OBJ modula je uradjen u assembleru (ne moraju raditi
nikakve FP operacije); i
2. prevodjenje i linkovanje se vrsi sa komandne linije ("tcc",
"tlink"); naravno, "emu.lib" i "math?.lib" se
eksplicitno navode u pozivu "tlink"-a.
Sve lepo radi do prvog "printf" poziva sa float argumentom.
Ubacivanje koda koji si naveo u svojoj poruci ne resava stvar (a bas
sam se ponadao, ovo me muci vec dugo vremena).
Ako se prevodi iz integrisane okoline sve lepo radi, a navedeni kod
(linkfloat) nije potreban.
Pretpostavljam da se radi o bug-u. Nasao sam neke patcheve
("tc2pat2.arc" na Trickle-u) u kojima je ispravka ove greske, ali na
zalost, radi samo za verziju 2.00, dok je moja verzija 2.01. Ima li
neko patch za 2.01?
Igor
unknown.20djelovic,
-> #18, ppekovic/* Emits a 7-Hz tone for 10 seconds.
True story: 7 Hz is the resonant frequency of a chicken's skull cavity.
This was determined empirically in Australia, where a new factory
generating 7-Hz tones was located too close to a chicken ranch:
When the factory started up, all the chickens died.
Your PC may not be able to emit a 7-Hz tone.
*/
Sta je sledece? Da li ce umesto greske "Too many errors in file XXXX.C" da
uvedu nesto kao: "I ti si u ovome sranju hteo da spalis moga dedu?" A umesto
upozorenja "Unreachable code in function xxxxx" da uvedu: "Pa njemu se i ne
isplati da izlazi odatle."
Hint: Kome je moj komentar ostao nejasan neka odgleda Maratonce. Ukusan ovaj
Pantelija.
unknown.21bulaja,
-> #18, ppekovic│Eto, bar neke koristi da ima od tog Borlanda ...
└───
Uaaaaa protekcija! Ocemo nezavisnu konferenciju!
Necemo favorizovanje Microsofta od strane moderatora ;).
PS Microsoft - sa njima nema neizvesnosti.
PPS Borland C je bolji od Microsoft C-a ;)
unknown.22mirkot,
-> #20, djelovic██ Sta je sledece? Da li ce umesto greske "Too many errors in file XXXX.C"
██ da uvedu nesto kao: "I ti si u ovome sranju hteo da spalis moga dedu?" A
██ umesto upozorenja "Unreachable code in function xxxxx" da uvedu: "Pa
██ njemu se i ne isplati da izlazi odatle."
Tata, vidi, gospodin DJELOVIC, sta mu je? :)))))
unknown.23ilazarevic,
-> #22, mirkot █ Tata, vidi, gospodin DJELOVIC, sta mu je? :)))))
Sad mu nije ništa, zgazio si ga ko zeca! :)))))))
unknown.24dnikolic,
Pitanje sam vec postavio u staroj pc.soft ali konkretnog odgovora nema...
Dakle evo sta je problem. Moze li se u TC raditi, brate, sa celih 640k ili
ti svom raspolozivom osnovnom memorijom? Recimo zatrazim od sistema 320K i
on mi vrati pokazivac na to podrucje. Pokusavao sam sa kombinacijama far-
malloc, farcoreleft, farfree ali ne radi kako treba... Voleo bih i neki
primer na desetak linija :)))
Kakav je PRECIZNO postupak za pravljenje svojih LIB biblioteka u TC-u?
Ja radim sa verzijom 2.0 ( ne volim objektne baljezgarije ). Recimo, napisem
neku rutinicu, i u daljem radu mi je linker automatski linkuje u glavni
program.
Eto to je sve.
dn
unknown.25dnikolic,
-> #2, djelovic>> redu. Recimo ako imate legalnu liniju "if (*q = *p)", kompajler ce tu
>> stalno davati upozorenje "possibly incorect assignment in function xxxx",
>> sto ne smeta
hmmm... dali ovde mozda treba da stoji: if(*q==*p)... ??
unknown.26zkehler,
-> #19, igor.milŔ Ja sam na "floating point formats not linked" gresku naisao u
Ŕ sledecem slucaju:
Ŕ
Ŕ 1. neki od .OBJ modula je uradjen u assembleru (ne moraju raditi
Ŕ nikakve FP operacije); i
Ŕ 2. prevodjenje i linkovanje se vrsi sa komandne linije ("tcc",
Ŕ "tlink"); naravno, "emu.lib" i "math?.lib" se
Ŕ eksplicitno navode u pozivu "tlink"-a.
Rešenje sa linkfloat() ne radi uvek. Greška se pojavljuje
ako se za linkovanje koristi TLINK umesto rada u integrisanoj
okolini.
Uputstvo za Turbo C kaže da je generalni format naredbe za
linkovanje ovakav:
TLINK c0? objs,exeŠ,mapĆ,libs float math? c?
Ne kaže, međutim, da je važan *redosled* kojim se bibiloteke
linkuju. Greška se javlja kada god se c? biblioteka navede
pre math? biblioteke.
Ispravna naredba je, dakle:
TLINK c0? objs,exeŠ,mapĆ,libs math? c?
i to tažno u tom redosledu.
Ŕ Ako se prevodi iz integrisane okoline sve lepo radi, a navedeni kod
Ŕ (linkfloat) nije potreban.
Integrisana okolina automatski linkuje biblioteke po pravilnom
redoledu, pa onda nema problema sa linkovanjem floating point
konverzije.
ZK
unknown.27zkehler,
-> #21, bulajaŔ PPS Borland C je bolji od Microsoft C-a ;)
Slažem se ;)
ZK
unknown.28ppekovic,
-> #25, dnikolic>>>> redu. Recimo ako imate legalnu liniju "if (*q = *p)", kompajler ce tu
>>>> stalno davati upozorenje "possibly incorect assignment in function xxxx",
>>>> sto ne smeta
>>
>>hmmm... dali ovde mozda treba da stoji: if(*q==*p)... ??
Pa zavisi šta čovek hoće. U prvom slučaju da grana će biti ako je *P=null.
U drugom slučaju, koji si ti naveo, grana da će biti u slučaju kada sadržaj
adrese na koju pokazuje q bude jednak sadržaju adrese na koju pokazuje p.
Uz to, u prvom slučaju će se vršiti još i dodela, a u drugom neće.
Sve u svemu i prvi i drugi primer su potpuno legalni s tim što rade i
potpuno različite stvari ;)))
Paya
unknown.29ppekovic,
-> #27, zkehler>>Ŕ PPS Borland C je bolji od Microsoft C-a ;)
>>
>>Slažem se ;)
Hmmmm, posle ovakvih argumenata ozbiljno se razmišljam da pređem na BC ;)))
Paya
unknown.30mjova,
-> #21, bulaja> PPS Borland C je bolji od Microsoft C-a ;)
zar to treba dokazivati? :)
unknown.31igor.mil,
-> #26, zkehler> Ispravna naredba je, dakle:
>
> TLINK c0? objs,exeS,mapC,libs math? c?
>
> i to tazno u tom redosledu.
Najzad da mi neko kaze o cemu se radi. Nikad se ne bi setio da
redosled biblioteka ima uticaja.
To sr* me je svojevremeno toliko mucilo da sam morao da naucim da
radim sa float brojevima u masinskom obliku...
unknown.32igor.mil,
-> #24, dnikolic> Kakav je PRECIZNO postupak za pravljenje svojih LIB biblioteka u TC-u?
> Ja radim sa verzijom 2.0 ( ne volim objektne baljezgarije ). Recimo,
> napisem neku rutinicu, i u daljem radu mi je linker automatski linkuje u
> glavni program.
Ne mozes napraviti svoju biblioteku (neka se zove MOJA.LIB) iz koje ce
se *automatski* linkovati moduli. Da bi se ona koristila moras da
napise .PRJ u kojem ce biti linija npr. C:\TC\MYLIB\MOJA.LIB (ovo
se odnosi samo na integ. okolinu, sa komandne linije se i onako sve
bibloteke moraju explicitno navesti). Ako hoces automatsko linkovanje,
onda .OBJ modul funkcije koju si napisao treba da dodati u standardne
biblioteke (CS.LIB, CM.LIB, CL.LIB itd).
Postupak pravljenja biblioteka je sledeci:
Nnapises funkciju FUNK.C.
Prevedes sa:
TCC -c FUNK.C
Dodas modul u svoju biblioteku sa:
TLIB MOJA, +FUNK
Ako hoces da se automatski linkuje, t.j. da postane deo standardnih
funkcija onda:
TLIB CS, +FUNK
Sada FUNK postaje deo standardne datoteke, ali samo u "small"
memorijskom modelu. Ako hoces npr. i u "large" modelu onda treba:
TCC -c -ml FUNK
TLIB CL, +FUNK
Modul se brise iz biblioteke sa:
TLIB MOJA, -FUNK
Zamena modula FUNK novom verzijom se radi sa:
TLIB MOJA, +-FUNK
U ostalom, zadavanje komande TLINK ber argumenata daje kratak help.
Sto se tice rada sa velikim blokovima memorije, s obzirom na shit
arhitekturu Intel procesora plasim se i da mislim o tome :)
Predvidjeno je da resenje za to budu huge pointeri ali kako se to
tacno radi, zaista mi nije jasno. Verovatno treba explicitno petljati
sa segmetnima i ofsetima, sto po meni predstavlja grubo narusavanje
koncepcije bilo kog viseg programskog jezika. Bas bih voleo da neko
ko je uspeo da nesto na tome uradi iznese svoja iskustva. Ja sam
jednom sa farmalloc rezervisao blok od oko 450K, i posle zavrsetka
programa (blok je oslobodjen sa farfree) racunar je ostao u stanju u
kojem je na svaku naredbu odgovarao sa "out of memory". Intel i
MSDOS... ;< Gde se samo nadjose ?
Pozdrav, Igor
unknown.33djelovic,
-> #25, dnikolic>hmmm... dali ovde mozda treba da stoji: if(*q==*p)... ??
Ne, o tome se i radi. Kada namerno stavim = on mi svaki put
javlja "possible ..." sto ja ne zelim. Taj je problem resen, ali
ostaje da je ANSI standard upropastio taj divni jezik - menjali su
optimizaciju za citljivost. Fala bogu da to moze da se iskljuci, a
ANSIjevci neka se bave paskalom i ostalim jezicima za zderace pite
|).
unknown.34ppekovic,
-> #33, djelovic>> Ne, o tome se i radi. Kada namerno stavim = on mi svaki put
>>javlja "possible ..." sto ja ne zelim.
Zar u tom BC++ -u ne postoje w. levels. Na MSC-u ih ima 6. Nulti ti
isključuje sve warninge, dok vaj najviši prijavljuje bukvalno sve i svašta.
Paya
unknown.35nkbog,
-> #34, ppekovic>>> Ne, o tome se i radi. Kada namerno stavim = on mi svaki put
>>>javlja "possible ..." sto ja ne zelim.
> Zar u tom BC++ -u ne postoje w. levels. Na MSC-u ih ima 6. Nulti ti
> iskljucuje sve warninge, dok vaj najvisi prijavljuje bukvalno sve i svasta.
Naravno da postoje, ali nisu "varning levelsi" (koja kovanica:) vec je
moguce iskljucivanje svakog pojedinog upozorenja (ili svih). (Ja bi licno
voleo kad bi postojala kombinacija "levelsi" + pojedina upozorenja). Kontrola
se vrsi preko "#pragma warn" u programu ili "-w" opcije. U helpu je spisak
skracenica za upozorenja ("#pragma option -w-pia"
Inace postojanje ovog upozorenja nije bez razloga. Radi se o jednoj od
najcescih gresaka programera u C-u ("=" umesto "==").
NB.
unknown.36maleksic,
-> #19, igor.mil>> 2. prevodjenje i linkovanje se vrsi sa komandne linije ("tcc",
>> "tlink"); naravno, "emu.lib" i "math?.lib" se
>> eksplicitno navode u pozivu "tlink"-a.
******
A zasto zaboga linkujes direktno sa 'tlink'-om kad vec sve radis
na C-u?
Odavno nisam radio sa TC-om (razlog: MSC je 1000 puta bolji i
10000000 puta pouzdaniji :), ali mislim da je mnogo lakse linkovanje
pomocu 'tcc'-a (tcc ime1.obj ime2.obj ime3.lib ... => rezultat ime1.exe?
A i tlinker opcije mozes da prosledis, vidi tcc help).
U 'tcc' liniju ubacis jos switcheva po volji (npr. za FP math type itd.)
i nema zime? Iste FP switcheve moras valjda prethodno da zadas i prilikom
compilacije, nisam se mnogo zezo stim.
Uzgred BR, i ja sam primetio da ponekad TC i TC++ lepo(?) prevedu iz onog
integrisanog sr*nja, a posle za*ebavaju kad prevodis iz commandne
linije. Nisam se nimalo zacudio, ovakve Borlandove gluposti odavno su
me naterale da predjem na MSC ;>>>
unknown.37maleksic,
-> #31, igor.mil>> Najzad da mi neko kaze o cemu se radi. Nikad se ne bi setio da
>> redosled biblioteka ima uticaja.
Eh, nije to nista.
Zbog takvih i slicnih stvari prava je umetnost ulinkovati nesto pomocu
UNIX-ovog 'ld' linkera (tj. "link-editora", pomisli covek da je to
neki linker koji samo sto ne kuva kafu, al ne ide sve to tako jednostavno)
P.S.
Zato na UNIX-u linkujem sa 'cc' (isto sto i 'cl' ili 'tcc' na DOSu)
unknown.38igor.mil,
-> #36, maleksic> A zasto zaboga linkujes direktno sa 'tlink'-om kad vec sve radis
> na C-u?
Neophodno je kada se neki moduli prevode necim drugim, assembler na
primer. tcc, na zalost, nije tako pametan kao Unix cc da sam poziva
assembler kada treba.
unknown.39spantic,
Evo molbe za pomoć jednog mog prijatelja. Ako neko može da pomogne, neka
priskoči. Možda ga tako i nagovorimo da uzme modem , :).
===============================================================================
Radim jedan program sa turbo C_om i db_FILE paketom za mreznu bazu
podataka.
Pojavljuju mi se neobicni problemi koji se ogledaju u tome da
program sve uradi pa se onda zaglavi na izlazu bez ikakvog komentara
ili da cak program zavrsi sa radom a da se na sledecoj komandi sve zaglavi
kao u goreopisanom slucaju.
Ranije sam imao problem slicnog oblika koji je nestao kada sam pri
izlasku iz programa stavio eksplicitno zatvaranje koriscenih datoteka.
Ovo me podseca na probleme u pascalu kada se prode po nekom pointeru preko
null pointera i onda nesto upise- gde se sve u C-u mogu desiti takve stvari?
Program treba da vrsi prevodjenje jednog pseudojezika u model entitet-veza
pa tako za slucaj gresaka koristim prljavstinu tipa SETJUMP-LONGJMP. Sta sve
moze da se desi kao rezultat toga.
Jos jedna cudnovata osobina ovog insekta je da se pojavljuje zavisno od
ulazne datoteke. Za odredjen model ne crkava, a crkne kada mu se doda npr
jos jedan entitet.
Svi ovi problemi su se pojavljivali pri prevodjenju iz komandne linije
koje je bilo definisano u primeru datom uz db_FILE. Uspeo sam da program
prevedem kao PROJECT u integrisanom turbo C-u i tada je sasvim lepo proradio.
Posto nisam ukapirao zasto je sada proradio jos uvek ocekujem da crkne onda
kada mi to bude najmanje odgovaralo.
Molim moguce odgovore ili pomocne informacije na bilo koje od gore
eksplicitno ili implicitno postavljenih pitanja.
Unapred hvala
Matos Gilberto Augusto
unknown.40maleksic,
-> #39, spanticEh, tvom prijatelju nema pomoci!
Jadnik koristi Turbo C, tu nema leka.
Ustvari ima! Neka odma' predje na Microsoft C!!
unknown.41maleksic,
-> #38, igor.mil>> Neophodno je kada se neki moduli prevode necim drugim, assembler na
>> primer. tcc, na zalost, nije tako pametan kao Unix cc da sam poziva
>> assembler kada treba.
Gwach!
Izgleda da me nisi razumeo. Govorio sam o *linkovanju* pomocu
tcc, bez ikakvog prevodjenja (mada i ono moze da se ubaci). Evo
jos jednom primjer (note: svi argumenti su .OBJ ili .LIB fajlovi):
tcc ime1.obj ime2.obj asmcode.obj ime3.lib ... (=> rezultat ime1.exe?)
E, ova komanda sada linkeru prosledjuje navedene argumente & svu
onu boraniju od systemskih C-biblioteka, i sve to sa pravilnim
redosledom. Module (OBJ/LIB) nastale prevodjenjem asemblerskog
sourcea mozes bez ikakvih problema da ukljucujes.
A sto se tice onih dosadnih sistemskih C-biblioteka, to se valjda sve
lepo definise pomocu tcc switcheva. Ako stavis npr. -mh switch,
pri linkovanju (ne govorim o compiliranju!) bice koriscene
biblioteke za huge model itd. (ne znam da li je ovo neophodno,
ali valjda ne smeta).
Posto ipak ne radim na TC-u moguce je da sam napisao poneku glupost,
ali Borland i ne zasluzuje neku veliku paznju ;>>
unknown.42zkehler,
-> #39, spanticŔ Radim jedan program sa turbo C_om i db_FILE paketom za mreznu bazu
Ŕ podataka.
Ŕ Program treba da vrsi prevodjenje jednog pseudojezika u model
Ŕ entitet-veza
Pre nego što razmislim o rešenju, kod koga od profesora radiš to?
Je li ETF ili FON?
Na ETF-u sam radio pretvaranje XER modela u relacionu bazu u SQL-u.
Pisao sam sam u Turbo C-u. Nisam koristio setjmp() i/ili
longjmp(), već sam kod greške prenosio iz sveke rutine, sve do
main(), pa tek onda u main() zvao rutinu koja prepoznaje grešku.
ZK
unknown.43zkehler,
-> #40, maleksicŔ Eh, tvom prijatelju nema pomoci!
Ŕ Jadnik koristi Turbo C, tu nema leka.
Ŕ Ustvari ima! Neka odma' predje na Microsoft C!!
maleksicu, šovinisto nijedan! Pa ovakve poruke su za FORUM,
a ne za konferenciju u kojoj se mozak koristi za malo
inteligentnije stvari od pljuvanja.
ZK
P.S. Opšta nit poruke je ;) (da ne bi bilo zabune)
unknown.44spantic,
-> #40, maleksic>> Eh, tvom prijatelju nema pomoci!
>> Jadnik koristi Turbo C, tu nema leka.
>> Ustvari ima! Neka odma' predje na Microsoft C!!
Moj prijatelj ima životinjicu zvanu Toša (sa 386, EGA, laptop, ali 40MB HD).
Tako da nije za čuđenje zašto koristi TC 2.0. :)
Hajde, TC programeri! Probaćemo kod mene sa MSC 6.0 u međuvremenu.
unknown.45spantic,
-> #42, zkehler>> Pre nego što razmislim o rešenju, kod koga od profesora radiš to?
>> Je li ETF ili FON?
>>
>> Na ETF-u sam radio pretvaranje XER modela u relacionu bazu u SQL-u.
>> Pisao sam sam u Turbo C-u. Nisam koristio setjmp() i/ili
>> longjmp(), već sam kod greške prenosio iz sveke rutine, sve do
>> main(), pa tek onda u main() zvao rutinu koja prepoznaje grešku.
ETF, kod Mišića.
unknown.46zkehler,
-> #45, spanticŔ >> Pre nego što razmislim o rešenju, kod koga od profesora radiš to?
Ŕ >> Je li ETF ili FON?
Ŕ >>
Ŕ >> Na ETF-u sam radio pretvaranje XER modela u relacionu bazu u SQL-u.
Ŕ >> Pisao sam sam u Turbo C-u. Nisam koristio setjmp() i/ili
Ŕ >> longjmp(), već sam kod greške prenosio iz sveke rutine, sve do
Ŕ >> main(), pa tek onda u main() zvao rutinu koja prepoznaje grešku.
Ŕ
Ŕ ETF, kod Mišića.
Vidi molim te. Pa i ja sam radio kod Mišića, a mentor mi je bio
Branko Lazareviš sa FON-a, koji je do prošle godine predavao
Baze podataka.
Ako si zainteresovan, možeš da vidiš program. Ima ga sigurno i Mišić,
bar u vidu knjižurine sa mojim diplomskim (složeno u TeX-u).
ZK
unknown.47zkehler,
Moram da napišem par rutina koje bi trebali da menjaju
paletu na VGA karti, odnosno da mogu da izaberem
8 boja pozadine i 16 boja karaktera iz većeg skupa
boja. Ideja je rođena gledajući user interface na
Norton 6.0, PC Tools 7.0 i sličnim paketima.
Pisaću u C-u (ili možda asembleru), a rutine treba da se
koriste u Clipper 5.01 programima.
Gde da pogledam kako se to radi? Ima li neko neke primere
rutina koje se bave time?
ZK
unknown.48ppekovic,
-> #47, zkehler>> Moram da napišem par rutina koje bi trebali da menjaju
>> paletu na VGA karti, odnosno da mogu da izaberem
>> 8 boja pozadine i 16 boja karaktera iz većeg skupa
>> boja. Ideja je rođena gledajući user interface na
>> Norton 6.0, PC Tools 7.0 i sličnim paketima.
Postoji program koji se zove aaa_vga koji radi upravo to što
želiš. Program je ovde na sezamu. Međutim, pošto želiš:
>> Pisaću u C-u (ili možda asembleru), a rutine treba da se
>> koriste u Clipper 5.01 programima.
e onda baci lepo Borland C ;)))) i uzmi MSC 6.00. Tamo imaš
čitav set naredbi za rad sa paletama boja. Sve je veoma, veoma
jednostavno, ukratko, napraviš jedan long niz i taj niz proslediš
funkciji _remapallpalette() i gotovo. Naravno, možeš i svakoj
pojedinačnoj boji da menjaš long vrednost sa _ramappalette().
Struktura long vrednosti za boju je sledeća:
blue byte green byte red byte
00BBBBBB 00GGGGGG 00RRRRRR
high ----------------------> low order
Predlog: Uzmi aaa_vga, pa našteluj boje kako ti odgovaraju. Šta
će ti aaa_vga? Pa zato što ti on daje vrednosti plave, zelene i crvene
boje. Onda lepo uzmeš te vrednosti, po gornjoj šemi napraviš longove i
gotovo.
MEĐUTIM, (rano si se obradovao ;))) ) pošto to želiš da korstiš u
Clipper 5.01 programima da te obradujem da MSC 6.0 i Clipper neće
zajedno da rade kako treba, tj. bar neće sve. Ovo sam pročitao po svim
mogućim BBS-ovima i mrežama al nisam verovao pa sam lomio glavu xxx dana
da nateram da proradi i eto, ne radi. Ipak, kao što rekoh, ako se držiš
nekih pravila, radiće:
Pravilo: programe piši po ANSI C standardu, a kada poželiš da uradiš
nešto kao: _remappalette() i sl. e onda uzmi u ruke listu interapta i
uradi to isto ali na malko nižem nivo. Onda će sve da proradi.
Dakle, u tvom slučaju, moraćeš da koristiš:
INT 10H f:10H pf:10H
postavljanje kolor_registara
AH=10H
AL=10H
BX=kolor registar
CH=vrednost zelene boje
CL=plave
DH=crvene
vrednosti boja se izražavaju u procentima, s tim što se mora
paziti da zbir bude 100%. Poziv ovog int-a je ekvivalent goreopisanoj
funkciji _remappalette().
Zaključak: za ovakve stvari uzmi assembler! (zbog veličine kod-a).
Paya
P.S. Znam da će Borlandovci odmah da skoče zbog onog "baci lepo Borlnad
C ...", ali da ih preduhitrim, znam da tih funkcija ima i u BC-u ;))
unknown.49zkehler,
-> #48, ppekovicHvala Payo! Nemam predrasuda prema MSC, jedino sam više
koristio TC i TCPP.
Javiću rezultate.
ZK
unknown.50vilic,
Hi,
da li se secate programa core-war. Ovo je jedan oblik
istog programa samo se programi za borce pišu u cccc-u.
bye
crobots.arjunknown.51natila,
Zdravo svima!
Imam dva pitanja u vezi programiranja u C-u:
1. Kako se iskljucuje prikaz kurzora na ekranu?
2. Kako mogu dobiti ili podesiti vrednost odredjenog bita (ili
nekoliko bitova) u jednom bajtu pomocu tri logicke operacije
(AND, OR, XOR).
Sto se drugog pitanja tice: u racunarima 74 sam procitao tekst Zorana
Zivotica pod naslovom Moja skola C-a, ali tamo navedeni nacin
resavanja
ovog problema (pomocu bit polja) nisam mogao da koristim jer, nisam
znao
kako da tako deklarisanoj strukturi dodelim vrednost (celoj
strukturi,
ceo jedan bajt). U stvari ja sam samo hteo da ocitam stanje INSERT
tastera.
Unapred zahvalan
Nemeth Attila
============
P.S. Moja skola C-a je | IZUZETNO | dobra serija tekstova. Iskreno se
nadam
============
da ce Zoran Zivotic izdati i knjigu.
unknown.52ppekovic,
-> #51, natila>> 2. Kako mogu dobiti ili podesiti vrednost odredjenog bita (ili
>> nekoliko bitova) u jednom bajtu pomocu tri logicke operacije
>> (AND, OR, XOR).
Podešavanje vrednosti pojedinih bitova u bajtu se vrši na sledeći
način:
Ako želiš da postaviš nule na, recimo, 3. i 7. bit u bajtu uradi
sledeće:
bajt AND 01110111
Ako žeiš jedinice na 3. i 7. bitu:
bajt OR 10001000
Da pročitaš vrednost nekog bita, recimo 3., uradi:
bajt AND 00001000
RIGHT_SHIFT bajt,3 (bajt>>=3)
Paya
unknown.53mmihajlovic,
-> #51, natila> Imam dva pitanja u vezi programiranja u C-u:
> 1. Kako se iskljucuje prikaz kurzora na ekranu?
> 2. Kako mogu dobiti ili podesiti vrednost odredjenog bita (ili
> nekoliko bitova) u jednom bajtu pomocu tri logicke operacije
> (AND, OR, XOR).
Evo kratke funkcije za iskljucivanje kursora:
---------------------------------------------
/*
* This function turn cursor off by setting bit 5 to 0x01 in ROM BIOS
* "set cursor size" service.
*
* Mihajlo Mihajlovic Mart 1990.
*/
#include <dos.h>
void curoff( void )
{
union REGS regs;
regs.x.cx = 0x2020;
regs.h.ah = 0x01;
int86(0x10, ®s, ®s);
}
A ovako mozes ocitati stanje INSERT moda:
-----------------------------------------
int ins_mode( void )
{
char far *bios_flags=(char far*)0x417L; /* BIOS shift flags */
if (*bios_flags & (char)0x80) /* Get INSERT mode */
return 1; /* INSERT On */
else
return 0; /* INSERT Off */
}
unknown.54djelovic,
Evo patch-a za TC++ 1.01. Uskoro cu sa trotneta dobiti i borland BGI
toolkit - editor fontova, program za pravljenje fontova i još po nešto.
patch.zipunknown.55drakce,
-> #54, djelovic
│Uskoro cu sa trotneta dobiti i borland BGI toolkit - editor fontova, program
│za pravljenje fontova i još po nešto.
└────
Mislim da imam te programe, ne trebaš da se trudiš. Zovu se:
BGIDRIV .ARJ ........ 74,944
BGIFONT .ARJ ........ 56,249
BGIFONTS.ARJ ........ 62,734
BGIHERC .ARJ ........ 35,956
Ako je to u pitanju, javi pa da šaljem.
Pozdrav od Dragana
unknown.56chege,
-> #2, djelovic> Ima li nacina da se u TC++-u nekom pragmom iskljuci upozorenje u jednom
>redu. Recimo ako imate legalnu liniju "if (*q = *p)", kompajler ce tu stalno
>davati upozorenje "possibly incorect assignment in function xxxx", sto ne
smeta
>mnogo, ali...
stavi:
if ( NULL != (*q=*p) )
i proći će ti bez upozorenja.
( PS. ne zaboravi da ispravno definišeš NULL )
pozdrav Saša
unknown.58igor.mil,
-> #51, natila> 2. Kako mogu dobiti ili podesiti vrednost odredjenog bita (ili
> nekoliko bitova) u jednom bajtu pomocu tri logicke operacije
> (AND, OR, XOR).
recimo ovako:
int data = INITIAL_VALUE;
data = data || 4; /* OR setovanje bita 2 */
data = data && ~0x28; /* AND gasenje bita 3 i 5 */
data = data ^ 0x41 /* XOR toggle-ovanje bita 6 i 0 */
> Sto se drugog pitanja tice: u racunarima 74 sam procitao tekst Zorana
> Zivotica pod naslovom Moja skola C-a, ali tamo navedeni nacin
> resavanja
> ovog problema (pomocu bit polja) nisam mogao da koristim jer, nisam
> znao
> kako da tako deklarisanoj strukturi dodelim vrednost (celoj
> strukturi,
> ceo jedan bajt). U stvari ja sam samo hteo da ocitam stanje INSERT
> tastera.
recimo ovako:
union {
struct {
unsigned int b0 : 1;
unsigned int b1 : 1;
unsigned int b2 : 1;
unsigned int b3 : 1;
unsigned int b4 : 1;
unsigned int b5 : 1;
unsigned int b6 : 1;
unsigned int b7 : 1;
} bitfield;
char wholebyte;
} data;
data.bitfield.b5 = 1; /* setovanje bita 5 */
data.whilebyte = 0x76; /* pristupanje polju kao bajtu */
unknown.59djelovic,
-> #55, drakce Pa shalji brate! Takodje, ako je neko pomocu toga napravio neki YU font,
neka shalje i to. Sta je BGIHERC?
unknown.60natila,
Zahvaljujem se na pomoci!
Nemeth AttilaĚ╗
unknown.61ivujanic,
-> #55, drakce╠ BGIDRIV .ARJ ........ 74,944
╠ BGIFONT .ARJ ........ 56,249
╠ BGIFONTS.ARJ ........ 62,734
╠ BGIHERC .ARJ ........ 35,956
╠
╠ Ako je to u pitanju, javi pa da šaljem.
Šalji, al' zakači u konferenciju, da svi pokupimo!
Ivica
unknown.62drakce,
-> #59, djelovic
│││Uskoro cu sa trotneta dobiti i borland BGI toolkit - editor fontova, program
││└────
││Mislim da imam te programe, ne trebaš da se trudiš. Zovu se:
│└────
│ Pa shalji brate! Takodje, ako je neko pomocu toga napravio
│ neki YU font, neka shalje i to. Sta je BGIHERC?
└────
Upss! Fatal Error in my head. Proverio sam programe i video da nisu ni
shareware ni public domain. Izvinjavam se svima na dezinformciji. BGIHERC je
driver koji podržava i Hercules monochrome i Hercules InColor Card, sa
primerima u C-u i Pascalu. Ništa posebno značajno. U ostalima se nalaze BGI
toolkit, BGI font editor i nekoliko fontova.
unknown.63igor.mil,
-> #51, natila> 2. Kako mogu dobiti ili podesiti vrednost odredjenog bita (ili
> nekoliko bitova) u jednom bajtu pomocu tri logicke operacije
> (AND, OR, XOR).
recimo ovako:
int data = INITIAL_VALUE;
data = data || 4; /* OR setovanje bita 2 */
data = data && ~0x28; /* AND gasenje bita 3 i 5 */
data = data ^ 0x41 /* XOR toggle-ovanje bita 6 i 0 */
> Sto se drugog pitanja tice: u racunarima 74 sam procitao tekst Zorana
> Zivotica pod naslovom Moja skola C-a, ali tamo navedeni nacin
> resavanja
> ovog problema (pomocu bit polja) nisam mogao da koristim jer, nisam
> znao
> kako da tako deklarisanoj strukturi dodelim vrednost (celoj
> strukturi,
> ceo jedan bajt).
to se radi ovako:
union {
struct {
unsigned int b0 : 1;
unsigned int b1 : 1;
unsigned int b2 : 1;
unsigned int b3 : 1;
unsigned int b4 : 1;
unsigned int b5 : 1;
unsigned int b6 : 1;
unsigned int b7 : 1;
} bitfield;
char wholebyte;
} data;
data.bitfield.b5 = 1; /* setovanje bita 5 */
data.wholebyte = 0x76; /* pristupanje polju kao bajtu */
unknown.64ppekovic,
Jel petljao neko u MSC-u 6.0 sa funkcijama fread i fwrite, koje,
da podsetim, čitaju blok, ili niz blokova, koji se sastoje iz zadanog
broja bajtova, iz fajla?
U čemu je problem?
Pa, u help-u lepo piše da funkcija vraća vrednost stvarno
isčitanih (fread) ili upisanih (fwrite) bajtova. Međutim, meni i jedna
i druga funkcija uvek vraćaju 1 (jedan).
Program je trebao da isčitava iz fajla kilobajt po kilobajt, da
lepo stane kada je broj isčitanih bajtova manji od kilobajt (znači
nema više, tj. kraj fajla) i da ostatak bajtova čiji je broj trebala
da vrne funkcija fread dodatno upiše u izlazni fajl.
za fread mi stoji:
koliko=fread(&buffer,1024,1,ulazna);
mislio sam da slučajno ne vraća broj isčitanih blokova, ali nije,
probao sam. Buffer sam probao da definišem i kao neku strukturu od
ukupno 1024 bajta, i kao pokazivač i kao niz, al uvek isto.
Paya
unknown.65madamov,
-> #64, ppekovic Ne znam šta piše u help-u, ali biblija kaže da fread i fwrite vraćaju broj
iščitanih/upisanih blokova, a ne bajtova ( taj broj može da bude manji od
navedenog kao argumenta funkcije, jer one vraćaju broj uspešno
pročitanih/upisanih blokova ).
Što se tiče problema sa ostatkom od celog broja blokova, ja to radim na
ovaj način:
fseek(in_file,0,SEEK_END);
length = ftell(in_file);
rewind(in_file);
blocks = length/1024;
last = length % 1024;
a onda mu daš:
for(i=0;i<blocks;i++) fread(....);
fread(&buf,last,1,in_file);
Hope this helps.
|\/\/\/| *************************************************
| | * *
| | * *
| (o) (o) * Football is NOT the matter of life and death. *
C _) ...Hey Dude! * *
| `__| * IT'S MUCH MORE IMPORTANT !!! *
| / * *
/ \ * *
/ ---- \ *************************************************
unknown.66ppekovic,
-> #65, madamov>> Hope this helps.
Thanks!
Paya
unknown.67djelovic,
Da li neko moze zacas da izdeklamuje rutinu za vracanje znakova u kbd.
buffer. Naime, TC++ ima ovu rutinu, ali samo za jedan znak. Znaci, ungetch ()
ne dolazi u obzir, treba mi da u buff (koji je postavljen bilo gde) ubacim celu
recenicu.
unknown.68djelovic,
Kako da prevedem termin 'overloading'? Ono dsavic-evo 'preopterecenje' mi
nesto ne lezi...
P.S. Oli je to polimorfizam?
unknown.69ppekovic,
U jednom programu mi je bio potreban sarzaj adresa od
0049 do 004A. I krenem ja lepo i napisem ovakvo parce koda:
#include <stdio.h>
main()
{
char far *adresa=0x449;
for(;adresa<=0x4a0;adresa++)
printf("%p...%5u\t",adresa,*adresa);
}
Na prvi pogled, sve je ok. al mi ovaj program konstatno
ispisuje da su sadrzaji ovih adresa jednaki 0 (nula), sto
nikako nije tacno. I tu sam kontao, kontao, ali mi zaista nije
bilo jasno zasto ovo ne radi. I tako sasvim slucajno zamenim
mesta adresi i sadrzaju u printf-u tj. dobijem ovakav program:
#include <stdio.h>
main()
{
char far *adresa=0x449;
for(;adresa<=0x4a0;adresa++)
printf("%5u...%p\t",*adresa,adresa);
}
i sad, odjednom sve radi. Vratim na staro, ne radi. E ajde
neka mi neko kaze u cemu je stos, meni stvarno nije jasno.
Paya
unknown.70beki,
-> #69, ppekovicKoji si model koristio kod kompajliranja ? Ako si koristio neki sa jednim
data segmentom, pojavu koju si opisao objasnjavam na sledeci nacin:
printf ocekuje near pointere kod %p. U slucaju:
printf("%p...%u\n", p, *p);
na stek ide prvo *p, a zatim p (cetiri bajta). I na kraju pointer za
string "%p...%u\n":
*p...........................2 bajta
p............................4 bajta
pointer na format string.....2 bajta <----SP
Ono sto printf ocekuje (kada se radi sa jednim data segmentom) je:
*p...........................2 bajta
p............................2 bajta
pointer na format string.....2 bajta <----SP
Nakon ovoga mislim da je malo jasnije: Ono sto dobijas umesto *p je segment
pointera p.
U drugom slucaju, kad si upotrebio "%u...%p\n", stvar izgleda ovako:
p............................4 bajta
*p...........................2 bajta
pointer na format string.....2 bajta <----SP
Mislim da je to to.
Pozdrav, Beki
P.S.: Volim C.
unknown.72.bale.,
Da li neko zna kako da se procita broj cilindara diska (i gde ;)?
Regards from .bale. !
#8*)+-<
unknown.73ppekovic,
-> #70, beki>>Koji si model koristio kod kompajliranja ? Ako si koristio neki sa jednim
>>data segmentom, pojavu koju si opisao objasnjavam na sledeci nacin:
Probao sam, i sve lepo radi u large modelu. Svaka čast
na objašnjenju!
Paya
unknown.74ppekovic,
-> #72, .bale.>>Da li neko zna kako da se procita broj cilindara diska (i gde ;)?
Pa verovatno iz CMOS-a, ali kako se čitaju i upisuju
podaci iz i u CMOS? ;)
Paya
unknown.75miro,
-> #74, ppekovic■■ Pa verovatno iz CMOS-a, ali kako se čitaju i upisuju
■■ podaci iz i u CMOS? ;)
VAR
a: ARRAY Š0..255Ć OF SHORTCARD;
i: CARDINAL;
...
FOR i:=0 TO 255 DO
SYSTEM.Out(70H, SHORTCARD(i));
AsmLib.Delay(1); (* in ms *)
aŠiĆ:=SYSTEM.In(71H);
AsmLib.Delay(1);
END;
Ovako se cita, pisanje je koliko znam analogno. A pise sve u Tech
help.
O
/█>
Ů Ţ
▀ ▀ Dragisa.
unknown.76alexa,
-> #72, .bale. > Da li neko zna kako da se procita broj cilindara diska (i gde ;)?
Za prvi disk u strukturi na koju pokazuje vektor za INT 41H, a za
drugi se ne sećam tačno (nije 42H, nego neki iza). E sad,ne sećam se
ničega ovako napamet, a nisu mi pri ruci one datoteke sa podacima
(INTER*.ZIP, čini mi se). Pretpostavljam da postoji i neki
poziv BIOSu za tako nešto - to je možda i najpouzdanije, jer
ako imaš neki neobični kontroler sa dodatnim BIOSom sve je moguće
(prvo da podaci u CMOS-u nisu tačni, a posle i da ovi na INT 41H
nisu tačni).
U CMOS-u se (po 'standardu') nalazi samo redni broj 'tipa diska',
tj. indeks u tabelu parametara diska koja se nalazi na tačno
određenom mestu u BIOS ROM-u. Razni proizvođači BIOS-a prevazilaze
probleme sa ovim 'standardom' tako što posebno tretiraju npr. tip 47
(u originalnom AT BIOS-u nema mesta za više tipova), pa se tada
za zapisivanje parametara diska ('user-defined type) koriste
delovi CMOS-a koji u originalnom AT-u nisu bili iskorišćeni.
Ne znam da li je ovo rešenje došlo do neke vrste 'standarda' -
u svakom slučaju, BIOS dohvati parametre diska kako zna i smesti ih
na gorepomenuto mesto u memoriji.
Klasičan primer da CMOS ne pomaže su ESDI kontroleri - žesto se
upotrebljava tip 1 (to je neki bedni 10 Mb disk), a onda se uz pomoć
dodatnog BIOSa na kontroleru dobave pravi podaci.
unknown.77znevenic,
-> #72, .bale.> Da li neko zna kako da se procita broj cilindara diska (i gde ;)?
Ne piše direktno, ali može da se izvede iz boot sektora, evo i kako:
TYPE SECTOR=ARRAY Š1..512Ć OF BYTE;
VAR Buf : SECTOR;
PROCEDURE ChkBoot;
VAR CP : POINTER TO CARDINAL; (* CARDINAL = unsigned int *)
LP : POINTER TO LONGCARD;
BEGIN
RdSec(1,1,Buf); (* Reads boot sector into Buf*)
CP:=ADR(BufŠ20Ć); SecNum:=CPž;
CP:=ADR(BufŠ25Ć); SecPerTrack:=CPž;
CP:=ADR(BufŠ27Ć); Sides:=CPž;
LP:=ADR(BufŠ33Ć); BigSecNum:=LPž;
IF BigSecNum=0 THEN BigSecNum:=LONGCARD(SecNum); END;
END ChkBoot;
unknown.78miro,
-> #77, znevenic■■ PROCEDURE ChkBoot;
■■ VAR CP : POINTER TO CARDINAL; (* CARDINAL = unsigned int *)
■■ LP : POINTER TO LONGCARD;
Koji je ovo SAVRSENI jezik ? :)
O
/█>
Ů Ţ
▀ ▀ Dragisa.
unknown.79miro,
Pitanje svima koji koriste MSC C 6.00.
Ima li igdje na dohvatu source-a ili .obj za QuickHelp engine.
Ja sam u paketu vidio samo MAKEHELP, a htio bih napraviti rezidentni
interpreter QH datoteka. (Upload na Sezam se podrazumijeva :) )
Unaprijed hvala.
O
/█>
Ů Ţ
▀ ▀ Dragisa.
unknown.80miro,
Pitanje svima koji koriste MSC C 6.00.
Ima li igdje na dohvatu source-a ili .obj za QuickHelp engine.
Ja sam u paketu vidio samo MAKEHELP, a htio bih napraviti rezidentni
interpreter QH datoteka. (Upload na Sezam se podrazumijeva :) )
Unaprijed hvala.
O
/█>
Ů Ţ
▀ ▀ Dragisa.
unknown.81spantic,
-> #78, miro> ■■ PROCEDURE ChkBoot;
> ■■ VAR CP : POINTER TO CARDINAL; (* CARDINAL = unsigned
> int *) ■■ LP : POINTER TO LONGCARD;
>
> Koji je ovo SAVRSENI jezik ? :)
Znajući Zorana MODULA 2.
unknown.82znevenic,
-> #81, spantic>> ■■ PROCEDURE ChkBoot;
>> ■■ VAR CP : POINTER TO CARDINAL; (* CARDINAL = unsigned
>> int *) ■■ LP : POINTER TO LONGCARD;
>>
>> Koji je ovo SAVRSENI jezik ? :)
>
> Znajući Zorana MODULA 2.
Jel' ovo kompliment?
Jeste, kompliment je!
E, pa hvala!
BTW, ovo je tema cccc...
unknown.83ndragan,
-> #76, alexa>* Ne znam da li je ovo rešenje došlo do neke vrste
>* 'standarda' -
how yes no - sad u nekim biosima standard hvata do 48, a 49 je
za ručni rad; uspevali smo da nađemo čak i kombinacije
mama_ploča-konjtroler-disk-bios koje ovaj poslednji nikako (ni
ručno, ni pomoću trikova) nije hteo da prihvati.
unknown.84sgopcevic,
moj drugar pise program u C-u i interesuje ga na koji nacin moze da procita
serijski broj hard diska. Da li za to postoji neki INTerapt?
sgopcevic
unknown.85todorp,
-> #84, sgopcevicHi!
-----------------------------------------------------------------------
INT 21 - DOS 4.0 internal - GET/SET DISK SERIAL NUMBER
AH = 69h
AL = subfunction
00h get serial number
01h set serial number
BL = drive (0=default, 1=A, 2=B, etc)
DS:DX -> disk info (see below)
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
AX destroyed
(AL = 00h) buffer filled with appropriate values from extended BPB
(AL = 01h) extended BPB on disk set to values from buffer
Notes: does not generate a critical error; all errors are returned in AX
error 0005h given if no extended BPB on disk
does not work on network drives (error 0001h)
buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
extended BPB on disk
SeeAlso: AX=440Dh
Format of disk info:
Offset Size Description
00h WORD info level (zero)
02h DWORD disk serial number (binary)
06h 11 BYTEs volume label or "NO NAME " if none present
11h 8 BYTEs (AL=00h only) filesystem type--string "FAT12 " or "FAT16 "
-----------------------------------------
Nadam se da ce ovo pomoci.
Pozdrav od Todora.
unknown.86gristic,
HHU Svetom Murphyjevom zakoniku postoji pravilo koje kaže:
Ako grafički prikaz eksperimenta (članka) treba da bude prava linija,
pribavi podatke za samo dve tačke.
(Velilindijev drugi zakon eksperimentisanja)
Ovo gore se odnosi na tekst Laki uvod u *adu* u R76.
Dakle, ako treba dokazati da je *ada* SUPERIORNA u odnosu na C (ne
tvrdim da nije !) izaberite primere koji vam odgovaraju i samo napred...
Ukoliko autor tog članka povremeno prelistava ovu konferenciju imam za njega
(nagradno ?) pitanje:
ako jednog (skorog!) dana narodni poslanici *:o) (!č#&!*č) odluče da radimo
i subotom, na *KOLIKO* mesta i *GDE* treba ispraviti dolenapisani program ?
/*
Turbo(C,(short)0X2.000000);
*/
#include <stdio.h>
#include <math.h>
unsigned char*daniŠĆ=š(unsigned char*)1, /* PONEDELJAK */
(unsigned char*)2, /* UTORAK */
(unsigned char*)3, /* SREDA */
(unsigned char*)4, /* žETVRTAK */
(unsigned char*)'Đ5', /* PETAK */
/*(unsigned char*)'Đ6',*/ /* ????? <: */
(unsigned char*)'Đ0',ć;
float zaradaŠsizeof(dani)/*/02*/Ć;
int i;
#pragma void
*****************************************************************************
main ()
š
for (i*=č-0XL;(unsigned char*)(i&i)<daniŠi++Ć;printf
(
"Đn%10.2f",
zarada
Š
(int)--
dani
Š
(iđ=i)-pow
((int)01715.98e-2l,iži)
Ć
Ć
)
);
main/**/();
ć
Verujem da nije teško napisati program u *adi* koji radi istu stvar, a u kojem
bi trebalo ispraviti 234.67 mesta ;) .
Pozdrav,
__GR__
;*)
P.S
Vrela epruveta izgleda isto kao i hladna.
Murphyjev prvi zakon laboratorijskog rada.
P.P.S.
Grešiti je ljudski, ali da se stvarno zabrlja potreban je kompjuter.
Peti zakon nepouzdanosti.
P.P.P.S.
Nemam ništa protiv *ade*. (Al' ću uskoro da kupim CLIPPER++ :-o (Ovo bi valjda
trebao da bude znak za 'Ajde?! (c)Maratonci))
unknown.88mmihajlovic,
Kao sto sam (dosta) ranije najavio, FOR_C je stigao i posle
par nedelja rada sa njim mogu dati odredjeni prikaz. Da ja ne
bih previse tupio imate u prilogu uputstva za demo verzije
FOR_C i FOR_STRUCT kao i jedan (sasvim realan) primer, a ne
kako proizvodjaci imaju obicaj, dobro izabran u cilju
(ulepsanog) prikazivanja sopstvenih produkata. Nazalost
ne mogu da uploadujem demo verzije posto sam u razgovoru sa
odgovornom gospodom saznao da to ne dozvoljavaju. U svakom
slucaju ako neko ima nekih pitanja, neka se slobodno obrati.
MM
for_c.zipunknown.89djelovic,
-> #86, gristic Well, kada je pocelo ono opste pljuvanje po racunarima ja sam odustao od
"zalbe", ali kada si vec naceo temu, da kazem: Prvo, primer 2b iz teksta o Adi
nema veze s istinom; u C-u postoji tip enum koji ovakve stvari lako resava.
Drugo, zasto autor poredi Adu sa C-om? Naime, sada je u PC svetu C++ i bilo bi
fer da je poredi sa njim, u kom slucaju bi mu 95% teksta palo u vodu. Trece,
Ada jeste lep jezik, ali na nacin autor samo pokazuje koliko Ada nema sta novo
da pruzi. (Znam da nije novi jezik, ali Ada ima svoje prednosti. Autor ih nije
*naglasio*.)
Tekst o UNIX-u je napisan lose za auditorijum kome je namenjen - pocetnike.
Citat iz teksta DSAVIC-a: "Na engleskom virtual znaci 'onaj koji je
odlozen'..." Bez komentara.
P.S. Boja mi nije smetala. Riba i nije neka. A papir bi mogao biti tanji (ako
ce to znaciti da je jeftiniji).
unknown.90bearboy,
Pozdraw !
Jel' neko cuo nesto o High C-u ?
(Koristi se u vezi AutoCAD-a)
( 11 )
Thanx
─ /\/-\/\
\| |/
|O O|
/ \
| /0\ |
| \_/ |
\_____/
unknown.91zormi,
-> #90, bearboy* Jel' neko cuo nesto o High C-u ?
Ja ga koristim... Pišem u njemu module za Matlab 386.
Šta te zanima?
unknown.92gristic,
1.
U radu sa kompajlerom Turbo C 2.0 primetio sam da povremeno izraz (-0!=0)
(isto je i za int i za double) proglašava za TRUE :( ?!?! To se naročito
dešava prilikom štampe nekih izveštaja gde je jedini uslov da varijabla nije 0.
Ako taj isti program kompajliram u MSC-u sve je OK. U čemu je štos ?
Sada stavljam nešto poput ovog pre testiranja:
if(iznos==-0.0)
iznos=0;
i nema problema. Ali, ipak ZAŠTO ??????????
2.
Prilikom linkovanja nekih programa TLINKOM dobijam sledeće greške:
Error: Segment _BSS exceeds 64K (pedesetak puta),
Error: Group DGROUP exceeds 64K (jednom),
a povremeno me časti i prekoračenjem TEXT segmenta.
Programi i biblioteke su kompajlirani u large i huge modelu
(SAMO large i SAMO huge !!!). Šta da se radi? (Samo ne da smanjim broj
funkcija i promenljivih!) (Šta je trebalo IBMu da uzme 8086? ;( )
3.
Imam razrađenu sopstvenu biblioteku za izradu menija, međutim sada želim
da prilikom pozivanja spoljašnjih programa ili odlaska u DOS shell smanjim
zauzetu memoriju (meni(ji) zauzima(ju) oko 90K, ali zato nema(ju) mane!).
To bi trebalo ovako da funkcioniše (nije uslov) nakon izbora funkcije:
.......
exec_prog(*program)
š
.......
snimi_stanje_memorije(); /* mapa celokupne memorije */
swap(memorija-->disk); /* snimi mapu na disk/EMS/XMS */
/* po najboljem izboru */
oslobodi_memoriju_osim_rezidentnog_dela(); /* vrati višak memorije DOSu */
pozovi_program(*program); /* pozovi program */
/* nakon povratka */
ukloni_eventualne_rezidentne_programe(); /* očisti "smeće" i rezidentne
programe instalirane nakon
poziva programa */
swap(disk-->memorija); /* obnovi stanje menija kao pre
poziva programa iz swap
datoteke sa diska/EMS/XMS */
.......
ć
.......
Zauzeće memorije rezidentnom funkcijom bi trebalo da bude manje od 8K
(poželjno je da bude oko 2K), otprilike kao što to rade QuckEdit, QTSR
i 4DOS prilikom pozivanja shell-a, ali bolje. ;) Zamalo da zaboravim:
model je large, ali ako baš mora može i small !
Ima li neko neku ideju ? Važan je princip, ali neću se naljutiti i ako
stigne gotova funkcija(e) ;) (samo pouzdana - ne bih da eksperimentišem
pošto imam suviše dana i noći snimljeno na disk, streamer nikako da stigne,
a za zipovanje mi treba više od 100 HD disketa X 2(sigurno je sigurno)
i 2 dana posla ;< !!).
__GR__
unknown.94bearboy,
-> #91, zormiVideo sam u AutoCAD 11 fajlovima da su njegovi .EXP programi pisani u High C-u.
Da li znas kako to ide (konverzija C - EXP) ?
Stvar je interesantna zbog toga sto se mogu pisati programi za AutoCAD u C-u.
Jel' se moze kompajlirati AutoLisp s' High C-om (ovo nisam pitao ja) ?
/\/-\/\
\| |/
|O O|
/ \
| /0\ |
| \_/ |
\_____/
unknown.96bojt,
-> #94, bearboy>> Video sam u AutoCAD 11 fajlovima da su njegovi .EXP programi
>> pisani u High C-u. Da li znas kako to ide (konverzija C - EXP)?
EXP se dobije pomoću PharLap linkera i potreban mu je PharLap
DOS-Extender da bi se pokrenuo. Postoji više proivodjača
kompajlera koji koriste (ili su do skoro koristili) PharLap
ravojni sistem (High C, NDP C, Watcom C, ...). Konverzija je
jednostavna: kompajliraš pa linkuješ ;).
unknown.97bearboy,
-> #91, zormiVideo sam u AutoCAD 11 fajlovima da su njegovi .EXP programi pisani u High C-u.
Da li znas kako to ide (konverzija C - EXP) ?
Stvar je interesantna zbog toga sto se mogu pisati programi za AutoCAD u C-u.
Jel' se moze kompajlirati AutoLisp s' High C-om (ovo nisam pitao ja) ?
/\/-\/\
\| |/
|O O|
/ \
| /0\ |
| \_/ |
\_____/
unknown.98bearboy,
-> #92, gristic posto imam suvise dana i noci snimljeno na disk, streamer
nikako da stigne, a za zipovanje mi treba vise od 100 HD
disketa X 2(sigurno je sigurno) i 2 dana posla ;< !!).
Najjednostavnije je da kupis jos jedan HD od 100Mb, pa da koristis ili ARJ -
isprobano - ukljucis, odes kuci, stradan se vratis i sve lepo spakovano u 1.2M
fajlove. To uradis jednom, a posle samo Update-ujes (arhivira fajlove kojima se
promenio datum, ili su noviji)
/\/-\/\
\| |/
|O O|
/ \
| /0\ |
| \_/ |
\_____/
unknown.99bearboy,
-> #96, bojt> EXP se dobije pomocu PharLap linkera i potreban mu je
> PharLap DOS-Extender da bi se pokrenuo. Postoji vise
> proivodjaca kompajlera koji koriste (ili su do skoro
> koristili) PharLap ravojni sistem (High C, NDP C, Watcom
> C, ...). Konverzija je jednostavna: kompajliras pa
> linkujes ;).
'oce reci, treba da nabavim High-C ako hocu da pisem nesto u C-u za AutoCAD ?
Ona konverzija - jel' to ide nesto kao -Select output type:-,opalis PharLap ili
EXP, pa ti ga on lepo napravi ?
var
answer,sendme :boolean;
begin
if answer=true then sendme
else writeln(':(');
if sendme=true then writeln(' Posalji mi ga !');
end.
Sorry guys, Pascal ist Pascal.
/\/-\/\
\| |/
|O O|
/ \
| /0\ |
| \_/ |
\_____/
unknown.100beki,
-> #92, gristic> Imam razradenu sopstvenu biblioteku za izradu menija, medutim sada zelim
> da prilikom pozivanja spoljasnjih programa ili odlaska u DOS shell smanjim
> zauzetu memoriju (meni(ji) zauzima(ju) oko 90K, ali zato nema(ju) mane!).
"Overlay() Library Ver. 3.5
by SofDesign International,Inc.
Ideal for C or Clipper, Overlay() Lib Ver 3.5 lets you
'swap and RUN' applications with virtualy no memory tie
up......
LIST PRICE: $149 PS PRICE: $149
THE PROGRAMMER'S SHOP
90 Industrial Park Road, Hingham, MA02043"
Pozdrav, Beki
unknown.101igor.mil,
U direktorijumu \IBMPC\PROGRAM se nalazi izvrsna verzija programa
Flex, dobijena iz C izvornog koda koji se nalazi u direktorijumu
\UNIX.
Flex je "lex compiler" - programerska alatka koja na svom ulazu cita
specifikaciju koje se zove "lex program" i generise C izvorni kod
programa koji se zovu leksicki analizatori ili skaneri.
Osnovna namena Flex-a je da olaksa pisanje kompajlera i
interpretera, ali se moze koristiti i za generisanje bilo kakvih
programa koji vrse pretragu za odredjenim uzorcima u tekstu, i
nekakvu obradu po prepoznavanju.
Uzorci se definisu "regularnim izrazima", a akcije po prepoznavanju
su proizvoljne naredbe programskog jezika C.
unknown.102bojt,
-> #99, bearboy>> 'oce reci, treba da nabavim High-C ako hocu da pisem nesto u
>> C-u za AutoCAD ? Ona konverzija - jel' to ide nesto kao
>> -Select output type:-,opalis PharLap ili EXP, pa ti ga on
>> lepo napravi ?
Jok. PharLap = EXP; on ti ionako da samo OBJ, ostalo uradi PharLap.
>> if sendme=true then writeln(' Posalji mi ga !');
Nemam ja to, samo u principu znam kako rade kompajleri pod Pharom.
unknown.103gristic,
-> #100, bekiHvala lepo. Ja sam mislio nešto selfmade...
Ako baš mora i ako baš vredi možda...
Pozdrav
__GR__
unknown.104fric,
-> #101, igor.mil> Flex je "lex compiler" - programerska alatka koja na svom
> ulazu cita specifikaciju koje se zove "lex program" i
> generise C izvorni kod programa koji se zovu leksicki
> analizatori ili skaneri.
Možeš li da daš neki prost a ilustrativan primer upotrebe flexa ?
Tvoja poruka je sama po sebi razumljiva, ali kad sam pogledao
dokumentaciju uz flex - opet mi nije jasno kako to ide, korak po
korak.
Treba na uradim program koji je u suštini interpreter - čita red po
red iz text fajla, analizira, radi razne radnje. Kako bi se pisanje
takvog programa moglo olakšati/ubrzati pomoću flexa ?
fric
unknown.105igor.mil,
-> #104, fric> Mozes li da das neki prost a ilustrativan primer upotrebe flexa ?
> Treba na uradim program koji je u sustini interpreter - cita red po
> red iz text fajla, analizira, radi razne radnje. Kako bi se pisanje
> takvog programa moglo olaksati/ubrzati pomocu flexa ?
Daj malo vise detalja u opisu prolema koji treba da se resi, pa cu
verovatno moci da ti pomognem. Nemam vremena da se raspisem o svim
mogucnostima flex-a. Evo nekoliko kratkih uputstava.
U FLEXDOC.MAN imas neke primere specifikacije skanera na pocetku (a i
kasnije). Ukucaj primer u neki file, recimo da se zove PRIMER.L i
uradi:
flex -t primer.l > primer.c
Switch '-t' znaci da se generisani skaner ispisuje na stdin. Bez ove
opcije ce se koristiti default naziv LEXYY.C za generisani fajl. Ovim
se generise C kod skanera u vidu funkcije 'yylex'. Ako je u sekciji
specifikacije "user code" (to je sekcija posle druge sekvence %% na
pocetku linije) definisana funkcija 'main' koja poziva 'yylex' onda
uradi:
tcc primer.c (ili: cl primer.c)
I dobijas "standalone" skaner koji cita standardni ulaz i pise na
standardni izlaz.
A ako nema definisanog 'main' u okviru specifikacije, onda napisi
glavi program koji koristi pozive funkcije 'yylex' pa ga linkuj sa
PRIMER.C.