cccc.1ppekovic,
Pošto smo se oslobodili C++ okupatora ;) i dali im temu, ovo je opet ona
stara dobra cccc tema.
Paya
cccc.2zsavic,
čeleo bih preko MAIL-a da kontaktiram sa osobom koja:
- ima knjigu Herberta Schildta "Born to code in C";
- je voljna da pozajmi knjigu na fotokopiranje.
Pozdrav, Zoran.
cccc.3vcalic,
Zna li neko mogu li se u Borland C++ 2.0 koristiti funkcije _read i
_write tako da učitavaju podatke u bafer duži od 32K, tj. mogu li raditi i sa
unsigned vrednostima a ne samo sa int, a da pri tom ne dođe do pada programa.
Naime, ako stavim veličinu bafera tako da bude nešto manja od 64K, s vremena
na vreme dolazi do blokiranja. Nisam baš uspeo da nađem uzrok ovome, pa ako
neko zna...
cccc.4djelovic,
> Zna li neko mogu li se u Borland C++ 2.0 koristiti funk
> _write tako da učitavaju podatke u bafer duži od 32K, tj. mogu
> unsigned vrednostima a ne samo sa int, a da pri tom ne dođe do
Ne može. Da ne pričam o situaciji u kojoj je rec_size*n > 64K
koja mi je oduzela dva dana mog života. MSC sve to lepo izdeli na 32K
blokove, ali Borland tu još od onog Turbo C-a pravi sranja :(.
cccc.5amilanov,
Pitanje za ljude koji se bave C-om, vole C, žive za C, mrze C ...
Sećate se starog dobrog BASIC-a. Bio je glup ko truba, ali ...
bar je imao funkcije koje rade pretvaranje
- ASCII vrednosti u karakter
- karakter u ASCII vrednost
Da se razumemo, nisu ovo funkcije "atoi" i "itoa". One rade
nešto "slično" ali malo drugačije. Dakle, sreo sam se sa problemom
da slovo "A" treba da pretvorim u vrednost 65, i da 65 treba da
pretvorim u slovo "A". E sad naravno tu mogu da uradim f-ciju sa
"switch" i raznim "case" i sličnim stvarima, ali mi je nekako,
premnogo komplikovano, da ne kažem ... ;) ! Postoji li ELEGANTNIJE
( VEOMA VAčNO - ELEGANTNIJE ;) !!! ) rešenje. Dali možda čak
posoji neka f-cija za koju ne znam ( ha, ima i takvih ;) ),
ali mislim da ANSI i Borland do 3.0 nema nešto slično.
Il se varam ;) ! MS C ?
HELP ?
Pozdrav Milanov
cccc.6janko,
> Sećate se starog dobrog BASIC-a. Bio je glup ko truba, ali
> ... bar je imao funkcije koje rade pretvaranje
>
> - ASCII vrednosti u karakter
> - karakter u ASCII vrednost
> HELP ?
C-u ne trebaju funkcije za to. I jedno i drugo su ISTO. Probaj.
cccc.7djelovic,
> - ASCII vrednosti u karakter
> - karakter u ASCII vrednost
Da bi prebacio char u int, samo ispred char vrednosti moraš da
staviš (int). Npr.:
int i = (int)'A' /* i = 65 */
...
char c = 'C';
printf ("%d", (int)c);
Naravno, kao što si uradio ovu konverziju, tako ispred int
vrednosti možeš da staviš (char), (float), ili neki drugi tip podataka.
Ono što je zanimljivo primetiti jeste da C mnoge od ovih konverzija radi
automatski, tako da slobodno možeš da napišeš
int i = 'A';
i kompajler će 'ladno progutati celu konstrukciju i staviti 65 u i!
Takođe, možeš da uradiš recimo
char c = 'A';
c = c + 2; /* c = 'C' */
jer kompajler to interpretira kao
c = (char)((int)c + 2);
U principu, teško da će ti ove konverzije nešto mnogo zatrebati. Jedini
slučaj u kome su one baš neophodne jeste onaj gornji sa printf naredbom,
gde moraš da mu daš int vrednost jer printf nema proveru tipova pa onda
kompajler ne može da izvrši automatsku konverziju.
cccc.8amilanov,
> Da bi prebacio char u int, samo ispred char vrednosti
> moraš da staviš (int). Npr.:
>
> int i = (int)'A' /* i = 65 */
Ma, radio ja to isto ali, ha, "upetljao" stvari, pa prosleđivao
pogrešne stvari (parametre), i dobijao psovke na ekranu od BC-a,
i tako posumnjao da postoji nešto što nisam znao, pa posumnjao u
BC ;), da je nekako poblesavio ;), i na kraju shvatio da sam
JA poblesavio pa pravio neoprostive početničke gluposti :)) !!
Evo kako je bilo (iščupani skraćeni primer):
#include <stdio.h>
#include <string.h>
int main(void)
š
char slovoŠ1Ć;
char recŠ3Ć = "ABC";
strncpy(slovo, rec, 1);
printf("%sĐn", slovo);
printf("%dĐn", (int)slovo);
return 0;
ć
E, ovo vraća :
A
-12
Daklem glupost. Ha, ha, gde je tu bila greška ? NAGRADNO PITANJE ;))) ?!!
Zahvaljujem djelovicu i janko-u koji su mi pomogli da se odblesavim :))),
tojest vratim onamo gde sam i mislio da je sve OK i pronađem grešku !
Hvala !!!
Pozdrav (ODblesavljeni ;)) ) Milanov
cccc.9robert,
<:> Daklem glupost. Ha, ha, gde je tu bila greška ? NAGRADNO PITANJE
<:> ;))) ?!!
Pa slovo[1] ti je niz a slovo ti daje ukazatelj na niz pa naravno da si
dobio "\$%^%^&* kad si pokušao da štampaš vrednost ukazatelja :).
cccc.10janko,
> char slovoŠ1Ć;
> char recŠ3Ć = "ABC";
> strncpy(slovo, rec, 1);
> printf("%sĐn", slovo);
> printf("%dĐn", (int)slovo);
U prvom slučaju očekivan je pointer na char, a dao si mu char.
U drugom je očekivan int a dao si mu iskasapljeni pointer.
Ukratko, da si probao još šest kombinacija ;) iscrpnim
pretraživanjem došao bi do rešenja. ;)
Probaj da pročitaš neku knjigu o C-u. Imam vrlo jak utisak da
'programiraš na slepo.'
Usput ne 'janko-u' :( već 'Janku.'
cccc.11amilanov,
> Pa slovoŠ1Ć ti je niz a slovo ti daje ukazatelj na niz pa
> naravno da si dobio "Đ$%ž%ž&* kad si pokušao da štampaš
> vrednost ukazatelja :).
Znam, kasno sam uvideo "glupost prve kategorije" :))) !
Popravio se, pa neću više da davim ljude za glupost.
Obećavam :))))))))) !
Pozdrav Milanov
cccc.12amilanov,
> Ukratko, da si probao još šest kombinacija ;) iscrpnim
> pretraživanjem došao bi do rešenja. ;)
Umalo da se to desi ;))) ! Naravno, šalim se. Uzeo ja
debugger u ruke ;), pa olovku ;), pa algebru za prvi razred ;)
i našao GLUPOST. Nije bilo lako, ali borili smo se lavovski ;)) !
> Probaj da pročitaš neku knjigu o C-u. Imam vrlo jak utisak
> da 'programiraš na slepo.'
Ma, čitao ja njih na tone i tone :), ali nigde nisam našao o
ovom mom problemu ;). Naravno šalim se. U pravu si za ono
na slepo, utoliko više što mi se program sastoji od 8 modula
koji su nezavisni, iako se pozivaju promenljive između, pa
kad proslediš pogrešnu stvar za koju "si mislio da je onako,
ali je bila ovako", pa neće, pa neće, pa posumnjaš u majku
rođenu, a ne u compiler, ili znanje svoje ;)))) !
> Usput ne 'janko-u' :( već 'Janku.'
Sorry, "bez teških punjenja" :). Nisam mislio ništa loše sa
tim "janko-u", jel uvek polazim od toga da na SEZAM-u ;), ima
bar još poneki Janko, a korisnik sa Username janko si samo
ti, pa mi je bezveze da kažem Janku, pa posle ispade da
sam se zahvaljivao "pogrešnom" čoveku :)) ! Ma, shvataš, ne :)) !
Pozdrav Milanov
cccc.13glisin,
BEEP! Katastrofa!
Pazi sta radis sa C-om!!! Mislim na
char nesto[3] = "ABC";
Ovo ce da prodje jer se referencira adresa &nesto, odatle se smesta
ABC (65, 66, 67) ali i 0 !!! Niz "ABC" je 65,66,67,0 pa treba da stoji
char nesto[4] = "ABC";
da bi ono bilo korektno. Zasto? Pa evo na primer
char str[3] = "ABCD";
int num;
Sta je u 'num'??? Pa bajtovi 68 i 0! String se lepo tamo prelije u
vecini implementacija. Neke su pametne pa se deru, neke nisu. Ovo sve
i nije strasno, ali pazi !!!
char str[3];
float a, b, c, d;
...
strcpy (str, "Ovo je neka recenica koja ide u str...");
ce vrlo verovatno UNISTITI sadrzaj a, b, c i d varijabli, zavisno
kako koji kompajler formira DSS, a bogami moze da se desi da 'spali'
i malo vise ;-)
Pazi na to!
ŢŢŢIGGYŮŮŮ
cccc.14wizard,
Da li postoje neke biblioteke za manipulacije slikama (bilo koji standardni
format - PCX, TIFF...), po mogućstvu C/CPP sorsu? Makar za čitanje
jednog od tog formata...
cccc.15ppekovic,
>> Da li postoje neke biblioteke za manipulacije slikama (bilo koji
>> standardni format - PCX, TIFF...), po mogućstvu C/CPP sorsu? Makar za
>> čitanje jednog od tog formata...
Imaš u sezamovim dir-ovima i po konferencijama opise nekoliko formata.
Mislim da ne bi trebalo biti nikakvog problema da se na osnovu toga naprave
programčići kakvi ti trebaju.
Paya
cccc.16robert,
<:> Imaš u sezamovim dir-ovima i po konferencijama opise nekoliko
<:> formata.
Tačno, a za PCX format ima i sorsova na C-u za prikaz slika.
cccc.17wizard,
>> Tačno, a za PCX format ima i sorsova na C-u za prikaz slika.
Gde?
cccc.18dnikolic,
Ima li neko nekakav mali kalkulator uradjen u C-u?
dn
cccc.19mjova,
> Ima li neko nekakav mali kalkulator uradjen u C-u?
ima valjda neki napisan kao primer za tekst u računarima.
valjda ima to u RSOFT-u, ako ne nađeš, znam ko ima ;)
cccc.21robert,
Imaš u direktorijumu R:\IBMPC\INFO fajl pctecref.zip ili nekako slično,
uostalom, pored naziva ima opis arhive pa ćeš sigurno naći. Tu imaš opis
formata i neke rutine u C-u za osnovni rad sa PCX fajlovima.
cccc.22janko,
Nisam primetio da je iko u ovim javnim konferencijama pohvalio
novi program SCD.
Probao sam ga i jako mi se dopada. Ranije sam, da bih dobio
takav spisak za ceo disk, morao da radim FS pa preusmeravanje u
fajl pa AWKovanje, a sada samo jedan red uradi posao.
žestitam mjovi na dobro urađenom poslu.
cccc.23vukota,
>> Da li postoje neke biblioteke za manipulacije slikama (bilo koji
>> standardni format - PCX, TIFF...), po mogucstvu C/CPP sorsu? Makar za
>> citanje jednog od tog formata...
Dobro ti je robert rekao uzmi iz R:\IBMPC\INFO\pbtecref.zip
imas source na C-u rutine za enkodiranje i dekodiranje u .PCX , a vazno ti
je i zaglavlje od 128 bajtova iz koga marnes sve potrebne informacije,
kao i ono o paletama (ako radis sa slikama u boji).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A ono sto neko pomenu "ima na sezamu", pa pobogu ljudi necu valjda da
citam 74 stampane strane o TIFF formatu (NIJE GRESKA:STAMPANE !!!) da bih
posle mesec dana sastavljao dve rutine za citanje i upis u (iz) TIFF(-a)
Prema tome molicu lepo ako ima neko vec gotove rutine za rad sa TIFF i GIF
fajlovima (source na C-u ili C++),neka mi se javi , a bilo bi pozeljno
kratko objasnjenje (ne vece od 5 stampanih strana).
cccc.24mjova,
> žestitam mjovi na dobro urađenom poslu.
trljam oči, ne verujem, al' ipak jeste ;)
hvala ti, mada još ne mogu da poverujem ;)
cccc.25mjova,
malopre naiđoh na jedan manji problem u vezi C-a i ASM-a, pa reko da
ga pomenem ovde ako zanima nekog (a možda i neku sugestiju dobijem ;).
evo o čemu se radi:
ako je potrebno iz C-a napisati neku asm instrukciju, onda se koristi
dobro poznata kombinacija 'asm {...}', a ako još treba neka labela da
se doda, e onda treba 'seći' grupu naredbi:
asm { .... }
lbl:;
asm { .... }
što i nije neki problem jer se svodi na to da prevodilac mora nekako
znati da labele postoje i da ih nekako imenuje (interno) pri
prevođenju. ako labele strpamo u zagrade '{}' (ili iza 'asm') onda se
one legalno prenose asembleru (lepo se vidi sa -S opcijom - borland) i
C prevodilac ih *uopšte ne poznaje* - sasvim glup, ali rešiv problem.
(ako već zna da se npr. iz JMP nalazi labela, i lepo je tretira, onda
može da provali da se ispred ':' nalazi ime neke labele..)
ovo nije predmet ove poruke, već to da se instrukcija CALL prenosi
onakva kako je napisana u C-u:
;
; asm call ps_mess;
;
call ps_mess
dakle, ne poznaje da iza CALL ide ime (koje obično prevodi u neko
˙jedinstveno˙ ime kao: ˙@8@770˙), pa se ceo red samo prosledi
asembleru. to sad ima druge posledice pa se ime labele mora napisati
*IZA* 'asm', i time zaobići ispravno deklarisanje labele:
; asm {
; ps_mess:;
;
ps_mess :
znači da će baksuz ;) imati prilike da dâ ime labele isto kao i ono
koje će C prev. smisliti, pa će u izvesnim situacijama biti problema.
znam da je šansa da se tako nešto desi minimalna, ali nikad ne reci
nikad ;).
ovo smatram, ne bug-om, već propustom!
znam da se problem može rešiti pogodnim push/jmp kombinacijama, ali
neću da izigravam kompajler, dosta mi je što moram želje da prevodim
u C ;).
(ps. kome još može da zatreba CALL u C-u?)
cccc.26janko,
> trljam oči, ne verujem, al' ipak jeste ;)
>
> hvala ti, mada još ne mogu da poverujem ;)
Uvek sam primenjivao stil 'po zasluzi.' Sada si stvarno
zaslužio čestitku. A stvarno nisam nigde video nikakve
komentare (možda ne čitam odgovarajuće konferencije?)
Samo nemoj da se uobraziš. ;)
cccc.27mjova,
> call ps_mess
najcrnje od svega je to što se u ovoj situaciji mora ručno podešavati
far/near poziv jer se RET tretira ispravno i to onda dovodi do
zakucavanja 100%.
cccc.28dusanp,
Uz FLEX i BISON idu dosta dobro pisani fajlovi, spremni za
štampu... Problem je u tome što su u ne_daj_bože formatu, gde
se na kraju svakog reda texta nalazi <LF>, a na kraju svake
strane <FF>. Ukratko, tekst fajl koji se samo može kopirati
na štampač.
Pošto mi je bilo potrebno, složio sam ova dva fajla u Word
for Win-u, sredio pasuse, i napravio kulturne dokumente. Ako
se odštampaju ovako složeni tekstovi, zauzimaju duplo manje
mesta na papiru.
Ako ima interesa, mogu da ih UL ovde...
cccc.29dusanp,
Kad smo vec kod YACC-a, znam da je bilo reci o tome gde
moze da se nadje, ali ne mogu sad da se setim. Da li je
ostavljen negde u diru ili u konferenciji?
cccc.30konan,
Molim sve koji imaju napisan, dobijen ili bilo kako resen
problem rada sa misem u obliku neke MOUSE.LIB i sl. da mi
se jave na mail ili da ostave ovde datotekicu.
Mnogo se zahvaljujem.
Konan Simerijanac
cccc.31mjova,
> Molim sve koji imaju napisan, dobijen ili bilo kako resen
> problem rada sa misem u obliku neke MOUSE.LIB i sl. da mi
> se jave na mail ili da ostave ovde datotekicu.
imaš nekoliko datoteka sa izvornim kodovima za pacova u C-u, mislim
da baš ovde ima jedna datoteka koju je ostavio (a valjda i složio)
obren. pogledaj malo po pc.prog i pc.soft (možda ima i tamo).
ovde ti šaljem malo koda koji sam ja napisao (malo gledajući šta je
obren radio) za C++. ima još nekih stvari koje bi dosta ubrzale
rad, ali mrzi me da to sad diram.
ako imaš pitanja, tu sam.
sy_mouse.arjcccc.32todorp,
Da li moze neko da mi kaze zasto ovo ne radi??? Trebalo bi da bude tsr
koji svakih nekoliko sekundi bipne. Uglavnom zaglavljuje :((((( Ovo ne radi
i kad se int 1c zameni sa int 8.
#include <dos.h>
#include <stdio.h>
void (interrupt far *oldtimer)( void );
void interrupt far newtimer( void );
void beep(void);
int temp=0;
void main(void)
{
oldtimer=getvect(0x1c);
setvect(0x1c,newtimer);
keep( 0,(_SS+(_SP/16)-_psp));
}
void interrupt far newtimer(void)
{
(*oldtimer)();
beep();
}
void beep (void) {
union REGS inregs,outregs;
temp++;
if (temp==40) {
temp=0;
inregs.h.ah=0x02;
inregs.h.dl=0x07;
intdos(&inregs,&outregs);
}
}
cccc.34fole,
Kako wÂáŤĚ╣█Ś?
cccc.35fole,
Kako
cccc.36djelovic,
> Da li moze neko da mi kaze zasto ovo ne radi??? Trebalo bi da bude tsr
> koji svakih nekoliko sekundi bipne. Uglavnom zaglavljuje :(((((
> i kad se int 1c zameni sa int 8.
Mislim da u rutini beep pozivaš DOS što je nešto što tvoj TSR,
ovakav kakav jeste, ne bi trebao da radi. Ubaci CONIO.H u tvoj program i
koristi funkcije sound () i nosound ().
Van toga, ovako na prvi pogled ne primećujem neke krupne greške,
ali bi možda mogao da pogledaš primer iz helpa za komandu keep.
cccc.37dragisha,
ű> Da li moze neko da mi kaze zasto ovo ne radi??? Trebalo bi da
ű> bude tsr koji svakih nekoliko sekundi bipne. Uglavnom
ű> zaglavljuje :((((( Ovo ne radi i kad se int 1c zameni sa int
ű> 8.
ű> inregs.h.ah=0x02;
ű> inregs.h.dl=0x07;
ű> intdos(&inregs,&outregs);
Gnijezdiš DOS. Ovako kako si napisao ovaj beep, svaki put kad
se PC nađe u DOS pozivu kad okine interrupt, imaš šanse da crkne.
Izvedi beep bez DOS pozivanja. Najbolje da pri jednom interruptu
uključiš zvučnik na nekoj frekvenciji, a pri sljedećem da ga
isključiš. Onda sačekaš koji ciklus da ti melodija:) dobije
smisao i onda jopet.
Pozdrav, dd
P.S. Kako uklj/isklj zvučnik je malo šira tema...
cccc.38micko,
Zdravo,
Da li mozda neko ima ili zna gde ima YACC ili neka slicna vrsta
programa za generisanje pasresa u C-u. Ne interesuje me UNOX verzija
vec PC varijanta. (ono gore je PARSER).
Pozdrav CODOR
cccc.39dusanp,
=> Da li mozda neko ima ili zna gde ima YACC ili neka slicna
=> vrsta programa za generisanje pasresa u C-u. Ne
=> interesuje me UNOX verzija vec PC varijanta. (ono gore je
=> PARSER).
To sam i ja pitao pre neki dan, i niko se nije javio...
A nesto ne mogu da se setim, ali mislim da je nekad bio
na Sezamu YACC za PC.
cccc.40garderp,
Pogledajte malo starije konferencije.
Negde u PC.SOFT-u se nalazi berkli vezija yacc-a
cccc.41nkbog,
> Negde u PC.SOFT-u se nalazi berkli verzija yacc-a
U PC.SOFT:unix. Ne znam koja poruka. A bulaja bi mogao da je prebaci u
\IBMPC\C da ne bi svaka dva meseca ovde objasnjavali gde je.
NB.
cccc.42bulaja,
│ Negde u PC.SOFT-u se nalazi berkli vezija yacc-a
└───
PC.SOFT:
3.303 ->294 unix nkbog 10.09.91. 15:27 byacc.zip
Da ide u dir?
cccc.43djelovic,
> Da ide u dir?
Well, svakihh mesec dana neko ga traži. Trebalo bi. (Ili: Tako treba!)
Ukoliko nekome treba kompletno uputstvo za YACC, vikajte.
cccc.44dusanp,
=> Da ide u dir?
Naravno. Ali mislim da treba da bude u C diru,
a ne u PROGu. Takodje i FLEX treba baciti u C...
cccc.45garderp,
Pa ukoliko je to kompletno uputstvo za YACC kompletnije od onog
koje se dobija u obliku TEXT file-a onda mi sigurno treba. Ako imas
nesto opsirno i za LEX takođe sam zainteresovan.
cccc.46ppekovic,
>> Pa ukoliko je to kompletno uputstvo za YACC kompletnije od onog
>> koje se dobija u obliku TEXT file-a onda mi sigurno treba. Ako imas
>> nesto opsirno i za LEX takođe sam zainteresovan.
Upustvo kako za yacc tako i za lexx imaš na FON-u. Javi se pa
svrati.
Paya
cccc.47zsiz,
Učim C-jezik. Probao sam da kompajliram program:
/* --------------------------------------------- */ /* 1 */
/* program za izracunavanje 4 osnovne rac. oper. */ /* 2 */
/* --------------------------------------------- */ /* 3 */
#include <stdio.h> /* 4 */
#define PC '?' /* 5 */
main() /* 6 */
{ /* 7 */
float (a,b); /* 8 */
char [op]; /* 9 */
float [rezultat]; /* 10 */
putchar(PC); /* 11 */
while(scanf("%f%c%f" ,&a,&op,&b)!=EOF) /* 12 */
{ /* 13 */
switch (op) /* 14 */
{ /* 15 */
case '+': rezultat = a + b; break; /* 16 */
case '-': rezultat = a - b; break; /* 17 */
case '*': rezultat = a*b ; break; /* 18 */
case '/': rezultat = a/b ; break; /* 19 */
default: printf("GRESKA - POGRS OPERA\n"); /* 20 */
printf("DOZVOLJENI : + - * i /\n"); /* 21 */
putchar(PC); /* 22 */
continue; /* 23 */
} /* 24 */
printf("REZULTAT JE %g\n", rezultat); /* 25 */
putchar(PC); /* 26 */
} /* 27 */
} /* 28 */
Kompajler je izbacio sledeće poruke:
D:\CTUTOR\SMALL_C>cc rac.c
Small-C Compiler, Version 2.1, (Rev. 75)
Copyright 1982, 1983, 1985 J. E. Hendrix
char [op];
/\
**** must declare first in block
while(scanf("%f%c%f" ,&a,&op,&b)!=(-1))
/\
**** illegal address
case '-': rezultat = a - b; break;
/\
**** must be lvalue
case '*': rezultat = a*b ; break;
/\
**** must be lvalue
case '/': rezultat = a/b ; break;
/\
**** must be lvalue
Da li može neko da mi kaže šta treba da ispravim da bi se
program dobro kompajlirao?
cccc.48micko,
Zdravo,
Obzirom da nema uputstva za YACC u opkviru onoga sto je u PC.SOFT
svakako sam zainteresovan. Kako bi mogli da se dogovorimo obzirom da sam
iz NS
CODOR
cccc.49robert,
<:> main() /* 6 */
<:> { /* 7 */
<:> float (a,b); /* 8 */
<:> char [op]; /* 9 */
=====
<:> float [rezultat]; /* 10 */
===========
<:> putchar(PC); /* 11 */
Ono podvučeno su ti deklaracije za polja tj. u uglastim zagradama se
nalazi veličina deklarisanog polja. Pošto kod tebe nema imena polja, u
stilu: char ime [veličina], mora da dođe do greške. Ne znam kako je kod
Small C kompajlera ali kod normalnih kompajlera bi moglo da stoji sledeće:
...
main()
{
float a, b, rezultat;
char op;
putchar(PC)
... /* nastavak programa */
cccc.50mjova,
ne znam šta si ovim hteo da kažeš:
> float (a,b); /* 8 */
> char [op]; /* 9 */
> float [rezultat]; /* 10 */
ali tu je greška, ono bar za početak.
> float (a,b); /* 8 */
ovo je trebalo da bude neka deklaracija funkcije ili šta? postoji
float i zagrade, ali nema i imena fn. kad još pogledam i shvatim da
nema nikakve funkcije osim main, onda bi to trebalo da ima drugi
smisao:
float a, b; /* 8 */
slično je i za:
char op; /* 9 */
float rezultat; /* 10 */
greška je u tome što si hteo da napraviš promenljivu na sličan način
koji služi za definiciju nizova:
char niz[članova];
dakle pravim 'niz' char-ova, dužine 'članova'.
cccc.51dusanp,
Ja obecah pre nekog vremena, pa nista. Ova arhiva sadrzi
uputstva iz FLEX-a i BISONA (yacc za unix) slozena u W4Wu,
tako da uputstvo za lex staje na 8 strana, a uputstvo za yacc
na 16ak. Ukoliko bas ne koristite Word for Windows (zar ima i
takvih?) vicite, pa da posaljem samo tekst slozen po pasusima.
Inace je originalno uputstvo grozno prilagodjeno unixu i stampi
uz pomoc obicnog kopija na stampac.
lex-yacc.arjcccc.52zsiz,
$main()
${
$ float a, b, rezultat;
$ char op;
$ putchar(PC)
$ ... /* nastavak programa */
Evo šta kaže kompajler na gornje redove programa :
Copyright 1982, 1983, 1985 J. E. Hendrix
float a,b;
/\
**** no semicolon
char op;
/\
**** must declare first in block
float rezultat;
/\
**** no semicolon
Ostale primedbe su, kompajleru, ostale iste kao i pre:
while(scanf("%f%c%f" ,&a,&op,&b)!=(-1))
/\
**** illegal address
case '-': rezultat = a - b; break;
/\
**** must be lvalue
case '*': rezultat = a*b ; break;
/\
**** must be lvalue
case '/': rezultat = a/b ; break;
/\
**** must be lvalue
zsiz
cccc.53zsiz,
$ne znam šta si ovim hteo da kažeš:
$> float (a,b); /* 8 */
$> char [op]; /* 9 */
$> float [rezultat]; /* 10 */
$ali tu je greška, ono bar za početak.
$> float (a,b); /* 8 */
$ovo je trebalo da bude neka deklaracija funkcije ili šta?
To su linije u kojima se deklarišu promenljive. Ja sam prvo
napisao te linije prema onome kako mi predlažeš
$ float a, b; /* 8 */
$ char op; /* 9 */
$ float rezultat; /* 10 */
ali vidi šta mi je kompajler na to progunđao:
Copyright 1982, 1983, 1985 J. E. Hendrix
float a,b;
/\
**** no semicolon
char op;
/\
**** must declare first in block
float rezultat;
/\
**** no semicolon
Ostale njegove primedbe se nisu menjale i bile su:
while(scanf("%f%c%f" ,&a,&op,&b)!=(-1))
/\
**** illegal address
case '-': rezultat = a - b; break;
/\
**** must be lvalue
case '*': rezultat = a*b ; break;
/\
**** must be lvalue
case '/': rezultat = a/b ; break;
/\
**** must be lvalue
zsiz
cccc.54mjova,
> ali vidi šta mi je kompajler na to progunđao:
menjaj kompajler, to jednostavno mora da radi!
cccc.55robert,
<:> float a,b;
<:> /\
<:> **** no semicolon
E ovako, malo si čekao na odgovor ali to je zato što sam hteo da pogledam
taj bajni Small C kompajler. Ustanovio sam da on, pre svega, uopšte nema
floating point podršku tako da ne možeš da koristiš brojeve i aritmetiku u
pokretnom zarezu i zato ti javlja sve one greške. Zato deklariši sve
promenljive kao 'int' i teraj tako. Kao drugo, probao sam da napišem nešto
slično kao tvoj program ali nikako nisam uspeo da ga nateram da radi kako
treba !!! Prevede se ali posle ne radi ono što mu je rečeno. Zato još
jedan savet: pređi pod hitno na nešto bolje, za početak ti savetujem
TC 2.0. Nije velik (zauzima oko 2M sa svim drangulijama a može da se
skreše i na manje) i lepo radi i jednostavan je za korišćenje i ima help i
brate, kad pogrešiš, javi ti i šta i gde si pogrešio. Ovaj Small C
kompajler je, po meni, samo dat kao primer pisanja kompajlera (zato je i
dat sors) ali za ozbiljniji rad je suviše siromašan. Ja sam se sat vremena
samo nervirao oko njega ;).
Pozdrav.
cccc.56ppekovic,
>> Evo šta kaže kompajler na gornje redove programa :
>>
>> Copyright 1982, 1983, 1985 J. E. Hendrix
Koji to kompajler koristiš??? Ono što je robert napisao je
elementarni C program!
Paya
cccc.57dzakic,
> float a,b;
> /\
>**** no semicolon
> char op;
> /\
>**** must declare first in block
A možda tvoj C (ma kako to neverovatno zvučalo) jednostavno nema tip
float - seća li se još neko Amstrad/Spectrumovog Hisoft C-a? Probaj
da staviš int umesto float pa vidi šta se onda dešava. Ne zaboravi da
promeniš i formate u printf/scanf.
cccc.58zsiz,
>menjaj kompajler, to jednostavno mora da radi!
U pravu si.Hvala za pomoč.
Pozdrav.
zsiz
cccc.59zsiz,
>treba !!! Prevede se ali posle ne radi ono što mu je rečeno. Zato još
>jedan savet: pređi pod hitno na nešto bolje, za početak ti savetujem
>TC 2.0. Nije velik (zauzima oko 2M sa svim drangulijama a može da se
U pravu si. Da TC 2.0. Imam još od pre Tools za TC, a TC 2.0 je znatno
manji od MS C-a. Hvala za pomoč.
Pozdrav.
zsiz
cccc.60zsiz,
>A možda tvoj C (ma kako to neverovatno zvučalo) jednostavno nema tip
>float - seća li se još neko Amstrad/Spectrumovog Hisoft C-a? Probaj
>da staviš int umesto float pa vidi šta se onda dešava. Ne zaboravi da
>promeniš i formate u printf/scanf.
Program se kompajlirao bez greške ali kada se pokrene izbaci ? a kada
ja ukucam bilo koji char (* + / ili -) on uvek izbaci poruku da sam
pogrešio.
Da stavio sam int umesto float. Kompajler stvarno nema floapromenljive tipa
float.
cccc.61dzakic,
Pre nekog vremena ovde je govoreno o pisanju mouse event rutine. Tada je
rečeno i kako podesiti vrednost DS pri ulasku u nju: (large model)
asm mov ax, seg _DATA;
asm mov ds, ax;
E, fora je u tome što kompajler na ovo progunđa nešto u stilu "Unknown
symbol _DATA in..." Prestaje da se buni tek kad se prevođenje izvrši
preko asemblera (opcija -B). Nije da mi ovo nešto previše smeta, ali
ipak, ima li načina da se izbegne?
cccc.63petrovics,
Imam jedan program sa CodeViev V3.0 koji mi je uz MS C 6.0.
Naime, program lepo prevedem sa parametrima /Zi i /Od. Onda
pozovem CV i u njemu ucitam sors programa kojeg debagujem. Sors
se lepo pokaze ali cim startujem trejs ili step prikaze se
listing u asembleru i nemoze vise da se dobije u C-u (nece sa
F3). Inace na racunaru 386sx sa 2MB imam stavljen QEMM i
programe iz paketa PC Kwik.
Unapred hvala !
pozdrav, PACA
cccc.64mjova,
> preko asemblera (opcija -B). Nije da mi ovo nešto previše
> smeta, ali ipak, ima li načina da se izbegne?
možda je lakše da napišeš jednu pragma direktivu (inline)?
što se tiče drugog rešnja (nešto obuhvatnije za sve modele) mislim da
nije jednostavno izvesti iz drugih razloga (ali bi valjda moglo da se
sredi nekako?). svaki model ima drugačiji naziv za data segment (nper
razlika postoji između L i H modela u imenu - da ne davim sad time),
pa bi drugačije rešenje zahtevalo #if-ove itd.
drugo, u razmim modelima pointeri imaju drugačiji izgled (S, L i H) pa
se i o tome mora voditi računa.
pretpostavljam da postoji neka direktiva, ali opet asembleru, koja bi
podesila DS na ispravnu vrednos, ali kako sam pretrpan literaturom
originalnog paketa ;), onda ništa od toga.
trenutno mislim da je najbolje rešenje napisati EH u asmebleru, pa
onda lepo ulinkovati u exe.
cccc.65dzakic,
>> preko asemblera (opcija -B). Nije da mi ovo nešto previše
>> smeta, ali ipak, ima li načina da se izbegne?
>
> možda je lakše da napišeš jednu pragma direktivu (inline)?
A možda bih je i napisao kad bih bio pretrpan literaturom originalnog
paketa. :) Ovako... help za #pragma inline je jaaako 'opširan', pa se
verovatno nisam snašao u gomili informacija. Hvala.
> što se tiče drugog rešnja (nešto obuhvatnije za sve modele) mislim da
> nije jednostavno izvesti iz drugih razloga (ali bi valjda moglo da se
> sredi nekako?). svaki model ima drugačiji naziv za data segment (nper
> razlika postoji između L i H modela u imenu - da ne davim sad time),
> pa bi drugačije rešenje zahtevalo #if-ove itd.
Varijanta sa seg _DATA se OK prevodi (i čak radi:) u small, compact i
large modelu. Za tiny, medium i huge nisam instalirao biblioteke pa ne
mogu da probam. Ne vidim razlog zbog kog ne bi radilo i u prva dva.
cccc.66peca.st,
Ima li neko kod za snimanje i citanje *.pcx, *.gif ili *.tif formata?
Ako ima molio bih da ga posalje?
CU P e C a
cccc.67wizard,
>> Ima li neko kod za snimanje i citanje *.pcx, *.gif ili *.tif formata?
Ja sam to pitao pre nekoliko nedelja, i preporučio bih ti da uzmeš fajl
PBTECREF.ZIP iz \ibmpc\info direktorijuma. Odnosi se na .PCX i ima par
primera u C-u.
cccc.69peca.st,
!-> Ja sam to pitao pre nekoliko nedelja, i preporučio bih ti da
!-> uzmeš fajl PBTECREF.ZIP iz ĐibmpcĐinfo direktorijuma. Odnosi
!-> se na .PCX i ima par primera u C-u.
Ma uzeo sam ga... I njega i opise za *.gif i *.tif al' bre ono mnogo
nerazumljivo, pisano po komunistickim metodama : svasta prica a nista ne kaze.
Pomogao mi je skerl, dao mi je vec gotove procedure za TP.
Ipak thanks.
CU P e C a
cccc.70ppekovic,
>> se lepo pokaze ali cim startujem trejs ili step prikaze se
>> listing u asembleru i nemoze vise da se dobije u C-u (nece sa
>> F3).
Pogledaj opctions da li ti stoji display: source, assembly
ili mixed.
Paya
cccc.72djelovic,
Ima li (lakog) leka:
Kada iz IDE-a startujem prekompajlirani program, on prepoznaje ALT SPACE,
dok taj isti program startovan sa komandne linije ALT SPACE vidi samo kao
SPACE. Da li je to neki bug Borlandove biblioteke, ili IDE krpi bios da bi ovaj
prepoznavao tu kombinaciju?
cccc.73bulaja,
│Kada iz IDE-a startujem prekompajlirani program, on prepoznaje ALT SPACE,
│dok taj isti program startovan sa komandne linije ALT SPACE vidi samo kao
│SPACE. Da li je to neki bug Borlandove biblioteke, ili IDE krpi bios da
│bi ovaj prepoznavao tu kombinaciju?
└───
Alt-Space kombinaciju standardni BIOS ne prepoznaje (znaci nije bug std
lib-a), a koliko sam primetio ni IDE u BC++ verziji 2.0. Ako BC++ 3.x
prepoznaje Alt-Space, onda to jedino ako zaobilazi keyboard BIOS, sto
verujem i da radi.
cccc.74mjova,
> Ima li (lakog) leka:
čini mi se da sam ti dao lek za to?
cccc.75nbatocanin,
> Imam jedan program sa CodeViev V3.0 koji mi je uz MS C
> 6.0. Naime, program lepo prevedem sa parametrima /Zi i
> /Od. Onda pozovem CV i u njemu ucitam sors programa kojeg
> debagujem. Sors se lepo pokaze ali cim startujem trejs ili
> step prikaze se listing u asembleru i nemoze vise da se
> dobije u C-u (nece sa F3).
Jesi li *siguran* da si dobro preveo i ulinkovao? LINK /CODEVIEW ?
cccc.76djelovic,
> čini mi se da sam ti dao lek za to?
Jes, but tvoj lek ipak zauzima nešto prostora, a ja tražim minimalističko,
po memoriju jeftino, rešenje. No, kako izgleda da nema šanse da se BIOS natera
da prepozna recimo SHIFT+DESNA_STRELICA, onda ću na kraju morati da popustim
pred silama haosa i bezumlja :).
cccc.77mjova,
> Jes, but tvoj lek ipak zauzima nešto prostora, a ja tražim
> minimalističko,
najmanje što možeš dobiti je da uzmeš zamenu za interapt 9, getkey() i
možda kon/destruktor iz tehničkih razloga.
cccc.78petrovics,
>> Jesi li *siguran* da si dobro preveo i ulinkovao? LINK /CODEVIEW ?
Sad je sve u redu. Ja sam lose preceo program, umesto:
cl /Zi <ime.c>
ja sam kucao:
cl <ime.c> /Zi
cccc.79stanoje,
> Ima li (lakog) leka:
Najprostije cega mogu da se setim je novi getch(). Otprilike bi
mogao da izgleda ovako:
int ds_getch(void)
{
int key, lo, hi,shift;
key = bioskey(0);
shift = bioskey(2) & 0x0003;
lo = key & 0x00FF;
hi = (key & 0xFF00) >> 8;
if(lo)
{
if((lo <= 32)&&shift)return lo + 512;
else return lo;
}
else
{
if(shift)hi+=512;
return hi+256;
}
} /* ds_getkey */
Dakle ako je pritisnut shift, dobijas normalne vrednosti uvecane za
512.
Dalje prosiri sam za ALT i ostalo (ako ti se resenje svidja).
P.S. Prepoznaje i shift+desna strelica.
cccc.80prvul,
Juče sam se nešto petljao sa TC++ 2.0 i nikako nisam mogao
da nađem funkcije za brisanje fajla niti za postavljanje atributa.
Znam da to može da se uradi kao poziv DOS-u, ali mi je nekako
nelogično da su tako osnovne stvari propustili da ugrade... Pomagajte!
cccc.81dusanp,
Da li je jos neko koristio spawn*.* biblioteke iz
C direktorijuma? Svima ih preporucujem jer su jednostavne,
rade bez greske, i mene su resile velike glavobolje...
cccc.82dusanp,
=> da nađem funkcije za brisanje fajla niti za postavljanje
=> atributa.
▄▄▄▄▄▄▄▄
ŢunlinkŮ <DOS.H, IO.H, STDIO.H>
▀▀▀▀▀▀▀▀
Deletes a file
Declaration: int unlink(const char *filename);
Remarks:
unlink deletes a file specified by filename. Any DOS drive, path, and file
name can be used as filename. Wildcards are not allowed.
Read-only files can't be deleted by this call. To remove read-only files,
first use chmod or _chmod to change the read-only attribute.
If your file is open, be sure to close it before unlinking it.
Return Value:
■ On success, unlink returns 0.
■ On error, it returns -1 and sets errno to one of the following:
ENOENT Path or file name not found
EACCES Permission denied
........
Ů▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀Ţ
Ů _chmod, Ţ <IO.H> <DOS.H>
Ů _dos_getfileattr, _dos_setfileattr Ţ
Ů▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄Ţ
Gets or sets file attributes
Declaration:
■ int _chmod(const char *path, int func Š , int attrib Ć );
■ int _dos_getfileattr(const char *path, unsigned *attribp);
■ int _dos_setfileattr(const char *path, unsigned attrib);
Remarks:
These functions get and/or set the DOS file attributes of the file given by
*path:
■ _chmod gets or sets the attributes
■ _dos_getfileattr gets the attributes
■ _dos_setfileattr sets the attributes
Argument │ What It Is/Does
══════════ě════════════════════════════════════════════════════════════════
path │ Points to a string that names the file whose attributes are
│ fetched or set; *path = first character of that string
func │ Specifies whether _chmod gets or sets attributes of the file
│ *path:
│ ■ If func = 0, _chmod returns the current DOS attributes
│ ■ If func = 1, _chmod sets the attributes to attrib
attrib │ One of the DOS file-attribute symbolic constants defined
│ in DOS.H.
attribp │ Points to location where _dos_getfileattr stores attributes
Return Value:
■ On success,
■ _chmod returns file attribute word
■ _dos_getfileattr and _dos_setfileattr return 0
■ On error,
■ _chmod returns -1 and sets errno to one of the following:
ENOENT (Path or file name not found)
EACCES (Permission denied)
■ _dos_getfileattr returns the DOS error code and sets errno to
ENOENT or EACCES
■ _dos_setfileattr returns the DOS error code and sets errno to
ENOENT
cccc.84mjova,
> Da li je jos neko koristio spawn*.* biblioteke iz
ajde napiši malo o tome, imam nameru da ih probam (već duže vreme),
ali baš me mrzi da čitam doc. daj kraći primer, tek za start, a posle
ćemo lako. thanks in advance ;)
cccc.85prvul,
Ů ŢunlinkŮ <DOS.H, IO.H, STDIO.H>
Ů
Ů Ů _chmod, Ţ <IO.H> <DOS.H>
Ů Ů _dos_getfileattr, _dos_setfileattr Ţ
Ů▄▄▄
Mnogo ti hvala!
cccc.86todorp,
main () {
_AH=0x02;
_DL=0x07;
asm int 21
}
Zasto ovo ne radi? Ja nemam nigde objasnjenje za pseudo registre a help za
tubo C nije nesto.
Pozdrav od Todora.
cccc.87dusanp,
=> ajde napiši malo o tome, imam nameru da ih probam (već
=> duže vreme), ali baš me mrzi da čitam doc. daj kraći
=> primer, tek za start, a posle ćemo lako. thanks in
=> advance ;)
Biblioteka je super jednostavna za korišćenje, a arhiva
je tako spakovana da uplaši čoveka. I ja sam je već jednom
ranije uzeo sa sezama, a onda rekao "ko će da čita dokumen-
taciju" i batalio. E tu sam pogrešio.
Biblioteka dolazi u nekoliko oblika - za Borland C, MsC
i TP. Nas, jelte;) zanima Borland verzija. Pošto su biblio-
teke i pisane za BC, one se tako najlakše koriste.
Funkcije u biblioteci su tako pisane da zamenjuju spawn*
funkcije samog BCa. Da bi ih koristio, potrebno je samo bi-
blioteku za mem. model u kome radiš uključiti u projekt fajl,
obično na sam kraj. I POSAO JE GOTOV! Naravno, postoji i par
funkcija kojima možeš da podesiš rad lib-a, ali je meni sve
odgovaralo i bez toga. Znači, praktično bez ikakve izmene u
programu dobijaš velike mogućnosti.
Evo kako je meni ova biblioteka poslužila:
Radio sam veliki program za jednu firmu. On se sastojao (zbog
više razloga) iz glavnog programa (od oko 350k) i desetak manjih
(od po 200k). E, sad, spawn "prvog stepena" (poziv programa iz
osnovnog) je radio, ali kada je bilo potrebno pozvati treći
program iz drugog, nije imalo mesta (u donjih 640k). Tada sam
u .prj file dodao linkovanje sa SPAWNL.LIB (ovo je lib za large
model, spawns.lib je za small itd.) i ceo problem je bio rešen
in no time! Uz to sam u gornjoj memoriji (a ona je bila dodeljena
keš programu) napravio rupu od 400k da bi se tu svapovao program
i to je sve.
Ono podešavanje načina rada se može koristit, ali i ne mora, jer
program pokušava da svapuje u XMS, EMS pa tek tada na disk, što je
sasvim logično i OK.
cccc.88mjova,
> asm int 21
> Zasto ovo ne radi? Ja nemam nigde objasnjenje za pseudo
> registre a help za tubo C nije nesto.
verovatno si mislio na int 0x21. ono što si ti napisao je int 0x15, a
to ti nije bila želja, verovatno? ;)
drugo, izbegavaj popunjavanje registara preko _AX, _BX itd.., bolje
otvori asm i lepo popuni sa 'mov ax, n' itd..
cccc.89mjova,
> Biblioteka dolazi u nekoliko oblika - za Borland C, MsC
> i TP. Nas, jelte;) zanima Borland verzija. Pošto su
mislim da telemate koristi te rutine, i to sa velikim uspehom
cccc.90todorp,
> verovatno si mislio na int 0x21. ono sto si ti napisao je int 0x15,
> a to ti nije bila zelja, verovatno? ;)
Stvarno sam teski konj ;(( Upravu si.
> drugo, izbegavaj popunjavanje registara preko _AX, _BX itd.., bolje
> otvori asm i lepo popuni sa 'mov ax, n' itd..
Zasto da izbegavam? asm naredbu ne volim zato sto radim u turbo C-u koji
ne dozvoljava asm naredbu u IDE :(,za ++ neznam.
Pozdrav od Todora.
cccc.91garderp,
Pošto nikad nisam koristio spawn iz Sezamovog direktorijuma, već
onaj koji ide uz BC, zanima u čemu je bolji onaj na Sezamu.
Koliko sam ja shvatio, podržan je automatski swap u XMS,EMS,DISK
memoriju. Da li je to sve?
cccc.92tuci,
¸> Zasto da izbegavam? asm naredbu ne volim zato sto radim u turbo C-u koji
¸> ne dozvoljava asm naredbu u IDE :(,za ++ neznam.
Probaj da staviš ovu liniju na početak fajla:
#pragma inline
U IDE TC++ pali, odnosno dozvoljava asm naredbu.
Pozdrav, Zlatko
cccc.93mjova,
jel raddio neko rutinu za sređivanje dos putanje na pravilnu vrednost?
dos dozvoljava i lutanje po disku sa:
c:\modem\..\command.com (c:\command.com)
pa me zanima da li ne neko uradio to za sve ostale slučajeve? ja ih
možda ne znam sve pa zato i pitam. ima situacija:
c:file.ext
c:\dir1\dir2\..\file.ext
c:.\file.ext
itd. ne znam da li sam nabrojao sve, ako neko zna da ima još nešto nek
mi kaže, rutina nije problem...
u paskalu postoji funkcija 'fexpand' koja radi baš ono što meni treba,
ali za C ;), a ja trenutno ne znam kako mogu da prevedem paskal u obj
ili asm (legalno, bez sorsera i ostalih pomagala).
cccc.94todorp,
> Probaj da stavis ovu liniju na pocetak fajla:
># pragma inline
Probao i ispisuje mi:
in-line assembly not allowed in function main
Pozdrav od Todora.
cccc.95dusanp,
=> Koliko sam ja shvatio, podržan je automatski swap u
=> XMS,EMS,DISK memoriju. Da li je to sve?
Da, zar je to mali pomak?
cccc.96mjova,
> c:file.ext
> c:\dir1\dir2\..\file.ext
> c:.\file.ext
dobro, vidim diskusija se razvila ;) pa evo i ja da dodam nešto ;)
uradio sam fexpand, ako neko misli da nije komplet nek dopuni i javi!
fexpand.arjcccc.97ppekovic,
>> dobro, vidim diskusija se razvila ;) pa evo i ja da dodam nešto ;)
>>
>> uradio sam fexpand, ako neko misli da nije komplet nek dopuni i javi!
;))) Kolko muke oko proste stvari. Ja sam to uradio na
sledeci način:
getcwd(pamti_dir,64);
chdir(ona_tvoja_kobasica_mjovo);
getcwd(vise_nije_kobasica,64);
chdir(pamti_dir);
;)
Paya
cccc.98nkbog,
> jel raddio neko rutinu za sređivanje dos putanje na pravilnu vrednost?
A šta da radimo sa _fullpath:
-----------------------------------------------
Converts a path name from relative to absolute
Declaration: char * _fullpath(char *buffer, const char *path, int buflen);
(<STDLIB.H>)
buffer │ Points to array of characters where absolute path name is stored
buflen │ Maximum number of characters that can be stored at buffer
path │ Relative path name to be converted to absolute
_fullpath returns NULL if the buffer isn't big enough to store the absolute
path name, or if the path contains an invalid drive letter.
Return Value
- On success, returns a pointer to the
buffer containing the absolute path name
- On error, returns NULL.
-----------------------------------------------
NB.
P.S. Ima ga BC++, a trebalo bi i MSC.
P.P.S. A povodom TPascal FExpand-a evo šta piše u sorsu za _fullpath:
> Note This function is a rewrite of the FExpand procedure
> in the Turbo Pascal RTL, with modifications for MSC
> compatibility.
cccc.99ppekovic,
>> P.S. Ima ga BC++, a trebalo bi i MSC.
Ima i MSC.
Include: <stdlib.h>
Syntax: char *_fullpath( char *buffer, char *pathname,
size_t maxlen );
Returns: a pointer to the absolute path in <buffer>, or NULL if
an error occurs.
See also: getcwd, _getdcwd, _makepath, _splitpath
Paya
cccc.100d.petrovic,
Trebalo bi da je lokoćno instalirati C3.0? E, pa meni nije :((
Oslobodim > 18 MB na disku, memorije > 600 KB pa...
b:
install
Neću da bude C:ĐBORLANDC hoću C:ĐTC, neću Huge i neću Windows
disketa 1,2,...,7,8 ??? na osmoj kaže da nema fajla
C:ĐTCĐBINĐUNZIP.EXE press Esc ???!!!
Naravno inkriminisani fajl je tu, dotad se više puta izvršavao,
i još uvek je tu, samo što install nije hteo da raspakuje par
poslednjih fajlova (a ja neznam u koje direktorijume da ih stavim)
Pre toga sam ga već jednom instalirao (totalno ojađena verzija,
zauzela < 3 MB) pa kad sam video da ima mesta reko' ajde i ostalo,
taj put je sve prošlo kako treba samo što BC nije hteo da se staruje
reče nešto kao ...
DPMI server initialization error->machine not in database
da ne eksperimentišem ponovo, zna li neko u čemu je problem?
Ostali su neraspakovani sa osme diskete (dal treba i deveta?):
BC.ZIP
TD.ZIP
WHELP.ZIP
TASM.ZIP
cccc.101mjova,
> ;))) Kolko muke oko proste stvari. Ja sam to uradio
> na sledeci način:
pa jeste, takvo rešenje sam ja koristio za SCD, ali nisam bio
zadovoljan jer u izvesnim situacijama ne radi kako treba, a i ne volim
da menjam ono što je korisnik podesio, pa makar i vraćao kasnije ;).
inače, ono za kobasicu... cccc, pajo... ;)))
cccc.102darone,
>> chdir(ona_tvoja_kobasica_mjovo);
;)))
darone
cccc.103wizard,
>> da ne eksperimentišem ponovo, zna li neko u čemu je problem?
Ja sam morao da isključim keš (hyper) da bih instalirao BC 3.0. I ne
samo za BC, već i za svaki paket koji pri instalaciji brši puno
dezarhiviranj, brisanja, dezarhiviranja...
A hyper sam svojevremeno odabrao baš posle testa u kome su se NCACHE i
PC-CACHE zaglupljivali pri intenzivnom arhiviranju, dezarhiviranju,
brisanju, pa onda opet...
Dakle, probaj sa isključenim kešom...
cccc.104mjova,
> P.S. Ima ga BC++, a trebalo bi i MSC.
>> in the Turbo Pascal RTL, with modifications for MSC
jok, nema to u BC++ 2.0. možda ima u nekom drugom, ali ja nemogu da
nađem tu fn ni u .h ni u helpu. verovatno se odnosi samo na MSC.
sad sam pregledao, i u bibliotekama stvarno postoji, ali definicija
nije navedene ni u jednom .h niti se pominje u helpu. svašta!
verovatno je u pitanju nekakva kompatibilnost sa msc-om...
thanks!
cccc.105d.petrovic,
Ă> Dakle, probaj sa isključenim kešom...
Probato poslednji put sa isključenim svim osim smartdrv iz dos-a (da
bih napravio > 600 KB oosnovne memorije), sad će probam bez ništa :)
cccc.106mjova,
> sad sam pregledao, i u bibliotekama stvarno postoji, ali
> definicija nije navedene ni u jednom .h niti se pominje u
> helpu. svašta! verovatno je u pitanju nekakva
normalno kad su .h i help iz 2.0, a lib iz 3.0 ;)
cccc.107mornar,
Jel bi mogao neko da napise mali listing programa u C-u koji bi prikazivao
.BMP (Bitmap-Windows) ili .LBM slicice, u 256 i vise boja ? Ako neko zna, neka
ga ne mrzi, moze samo i da objasÚ]ni recima. Hvala unapred.
Pozdrav, Mornar.
cccc.108garderp,
> Da, zar je to mali pomak?
Nije!
cccc.109dusanp,
=> jok, nema to u BC++ 2.0. možda ima u nekom drugom, ali ja
=> nemogu da
Ima u 3.1.
cccc.110todorp,
Hi
Cini mi se da sam otkrio bug u turbo C-u 2.01 (za ostale neznam). Naredba
fprintf(file,"%s",buffer) zakucava makinu kada je buffer veci od oko 26kb.
On pocne da stampa buffer u fajl i negde oko 26-og Kb zaglavi. Sa fwrite
me mrzelo da probam. Resio sam problem na sporiji nacin preko fputc ali...
Pozdrav od Todora.
cccc.111d.petrovic,
Jel može neko da mi objasni šta sam sad zabrljao? ;) Imao sam na
disku TC 1.0 pa sam ga utamanio i instalirao (zbog TD-a) BC 3.0. E,
sad program koji je kroz TC prošao ovde neće jerbo ovaj novi
prijavljuje grešku u DOS.H ! Još mi nudi da gamenjam ;), a ja se
jedva snalazim i s' ovim što sam ja napisao ;(. Ima neko ideju šta ne
valja ?
Error ..ĐDOS.H 305: Value of type void is not allowed
305: ) expected
315: Value of type void is not allowed
315: ) expected
343: ) expected
cccc.112mjova,
> sad program koji je kroz TC prošao ovde neće jerbo ovaj
> novi prijavljuje grešku u DOS.H ! Još mi nudi da gamenjam
> ;), a ja se
ima tu nekih problema, nešto slično se i meni dešavalo. nisam
ustanovio problem u dos.h fajlu već u programu koji sam kompjalirao
(dflat C++ 1.0). kako je dos.h bio uključen više puta (najviše mrzim
kad se #include <*.h> postavi u sam "*.h" - ako ne mora).
ovako ti više ništa ne mogu reći..
cccc.113d.petrovic,
Rešio ja opet a nešto kao malo učim C i... evo rezultata. :(((
Kako da ovo izvedem, hoću da na kraju promenljiva izvorni pokazuje na
ime fajla koji treba da otvorim. Malo je smuljano jer sam ovo bio
počeo da radim u dva fajla pa sam sad sastavljao i... jel oće neko da
malkice objasni kad i zašto ovaj hoće da daje ekstenziju .c a kad
.cpp, dosta vam je za jedan dan, nastavak u sledešem broju :)
#include <stdio.h>
#include <conio.h>
ime_fajla(void);
main(void) š
char *izvorni,*izlazni;
int ul_ras, izl_ras;
printf("ĐnUnesite ime fajla : ");
izvorni=&ime_fajla(); /* <- OVDE ? */
return(0);
ć
char *ime_fajla(void) š /* <- OVDE ? */
char fajlŠ12Ć, temp=0;
int poz=0, brojac=0;
while(temp!='Đr' && poz<8 && temp!='.') š
temp=getch();
putch(temp);
fajlŠpozĆ=temp;
poz++;
ć
if (temp!='.' && temp!='Đr') š
putch('.');
fajlŠpozĆ='.';
ć
while(temp!='Đr' && brojac<3) š
brojac++;
temp=getch();
putch(temp);
fajlŠpoz+brojacĆ=temp;
ć
return(fajl); /* <- OVDE ? */
ć
cccc.114robert,
<:> char *ime_fajla(void) { /* <- OVDE ? */
<:> char fajl[12], temp=0;
...
<:> return(fajl); /* <- OVDE ? */
E pa napravio si osnovnu grešku (FATAL ERROR) u programiranju. Hoćeš da
vratiš iz potprograma (funkcije) promenljivu koju si deklarisao kao
lokalnu za tu proceduru. To znači da promenljiva fajl postoji samo dok se
izvršava procedura *ime fajla(void), posle toga je njena vrednost
nedefinisana, tj. ne postoji! Možda ti i dobiješ neke suvisle rezultate
ali to je samo naizgled jer se posle izvršenja procedure dealocira prostor
koji je niz fajl zauzeo tako da tu u principu može da se upisuje neka
druga lokalna promenljiva pa bi, da ti je program nešto veći, to i
primetio u vidu brljotina u nazivu fajla koji treba da bude vraćen. Mislim
da nije potrebno u glavnom programu stavljati:
izvorni = &ime_fajla(); već može i
izvorni = ime_fajla; ako deklarišeš char *izvorni;
jer ti procedura vraća pointer pa ladno možeš da dodeljuješ pointer
pointeru i izvorni će ti ukazati tamo gde treba. Onako bi bilo kao da
dodeljuješ adresu pointera što je takođe nebuloza.
Lek ti je u tome da deklarišeš niz fajl kao globalnu promenljivu pa će
prostor za nju biti alociran dok traje program.
cccc.115d.petrovic,
Ă> E pa napravio si osnovnu grešku (FATAL ERROR) u programiranju.
Ă> Hoćeš da vratiš iz potprograma (funkcije) promenljivu koju si
Ă> deklarisao kao
Biće da je to, radio sam nešto slično jednom pa je nekako
prošlo, ovog puta nisam mogao da se setim kako sam tada radio, ono
prvo čudovište sam izbrisao sa diska da ne umrem od sramote ako ga
neko vidi ;((
Ă> pointeru i izvorni će ti ukazati tamo gde treba. Onako bi bilo
Ă> kao da dodeljuješ adresu pointera što je takođe nebuloza.
Ma to znam, ali posle 17-og pokušaja, kad nikako nije hteo da
proguta ono što sam mu servirao, menjao sam i u nebuloze, pa nisam ni
video šta sam poslao...
Ă> Lek ti je u tome da deklarišeš niz fajl kao globalnu promenljivu
Ă> pa će
Probaću čim završim sa sor-om i exec-om, ali... postoji li još
neko rešenje, tj. da se možda to izvede deklaracijom funkcije ili...,
pa funkcija treba da vraća neku vrednost, zašto onda ne bi mogla da
vrati pointer? Ne očekujem baš preopširna objašnjenja, ako te mrzi,
dovoljno je i uputiti na literaturu i poglavlje O:)
Hvala, Dejan
cccc.116zkadic,
Molio bih obaveštenje da li ima, i koje su, razlike između trećeg
(1990 g.) i četvrtog (1991 g.) izdanja knjige "Uvod u C" V.Vujičića
u izdanju "Borisa Kidriča". Na prvi pogled nisam uočio nikakvu
razliku (osim naslovne strane).
Ovo pitam pošto u knjižari PLATO ima to treće izdanje za 12.000,
a nova knjiga košta preko 26.000 dinara.
P.S. Ostao je samo još jedan primerak.
cccc.117robert,
<:> pa funkcija treba da vraća neku vrednost, zašto onda ne bi mogla
<:> da vrati pointer? Ne očekujem baš preopširna objašnjenja, ako te
<:> mrzi,
Ono u tvom primeru je OK kad ispraviš one dve greške. Naravno da f-ja može
da vraća pointer i to se često koristi.
cccc.119bulaja,
**** new files ****
\IBMPC\PROGRAM\
tdqna arj 7486 Turbo Debugger pitanja i odgovori (Borland)
\IBMPC\C\
bc31p1 zip 11203 Patch #1 za Borland C++ v3.1 (fix NEW operator)
bc31p2 zip 52550 Patch #2 za Borland C++ v3.1 (Tlink)
bc31p3 zip 8873 Patch #3 za Borland C++ v3.1 (tbrowser.dll)
bc_qna arj 11737 Borland/Turbo C++ pitanja i odgovori (Borland)
pxetip arj 8647 Paradox Engine 2.0 programming tips (Borland)
tsr_c arj 22720 Primer (C source) rezidentnog programa (Borland)
cccc.120miroljub,
U poddirektorijumu R:\IBMPC\C na Sezamu nalazi se datoteka DFLAT9.ZIP
(biblioteka za user interface za C). Pokusao sam da je upotrebim u TURBO-C-u
verzija 2.0 ali nisam uspeo. U heder datoteci DFLAT.H (linije 14 i 15) traze se
INCLUDE direktivom datoteke TYPES.H i STAT.H , a njih nema u DFLAT9.ZIP .
Moze li neko da pomogne? Moderator?
Miroljub
cccc.121nkbog,
> traze se INCLUDE direktivom datoteke TYPES.H i STAT.H, a njih nema u
> DFLAT9.ZIP.
Pogledaj u SYS\ potkatalogu INCLUDE kataloga, ako tamo nema, onda ti to
fali u tvom C-u. To su dva standardna zaglavlja.
NB.
cccc.122bulaja,
│U poddirektorijumu R:\IBMPC\C na Sezamu nalazi se datoteka DFLAT9.ZIP
│(biblioteka za user interface za C). Pokusao sam da je upotrebim u TURBO-C-u
│verzija 2.0 ali nisam uspeo. U heder datoteci DFLAT.H (linije 14 i 15) traze
│se INCLUDE direktivom datoteke TYPES.H i STAT.H , a njih nema u DFLAT9.ZIP.
└───
Pogledaj u svoj (TC-ov) direktorijum \include\sys :).
cccc.123mjova,
ima li neko možda informaciju kako se može prebaciti u običan tekst
ili kakav je format help datoteke za borland c? imam strahovitu
potrebu da to prebacim u *.ng, ali nemam nameru da radim cut&paste ;)
nešto sam pokušavao da petljam po bazi, ali zaludan je to posao,
naročito zbog nekakve interne kompresije... bljak je skroz ;)
cccc.124vpetrovic,
Zašto mi program kompajliran sa TC 2.0 ponekad prilikom završetka programa
funkcijom exit ispiše 'Null pointer assignement' (možda se ne piše baš
tako).
Vlada
cccc.125ppekovic,
>> Zašto mi program kompajliran sa TC 2.0 ponekad prilikom završetka programa
>> funkcijom exit ispiše 'Null pointer assignement' (možda se ne piše baš
>> tako).
Ova greška se javlja kada program upiše nešto van onih zona
koje je sam alocirao. Da ne komplikujem, dešava se kad u neku
promenljivu upišeš nešto što je duže on alociranog mesta za nju i
sl. Nezgodna stvar sa ovom greškom je što se pojavljuje uvek na
kraju programa a uzrok greške može biti bilo gde u programu.
Paya
cccc.126vasic,
> Zašto mi program kompajliran sa TC 2.0 ponekad prilikom završetka programa
> funkcijom exit ispiše 'Null pointer assignement' (možda se ne piše baš
> tako).
Kao prvo, da bi se ovo desilo program mora biti preveden u nekom od near
data modela. Na dnu data segmenta stoji Borlandova copyright poruka. Ako
se desi da u programu imaš nešto kao
char* s; // Ovo je statički podatak, po defaultu inicijalizovan na 0
int main()
{
*s = 'A'; // Evo, baš ovo je 'Null pointer assignment'
//...ili...
s[10] = 'B';
//...
return 0;
}
poruka će biti izmenjena, a izlazni kod to proverava i izbacuje poruku o
grešci. Proveri da li si inicijalizovao sve pointere koje koristiš. Ovu
grešku je nemoguće dobiti u nekom od far data modela jer se tamo provera
ne vrši. To naravno ne znači da program radi ispravno već samo da umesto
svog data segmenta gađa tabelu interapt vektora ili nešto drugo
podjednako beznačajno.
cccc.128ppekovic,
>> Da li uvek to napiše kada postoji greška, ili ako program upisuje
>> van zone koje je alocirao onda možda napiše?
Ako imaš sledeću situaciju:
char prvi[5], drugi[5];
strcpy(prvi,"vise od pet");
U ovom slučaju se neće pojaviti Null pointer
assignment greška.
Međutim, u sledećem:
char *pera;
strcpy(pera,"mika");
najverovatnije hoće.
Evo šta piše u MSC Help-u o toj greški:
Run-time error R6001
null pointer assignment
The contents of the NULL segment have changed in the course of
program execution. The program has written to this area, usually
by an inadvertent assignment through a null pointer.
The NULL segment is a location in low memory that is not normally
used. The contents of the NULL segment are checked upon program
termination. If a change is detected, the error message is printed
and the exit code is 255.
Note that the program can contain null pointers without causing
this error. The error appears only when the program writes to
memory through a null pointer. It reflects a potentially serious
error in the program. Although a program that produces this error
may appear to operate correctly, it may cause problems in the
future and may fail to run in a different operating environment.
Paya
cccc.129dragisak,
MSC 6.00 mi uvek javlja sledeću poruku kada mu dam da mi prevede bilo koji
program :
Microsoft (R) Overlay Linker Version 3.65
Copyright (C) Microsoft Corp 1983-1988. All rights reserved.
LINK : fatal error L1089: "005348LK" : cannot open response file
Šta mu je ? Ranije mi je radio bez problema.
Koji će mu taj 'response file' ?
Komanda je najobičnija : CL /AS xxx.C
cccc.130mjova,
mali editor linije. nije editor fajlova ;) već treba
da posluži za podešavanje opcija itd. ima mali primer
pa kome se čini zanimljivim nek uzme..
normalno, Borland ;)
linedit2.arjcccc.131ppekovic,
>> LINK : fatal error L1089: "005348LK" : cannot open response file
Proveri mesto na disk-u, zatim one environment promenljive.
Meni se to jednom desilo ali nema šanse da se setim u čemu je
tačno bio problem.
Tup, Tup, Tup, seti se, seti se, seti se ... :))
Paya
cccc.132mornar,
Moze li neko da mi objasni kako se moze odrediti velicina memorije
koju treba alocirati za rezidentan program, tako da radi sasvim kako treba,
a da pri tome ne od5z`ma dragicenu memoriju. Ovo sam stavio u konferenciju
cccc zato sto mi je potrebna pomoc ove vrste u jednom C programu, ali ako
neko ne zna kako to ide u C-u, a zna inace, molim neka objasni. Hvala.
Mornar.
cccc.133miroljub,
Ako neko ima knjigu
Turbo C: Memory-Resident Utilities, Screen I/O, and Advanced Programming
Techniques, Al Stevens, 1987, MIS: Press
molim da mi se javi
Miroljub
cccc.134mjova,
> Microsoft (R) Overlay Linker Version 3.65
> Copyright (C) Microsoft Corp 1983-1988. All rights reserved.
> LINK : fatal error L1089: "005348LK" : cannot open
> response file
kako vidim da ti se niko od MSC-ovaca ;) ne javlja, evo da ti ja
reknem kako se rešava taj problem u borlandovim programima (tlink,
tlib..)
elem, u helpu linkera piše ovako:
@xxxx indicates use response file xxxx
u tom fajlu se nalaze opisi (da ne detaljišem ;) šta treba
linkovati ili šta treba da bude uključeno u neku biblioteku. pošto
je značenje reči RESPONSE jedinstveno u engleskom jeziku, kontam da
je u pitanju ista stvar i za msc (možda druge strukture, ali to je
to).
e sad, kako rešiti problem? nemam pojma jer ne koristim ništa od
microsoft-a. mislim da bi mogao neko i da ti pomogne oko toga, jer
sam sigurand a postoje oni koji ga koriste samo su lenji u pisanju
poruka...
pretpostavljam da treba da pogledaš komandnu liniju ili ako si u
PWB (lupam - nikad video) da pretreseš sve podešene stvari oko
linkovanja (borland ima projektni fajl - nešto slično ima valjda i
msc?).
cccc.135mjova,
> a da pri tome ne od5z`ma dragicenu memoriju. Ovo sam
> stavio u konferenciju cccc zato sto mi je potrebna pomoc
> ove vrste u jednom C programu, ali ako neko ne zna kako to
> ide u C-u, a zna inace, molim neka objasni. Hvala.
pogledaj primere napravljene za TSR programe u arhivi amisl???.*
(ili tako nekako ;) na sezamu. tamo je sve napravljeno (i unload)
potrebno je smao da upišeš svoj program.
cccc.136todorp,
> Moze li neko da mi objasni kako se moze odrediti velicina memorije
> koju treba alocirati za rezidentan program, tako da radi sasvim kako
Pazi 'vako ;) ja sam se dosta (cuj dosta) gnjavio sa tsr-ovima u C-u i dosao
do zakljucka da je to sranje a evo i zasto:
1. Uzima mnogo mesta u memoriji
2. Rutine koje treba da su brze treba pisati u asm i jos neke sitnice
3. Nemogucnost (ili treba zongliranje) da se iskoristi int 27h vec se koristi
funkcija 31h koja ostavlja sve u memoriji (keep(),_dos_keep()).
4. mrzi me dalje da pisem
E sad da ne bude da samo se*em, evo da ti odgovorim:
Za pocetak moras da znas kako izgleda memorija po startovanju programa (gde
ti je heap, data code,stack itd jer mi se cini da nije isti raspored kod
msc-a i tc-a) i sta dos radi (ono otvaranje psp-a, registri ss i sp itd).
Ako koristis tc++ imas lep primer u helpu za keep naredbu a i u racunarima je
bio zz-ov clanak. E sad meso:
Kad iskopajliras program u tiny modelu i startujes ga on ti pojede 64k. E
sad ako program nije veliki onda je najveci deo otpao na heap i stack. E
njih mozes da skreses sa _heaplen i _stklen (tc). Znaci napisi recimo
_heaplen=1024 i _sklen=512 i imaces samo par kilobajta u memoriji, ali zato
pazi na komande koje rade sa heapom. Za keep (vazi za tc za msc mislim da
ne vazi) napises keep(0,(_ss+(_sp/16)-_psp)); _ss i _sp ti oznacavaju
gornju granicu a _psp donju. Mozes da se zamajavas sa char huge *progbeg i
*end ali ti to ne preporucujem.
Ufff sad tek vidim da udavih, so necu vise :))) a i konfuzan sam :( Ako ti
nije jasno pitaj konkretno ali ti savetujem da nabavis neku stvarno dobru
knjigu i pogledas primere uz bc++ i iz helpa za tc++.
Pozdrav od Todora.
cccc.137todorp,
> Ako neko ima knjigu
> Turbo C: Memory-Resident Utilities, Screen I/O, and Advanced Programming
> Techniques, Al Stevens, 1987, MIS: Press
Ovo bi i mene zanimalo ;)
Pozdrav od Todora.
cccc.138bulaja,
│Ako neko ima knjigu Turbo C: Memory-Resident Utilities, Screen I/O,
│and Advanced Programming Techniques, Al Stevens, 1987, MIS: Press
└───
Ne znam da li si vec pogledao (mozda jesi pa bas zato trazis knjigu :),
ali imas u C direktorijumu (r:\ibmpc\c) datoteku tc_als.arj (76 KB) u
kojoj se nalazi source svih primera iz te knjige.
cccc.139ladislavs,
Preporučite mi nešto od literature za C/C++ na srpskom.
Naravno nešto što neće da me baci u tešku depresiju (nabadam nešto
Pascala :).
Pa da kupim ili ako je rasprodato/papreno da fotokopiram
(mada je, čujem i fotokopiranje papreno ;).
ciLa.
cccc.140miko,
Da li neko zna sta znaci i kako se otklanja greska
"LINK: error L2029: Unresolved externals" ?
Posto sam relatvno novi u C programiranju,ranije se nisam susretao
sa ovom greskom,a mislim da je vazno napomenuti da se javlja pri koriscenju
odredjenih funkcija potrebnih za programiranje raznih BIOS,COMM...orjentisanih
programa. Kompajliranje takvih programa tece bez problema,medjutim po zavrsetku
kompajler mi izdaje doslovno ovakvu poruku:
"LINK: error L2029: Unresolved externals:
_comm_send in file(s):
COMM.OBJ (comm.c)
_comm_receive in file(s):
COMM.OBJ (comm.c)
_comm_init in file(s):
COMM.OBJ (comm.c) "
Za potrebe programa (nazvanog comm.c i koji bi trebalo da bude comm-program)
koristio sam gore navedene (COMM_INIT, COMM_SEND, COMM_RECIEVE) funkcije.
Mislim da je vazno napomenuti jos i to da koristim MICROSOFT C.
Unapred zahvalan,
Miko
cccc.141spantic,
> Preporučite mi nešto od literature za C/C++ na srpskom.
Ako je do Ca imaš originalnu knjigu Kernigena i Ričia "Programski jezik C".
Svako bi pomislio da je originl najbolji, pošto su navedeni tvorci jezika.
E nije ;)
Nedavno je Mikro knjiga izdala knjigu Lasla Krausa "Programiranje u jeziku C
i primeri" ili tako nešto :) žovek je pojam pedantnosti i njegovu knjigu
najtoplije preporučujem.
Što se C++ tiče izbora i nemaš. Postoji samo prevod ( opet Lasla ) na srpski
tvorca C++ B. Stroustrupa.
cccc.142dejanr,
>> "LINK: error L2029: Unresolved externals" ?
Verovatno postoje neki potprogrami koje si zvao, ali ih nisi napisao ili
pri linkovanju nisi naveo datoteku u kojoj se nalaze. Ili nisi tu datoteku
preveo.
cccc.144ppekovic,
>> Ako je do Ca imaš originalnu knjigu Kernigena i Ričia "Programski jezik C".
>> Svako bi pomislio da je originl najbolji, pošto su navedeni tvorci jezika.
>> E nije ;)
Tu si zaista u pravu. Baš sam ovih dana imao prilike da
pratim nekoliko ljudi koji uče C (ozbiljni, 25-27 god.). Ja sam im
preporučio gore pomenutu knjigu. Međutim, rezultati su više nego
loši. Naime, prvi problem je bio prevod i greške u knjizi, a
grešaka ima toliko da ovu knjigu (YU prevod) mogu slobodno nazvati
rekorderom po tom pitanju. Drugi problem je da izgleda nečin na
koji autori izlažu celu materiju je isuviše komplikovan za
početnike. Premalo je crteža i skica.
Jedna druga knjiga kod početnika (a i onih malo naprednijih)
daje mnogo bolje rezultate. To je knjiga "Tips tricks & solutions"
autor: Cris Jamsa, izdanje Microsoft.
>> Nedavno je Mikro knjiga izdala knjigu Lasla Krausa "Programiranje u jeziku C
>> i primeri" ili tako nešto :) žovek je pojam pedantnosti i njegovu knjigu
>> najtoplije preporučujem.
Ovu knjigu sam kupio jednoj gospođici koja ovih dana treba da
sprema ispit iz C-a (čitaj da uči C). Javiću rezultate. Na prvi
pogled izgleda jako lepo, puno je crteža, tempo je uravnotežen.
Još jednom, videćemo rezultate.
Paya
cccc.145dragisak,
║> Microsoft (R) Overlay Linker Version 3.65
║> Copyright (C) Microsoft Corp 1983-1988. All rights reserved.
║> LINK : fatal error L1089: "005348LK" : cannot open
║> response file
║
║ u tom fajlu se nalaze opisi (da ne detaljišem ;) šta treba
║ linkovati ili šta treba da bude uključeno u neku biblioteku. pošto
║ je značenje reči RESPONSE jedinstveno u engleskom jeziku, kontam da
║ je u pitanju ista stvar i za msc (možda druge strukture, ali to je
║ to).
Pa gde nađe onaj 005348LK !? Ja mu nisam ništa zadao. Na drugim mašinama
radi bez problema. Ja sam onda, iznerviran, ponovo instalirao MSC6.0 ali
opet javlja istu grešku. :( E sad, ne znam zašto, ali na ovoj mašini imam
steker i čim mi se nešto nepredviđeno desi ja posumnjam na njega. ;) Koliko
se sećam nekada mi je sve dobro radilo. Ima li ko neki predlog ?
║ pretpostavljam da treba da pogledaš komandnu liniju ili ako si u
║ PWB (lupam - nikad video) da pretreseš sve podešene stvari oko
║ linkovanja (borland ima projektni fajl - nešto slično ima valjda i
║ msc?).
Ne. Radi se o najobičnijoj komandnoj liniji. Dakle, na DOS prompt ja
otkucam CL /AS xxx.C , a on me pozdravi sa onom porukom. :((
Radi se o najjednostavnijim programima tipa 'Hello world'.
cccc.146pyramid,
Da li neko zna zasto se pojavljuje greska "Allocation fail\nCould not load
COMMAND" na kraju programa. Sva memorija je uredno oslobodjena, koristim BC++
3.1, huge model, farmalloc i farfree. Inace dogadja se i da nece da izvrsi
alokaciju iako farcoreleft vraca cifru od 600000 byte-ova... Wot je problem?
Nebojsa
P.S. Kada se program debug-uje sa TurboDebugerom sve lepo prodje, ali kada
izadjem iz BC IDE-a, opet ista greska....
cccc.147dgrbic,
:: mali editor linije. nije editor fajlova ;) već treba
Ali uz njegovu pomoć se može napisati i pravi linijski editor ;>
cccc.148djelovic,
> Da li neko zna zasto se pojavljuje greska "Allocation failĐnCould not
> load COMMAND" na kraju programa. Sva memorija je uredno oslobodjena...
Postoji mnogo uzroka za ovakvo ponašanje, ali su najverovatniji:
a) Ipak ne oslobađaš svu memoriju tj. imaš "curenje" ili
b) Neki od blokova koji alociraš nije dovoljno velik, tj. recimo
alocirao si 500 bajtova a pisao si po bajtovima 501, 502, ...
cccc.149mjova,
probam baš ovih dana bcc 3.1
cccc.150mjova,
> Pa gde nađe onaj 005348LK !? Ja mu nisam ništa zadao. Na
> drugim mašinama radi bez problema. Ja sam onda,
> iznerviran, ponovo instalirao MSC6.0 ali
rado bih ti pomogao, ali ne koristim MSC nikako. ko zna šta mu je -
baš me čudi da ti niko ne odgovara...
možda bi trebalo da pređeš na borlandov c, mislim da je on mnogo više
prilagođen korisnicima, a od verzije 3.0 (c++) ima i mogućnost
prevođenja i programa pisanih za MSC biblioteke. ovo ti je najbolje
rešenje.
cccc.151mjova,
> :: mali editor linije. nije editor fajlova ;) već treba
> Ali uz njegovu pomoć se može napisati i pravi linijski
> editor ;>
pa može, ali šta ima da se piše kad je EDLIN *tako* dobar ;)
cccc.152mjova,
> probam baš ovih dana bcc 3.1
k`o što rekoh, probam ;)
elem, čini mi se da je malo bolje sređen rad sa memorijom (nemam
problema sa qemm-om) i ispravljeno par bugića u radu sa (iz?) komandne
linije (thelp).
ima tu dosta toga što zapravo i nije novo od prošle verzije (3.0), ali
meni jeste od 2.0...
prevođenje je zaista kraće (na potpuno istom primeru), a što se tiče
brzine dobijenog koda (u istim uslovima) nije mi poznata jer nisam
probao - sasvim logično ;).
definitivno prelazim na 3.1 jer mi se čini boljom, a ima dovoljno
prednosti (moram da probam prenos parametara u registrima _fastcall -
deluje mi moćno mada to nije jednima novost) koje 'brane' nešto veću
potrebu za diskom. do sada sam radio sa 2.0 jer me je iritiralo loše
rešeno pitanje helpa koji je radio samo po svom nahođenju...
nego, i onaj IDE mi izgleda šareeenooo ;), rekoh mnogo lepo, i posle
10 minuta rekoh 'daj bre brief' ;). džaba šminke.
cccc.153ppekovic,
>> Ne. Radi se o najobičnijoj komandnoj liniji. Dakle, na DOS prompt ja
>> otkucam CL /AS xxx.C , a on me pozdravi sa onom porukom. :((
>> Radi se o najjednostavnijim programima tipa 'Hello world'.
Ne znam da li sam poslao tu poruku jer mi se često desi da
zaboravim da pošaljem exec O:) ali meni se dešavalo isto i ne
sećam se kako sam sredio, ali mislim da je bila neka banalna
stvar, mesto na disku, environment promenljive ili tako nešto.
Paya
cccc.154ppekovic,
>> elem, čini mi se da je malo bolje sređen rad sa memorijom (nemam
>> problema sa qemm-om) i ispravljeno par bugića u radu sa (iz?) komandne
>> linije (thelp).
Šta je ovo mjovo? Pre par poruka preporučiš čoveku da pređe
na Borland, pominješ verziju 3.0, pa onda kako su više prilagođene
korisniku od MSC-a (šta li ovo znači?), a onda pominješ neke
probleme koji nisu baš zanemarljivi (kao ni oni problemi sa
qemm-ovima, max-ovima i turbo debug-erom).
Pošto, koliko se sećam, imaš nameru da se pozabaviš i sa
UNIX-om, da ti posavetujem da pređeš na MSC, jer te na SCO UNIX-u
(XENIX-u) čeka niko drugi do MSC, CV i druge lepe MIcrosoft
stvarčice ;))
Paya
P.S. :)
cccc.155korvin,
>> radi bez problema. Ja sam onda, iznerviran, ponovo instalirao MSC6.0
>> ali opet ja┌──────┐u grešku. :( E sad, ne znam zašto, ali na ovoj
>> mašini imam│steker│i čim mi se nešto nepredviđeno desi ja posumnjam na
└──────┘
>> njega. ;) Koliko se sećam nekada mi je sve dobro radilo. Ima li ko
>> neki predlog ?
Tu leži odgovor ... Ja sam instalirao MSC 6.0 pod stekerom 2.0 i u jednom
trenutku mučenja sa pwb, ovaj se jadnik zbunio i oborio mi šteker :(( Od
tada je šteker non-stop proglašavao sebe read-only. Posle sam prešao na
BC3.0 i Šteker 3.0 i nije bilo problema. P1redlažem ti da nađeš
Šteker 3.0...
cccc.156zolika,
>> Preporučite mi nešto od literature za C/C++ na srpskom.
>> Naravno nešto što neće da me baci u tešku depresiju (nabadam nešto
>> Pascala :).
Preporučio bih da, ako već nabadaš nešto Pascala, da počneš da učiš
Modulu-2, više se isplati... :-))))
cccc.157vpetrovic,
Da li postoji način da vidim količinu alocirane memorije funkcijom malloc
tokom debagiranja programa?
Vlada
cccc.158bulaja,
│ Jedna druga knjiga kod pocetnika (a i onih malo naprednijih)
│daje mnogo bolje rezultate. To je knjiga "Tips tricks & solutions"
│autor: Cris Jamsa, izdanje Microsoft.
└───
Osim K&R, od stranih knjiga kod nas je jos prevedena "Programiranje na
jeziku C", autor je Augie Hansen, izdavac Mikrpo Knjiga. Nije losa,
sigurno je laksa za ucenje od K&R ali je sve nekako suvise nagurano
(nedovoljno deskriptivno) posto knjiga ima svega nekih 230 strana (bez
dodataka).
cccc.159ladislavs,
> Nedavno je Mikro knjiga izdala knjigu Lasla Krausa
> "Programiranje u jeziku C i primeri" ili tako nešto :)
> Što se C++ tiče izbora i nemaš. Postoji samo prevod ( opet
> Lasla ) na srpski tvorca C++ B. Stroustrupa.
Ima li neko neku od ove dve, a voljan je da je donese u klub, ekspresno
brzo je vraćam :).
ciLa.
cccc.160bulaja,
**** new file ****
R:\IBMPC\C\*.*
----------------------
bcti1 arj 156418 Borland/Turbo C/C++ Technical Informations #1
bcti2 arj 158572 Borland/Turbo C/C++ Technical Informations #2
U prvom delu se nalazi oko 60% informacija koje su ranije bile na Sezamu
u datoteci \ibmpc\info\bchelp10.arj (ostalo je novo), dok su u drugom
delu sve nove (sveze) TI. U novonabavljenim TI naslo se i ponesto vezano
za Borland-ov Turbo Basic, pa je to stavljeno u posebnu arhivu
(za istoriju :), \ibmpc\program\tbas_ti.arj.
cccc.161peca.st,
!-> daje mnogo bolje rezultate. To je knjiga
!-> "Tips tricks & solutions" autor: Cris
!-> Jamsa, izdanje Microsoft.
Imade li gde to u našim knjižarama?
Pošto nema, imade li neka dobra duša koja bi to priložila na kopiranje?
Zavaljujem. ;)
P e C a
P.S. Ima li Norton Guide za C?
cccc.162mjova,
> Šta je ovo mjovo? Pre par poruka preporučiš čoveku da
> pređe na Borland, pominješ verziju 3.0, pa onda kako su
> više prilagođene korisniku od MSC-a (šta li ovo
> znači?), a onda pominješ neke probleme koji nisu baš
> zanemarljivi (kao ni oni problemi sa qemm-ovima,
> max-ovima i turbo debug-erom).
nisi ti mene baš najbolje razumeo ;)
radi se o sledećem: do verzije 3.0 pisao sam samo uz upotrebu
'normalnih' imena fn() iz std lib. od te verzije postoje i 'msc' imena
tipa _dos_trtemrte. dakle, sad mogu da prevedem i program koji si ti
pisao za msc i onaj koji ja pišem za bcc i to bez ikakve pripreme
(valjda ;).
to mi znači jer tako mogu da ispravljam bugove onih koji pišu na msc-u
- doboljno je samo kucati BCC umesto CL O;> (joooj kako nisko ;)).
nije neka mudrost, radi se samo o tome da fn tipa allocmem() (prva mi
u helpu) sad ima i naziv _dos_allocmem() itd.
drugo, što se tiče helpa, mislim da je moćan jer ima stvarno brdo
stvari, a i lepo je sređen. tako uz svaku fn imaš i malu tbl u kojoj
je opisano da li postoji u DOS, UNIX, Windows, ANSI C ili C++ Only.
što se tiče problema sa memorijom (qemm) to je sada prošlost. kako
rekoh imao sam izvesnih problema oko rezidentnog helpa i memorije.
javljao mi se nekakv FATAL ERROR: GP FAULT (nemam pojma šta znači jer
mi je dokumentacija ostala poršeu kad sam isprobavao katapult ;).
ni jednog problema iz 3.0 više nema, bar ih ja nisam imao!
> Pošto, koliko se sećam, imaš nameru da se pozabaviš i
> sa UNIX-om, da ti posavetujem da pređeš na MSC, jer te na
> SCO UNIX-u (XENIX-u) čeka niko drugi do MSC, CV i
> druge lepe MIcrosoft stvarčice ;))
pa jeste, to mu je stvarno prednost, ali preživeću i to ako budem
morao... za sada ostajem uz BCC 3.1, stvarno je moćan.
cccc.163mjova,
> Da li postoji način da vidim količinu alocirane memorije
> funkcijom malloc tokom debagiranja programa?
pa zar sintaksa malloc-a nije baš takva da prosleđuješ parametar
koliko ti mesta treba?
cccc.164ematic,
> P.S. Ima li Norton Guide za C?
Ima. Ma se ja :)
cccc.165zsiz,
> Preporučite mi nešto od literature za C/C++ na srpskom.
> Naravno nešto što neće da me baci u tešku depresiju (nabadam nešto
Ima jedna knjiga za C dobra za početnike.
Zove se UVOD U PROGRAMSKI JEZIK C. Autora neznam jer
imam fotokopiju te knjige. Tu knjigu sam video u
Jugoslovenskoj Knjizi u Palati Albanija. Ima bele
korice i oko 200 strana.
P.S. Ovo ti piše početnik u C-u.
Pozdrav.
zsiz
cccc.166wizard,
>> U prvom delu se nalazi oko 60% informacija koje su ranije bile na Sezamu
>> u datoteci \ibmpc\info\bchelp10.arj (ostalo je novo), dok su u drugom
>> delu sve nove (sveze) TI.
Da li su sve info koje su bile na Sezamu sadržane u novim arhivama, ili
zbog 40% i njih treba čuvati? Nisi se baš najjasnije izrazio. :)
cccc.168ladislavs,
Recite mi da li vredi Petkovićeva knjiga o C-u (ona sa belim koricama i
velikim C preko cele prednje korice).
U odnosu na ostale knjige je neuporedivo najjeftinija.
ciLa.
cccc.170pbojan,
Pazite sad ovaj problem ( znam da znam resenje, samo ne mogu da se setim :):
Radim neku aplikaciju u HUGE modelu, ciji je, izmedju ostalog, zadatak
da na heap-u popamti veliki broj stringova nedefinisane duzine. Ocigledno,
sve sto je potrebno od funkcija je malloc ( farmalloc ) i strcpy ( _fstrcpy )
da bi sve to radilo kako treba.
Medjutim, posle nekih 50KB unesenih stringova, aplikacija se zakuca, potpuno
poremetivsi memorijske blokove u DOS-u, sto rezultira zakucavanjem celog
sistema. Iz toga sam zakljucio da alokacija memorije ne radi kako treba, ali
nemam pojma zasto!! Naime, do pre dva dana, taj deo aplikacije ( koja, uzgred,
ima oko 7000 linija koda ) je radio savrseno! Naravno, moguce je da ni tada
sve to nije radilo, samo se nije greska manifestovala kada sam je trazio.
Ima li neko ideju, dakle, zasto se aplikacija u HUGE modelu, zakuca posle
popunjenih ( grubo ) 60KB?? Stepovanje debagerom tvrdi da je apsolutno
sve u redu, sve do trenutka kada se program zakuca ( mislim, povezana
lista koja pamti stringove je OK ).
cccc.171bulaja,
│Da li su sve info koje su bile na Sezamu sadrzane u novim arhivama, ili
│zbog 40% i njih treba cuvati? Nisi se bas najjasnije izrazio. :)
└───
Sve sto je bilo u starom bchelp10 ima i u novom bcti1, a ima i dodatak :).
cccc.172zsiz,
> Recite mi da li vredi Petkovićeva knjiga o C-u (ona sa belim koricama i
> velikim C preko cele prednje korice).
> U odnosu na ostale knjige je neuporedivo najjeftinija.
Ja učim C iz nje i mogu da ti kažem da je dobra.
Knjiga je napisana kao univerzitetski uđbenik.
Naravno da bi više voleo da učim C iz knjige na primer
Schilda C++ The Complete Reference (Osborne McGraw Hill)
(jedno 600-700 strana) ali nemogu da dam jednu/dve plate
za knjigu.
Pozdrav.
zsiz
cccc.173mjova,
> Ima li neko ideju, dakle, zasto se aplikacija u HUGE
> modelu, zakuca posle popunjenih ( grubo ) 60KB??
> Stepovanje debagerom tvrdi da je apsolutno
pa pre izvesnog vremena ovde je bilo diskusije o problemu fn iz std
lib koje se bave alokacijom memorije. ti problemi su bili vezani za
biblioteke starijih verzija, ali valjda to nije slučaj sa 3.1 (baš ću
da probam).
drugo, ne vidim potrebu za H modelom jer se aritmetika H pointera može
negde zablesaviti, a poreba za njima se može rešiti prostom
deklaracijom pojedinijh ukazivača.
probaj da samo potrebne vektore prekrstiš u huge, a prevodi u L
modelu. nakon dužeg vremena došao sam do zaključka da je to
najoptimalniji model (za ono što meni treba).
što se tiče funkcija:
> malloc ( farmalloc ) i strcpy ( _fstrcpy )
o njima nema potrebe da vodiš računa jer sami modeli L i H po
definiciji uzimaj ono što im treba.
prevedi ovo što kačim uz poruku u H modelu pa javi šta si uradio.
(tamo se pominju i far i near haep, ali to je za velike modele isto..
kod mene radi ok i za L i za H. BCC 3.1
mem.cppcccc.174todorp,
> biblioteke starijih verzija, ali valjda to nije slucaj sa 3.1 (bas cu
> da probam).
Ja sam imao isti problem sa farmalloc dok nisam digao ruke ;)) Probaj, ali
sumnjam da je u pitanju verzija jer mene zeza i turbo C 2.0 i BCC++ 2.0. Nije
mi jasno zasto ne radi, jer farmalloc odvoji onoliko koliko mu trazim. I isto
kao pbojanu negde kod 60000-tog karaktera zakuca makinu :(( Razume se kad mu
dam npr. farmalloc(5000) radi odlicno ;)
> prevedi ovo sto kacim uz poruku u H modelu pa javi sta si uradio.
> (tamo se pominju i far i near haep, ali to je za velike modele isto..
> kod mene radi ok i za L i za H. BCC 3.1
Ja probao i u svim modelima radi osim u H. Tad zakuca masinu.
Pozdrav od Todora.
cccc.175dnikolic,
>>> P.S. Ima li Norton Guide za C?
Za koji C? :)
dn
cccc.176ematic,
> Za koji C? :)
MSC i TC :)
cccc.177peca.st,
!-> Za koji C? :)
Pa šta ja znam, za bilo koji... može za BC++ 3 ili 2, a može i za
Turbo C.
Ja još ne radim sa Com, mada imam dvojku na disku jer nemam vremena. :)
Možda ću prvo početi sa Turbo Com, jer manje zauzima i valjda je lakši,
a posle je lako preći na MSC ili BC... Ajde da me malo posavetujete!
P e C a
cccc.178vpetrovic,
>>> Da li postoji način da vidim količinu alocirane memorije
>>> funkcijom malloc tokom debagiranja programa?
>>
>> pa zar sintaksa malloc-a nije baš takva da prosleđuješ parametar
>> koliko ti mesta treba?
Jeste, ali meni treba da u nekom trenutku vidim koliko je memorije ukupno
mallocirano (od početka programa).
cccc.179tomae,
>>>> P.S. Ima li Norton Guide za C?
Ima na Rhinoceros BBS-u (i za TC, i za MSC)
možda ima još negde:)
cccc.180pbojan,
> probaj da samo potrebne vektore prekrstis u huge, a
> prevodi u L modelu. nakon duzeg vremena dosao sam do
> zakljucka da je to najoptimalniji model (za ono sto meni
> treba).
Jeste, tako nekako i ja obicno radim, medjutim, ovaj put sam bas hteo da
predjem potpuno na Huge model ( da sad ne davim zasto ). Naravno da bih,
uz neke promene algoritma, mogao da se 'vratim' na L, ali zasto da
vozim trotinet, samo zato sto mi negde curi ulje na kolima?
> sto se tice funkcija:
>
>> malloc ( farmalloc ) i strcpy ( _fstrcpy )
>
> o njima nema potrebe da vodis racuna jer sami modeli L i H
> po definiciji uzimaj ono sto im treba.
Pa i ne vodim :). Samo sam se pitao da nije neki bag u Huge modelu, koji
bi se eliminisao paznjom tipa malloc ili farmalloc. Naravno, nije bilo
to.
E, sta se zapravo desilo: alokacija se vrsila iz neke zestoko komplikovane
rekurzije, koja je i sama vrsila neke svoje alokacije. Izgleda da
fragmentacija memorije koja pri svemu tome nastane, potpuno sludi BC,
tako da negde zaboravi sta mu je tacno slobodno za alokaciju ( i koliko ).
Kao resenje problema, a to sam vec jednom uradio, pa zaboravio, pustio sam
rekurziju da zavrsi posao, pa tek onda krenuo sa alokacijom monstruoznog
tipa. I sad sve radi kako treba... ( i dalje HUGE model, i dalje jako
mnogo podataka na heap-u, isti algoritam ).
cccc.181pbojan,
> kao pbojanu negde kod 60000-tog karaktera zakuca makinu
> :(( Razume se kad mu dam npr. farmalloc(5000) radi odlicno
> ;)
Eto, a ja sam mislio da sam poludeo :). Da nisi negde imao rekurzije
u tom dogadjaju?
cccc.182todorp,
> Eto, a ja sam mislio da sam poludeo :). Da nisi negde imao rekurzije
> u tom dogadjaju?
Ma kakve rekurzije ;), obicno citanje iz fajla sa fgetc() i smestanje u buffer
koji je bio pogadjas pravljen sa farmalloc :) Nego rece mjova da su ispravili
bugove u BC-u pa cu ovih dana da instaliram biblioteke od 3.0 ili 3.1
Pozdrav od Todora.
cccc.183pyramid,
Proveri jos jednom da li si alocirao dovoljno velike kolicine (mozda si
zaboravio na \0 sa kraja stringa?)
Meni se isto desavalo (po izlasku mi napise "Memory allocation error") zato sto
sam alocirajuci mem. zaboravio na to da je niz unsigned int * (jednostavno je
trebalo pomnoziti sa 2)....
Nebojsa
cccc.184ppekovic,
Pogledajte sledeću strukturu:
typedef struct
{
char ArcMark;
char HeaderVersion;
char Name[13];
unsigned long Size;
DOS_FILE_DATE Date; /* 2 bytes */
DOS_FILE_TIME Time; /* 2 bytes */
unsigned Crc;
unsigned long Length;
} ARCHIVE_HEADER;
Da izmerim dužinu: 1+1+13+4+2+2+2+4 = 29
Međutim, sizeof(ARCHIVE_HEADER) daje 30. Ako promenim
Name[13] u Name[12], sizeof(...) daje 28.
Jel ima neko objašnjenje?
Paya
cccc.185dejanr,
>> Međutim, sizeof(ARCHIVE_HEADER) daje 30. Ako promenim
>> Name[13] u Name[12], sizeof(...) daje 28.
>> Jel ima neko objašnjenje?
Možda je kompajler "pametan" pa doda jedan bajt da bi produžio
NAME tako da sledeći podatak padne na parnu adresu što bi ubrzalo
pristup podacima, i to ne samo na 80x86 procesorima? Nisi rekao
koji je kompajler i koja platforma.
Ako je to, trebalo bi da postoji neki način da se (za tu strukturu
ili bar za ceo program) to "uravnavanje podataka" opozove.
cccc.186ppekovic,
>> Jeste, ali meni treba da u nekom trenutku vidim koliko je memorije ukupno
>> mallocirano (od početka programa).
Pogledaj na početku programa koliko imaš slobodne memorije, a
onda na mestu gde želiš da vidiš razliku, pa oduzmi te dve
vrednosti i eto.
Paya
cccc.187ppekovic,
>> Možda je kompajler "pametan" pa doda jedan bajt da bi produžio
>> NAME tako da sledeći podatak padne na parnu adresu što bi ubrzalo
>> pristup podacima, i to ne samo na 80x86 procesorima? Nisi rekao
>> koji je kompajler i koja platforma.
Pogledaću da nema neki switch za to. Inače compiler je MSC
6.0. Javiću rezultate.
Paya
cccc.188pbojan,
> Proveri jos jednom da li si alocirao dovoljno velike
> kolicine (mozda si zaboravio na \0 sa kraja stringa?)
E, kad bi ti samo znao sta sam sve proveravao... :) Kao sto vec napisah,
problem je, bar kod mene, u velikoj fragmentaciji memorije. A zasto
je fragmentacija problem ispitacu prvi sledeci put kada ne budem imao sta
da radim par nedelja :).
cccc.189pbojan,
> Da izmerim duzinu: 1+1+13+4+2+2+2+4 = 29
>
> Medutim, sizeof(ARCHIVE_HEADER) daje 30. Ako promenim
Da nisi naredio smestanje na parne adrese?
cccc.190ppekovic,
>> Da nisi naredio smestanje na parne adrese?
Da, upravo je u tome problem. Međutim, čudi me da je po default-u stavljen
pack na 2 bajta a ne na jedan. Sve u svemu, posle konsultovanja uputstva stavio
sam /Zp switch i sve je ok. Inače, granicu je moguće postaviti na 1, 2 i 4
bajta, s tim što je to moguće uraditi switch-om /Zp<1|2|4> ili pragma
direktivom #pragma pack ( 1|2|4 ).
Paya
cccc.191zvonko,
>#
># Međutim, sizeof(ARCHIVE_HEADER) daje 30. Ako promenim
># sizeof(...) daje 28.
>#
># Jel ima neko objašnjenje?
BYTE i WORD align!
Ima neki switch prilikom kompajliranja pa će biti OK!
MSC fo default-u radi WORD align!
Provereno na najnezgodniji mogući način :< !
P.S. SWITCH je: /Zp => BYTE align, instead of WORD.
cccc.193madamov,
******
Međutim, sizeof(ARCHIVE_HEADER) daje 30. Ako promenim Name[13] u Name[12],
sizeof(...) daje 28. Jel ima neko objašnjenje?
******
Imao sam nedavno sličan problem, ali na Mac-u, tj. hoću da naglasim na
Motoroli gde se zna da neka adresiranja uvek moraju da idu na parne adrese, u
protivnom dobijaš Bus Error. Ako toga ima i kod Intel procesora, to ti je
odgovor. U tvom primeru, kompajler je lepo rasporedio ona char polja (njima i
onako pristupa sporije zbog same definicije char-a kao jednobajtne vrednosti),
zeza ga unsigned long (4 bajta) koji mora da ide na sledeću parnu adresu, tako
da ti je praktično Name ispalo char Name[14], to je taj bajt viška. Ako
struktura mora baš tako da izgleda, tj. Name mora da bude baš 13 bajtova dugo,
posle toga sve longove deklariši kao char Size[4], a integere sa char a[2], pa
funkcijama memmove ili memcpy puni ta polja umesto prostim dodeljivanjem. Malo
više kucanja i poziva funkcija, ali to je jedino rešenje.
P.S. I kod mene se radilo o nekoj vrsti arhivera. B)))
>>> Modes are most confusing when you're in wrong one.
cccc.194ppekovic,
Svi oni koji su pisali programe na UNIX-u i koristili curses biblioteku, znaju
kakva je muka sve to preraditi za dos. Zato evo skupa curses rutina za DOS.
Paya
curses.zipcccc.195akojovic,
Treba da napravim kratku interapt rutinu koja bi se izvrsavala
svake milisekunde (eventualno na 10 milisekundi). Koliko sam mogao iz
dosad proučene literature da zakljucim moraću da se zakačim na INT08 i
da petljam sa kolom 8254 (ako neko zna lakši način ...). Problem je što
na isti INT može da bude nakačen neki drugi program, npr. smartdrv koji
će očekivati prekid 18.2 puta u sekundi.
Ukoliko koristim interapt funkciju svi registri će biti sačuvani
na steku, ali onda ne mogu vršiti preusmeranje na stari interapt vektor.
Da li neko zna sta se dešava sa vrednostima registara pri pozivu neke
funkcije (pokušao bi da na početku f-je pomoću par redova u asembleru
sačuvam vrednosti registara, a da ih vratim pre preusmerenja na stari int.
vektor).
cccc.196todorp,
> da petljam sa kolom 8254 (ako neko zna laksi nacin ...). Problem je sto
> na isti INT moze da bude nakacen neki drugi program, npr. smartdrv koji
> ce ocekivati prekid 18.2 puta u sekundi.
A sta tebe briga za drugi program ;)? Ti mozes da nakacis nekoliko
programa na isti int i ako se ne izivlavas sve ima da fercera. Ako ti je
bas zapelo da nebude int 8 okaci se na int 1c. Sto se tice ovog laksi
nacin, mislim da ga nema. Mozes da gadjas neku adfresu (mrzime da trazim
koju a i pisem on_lajn) ali to ti je isto.
> Ukoliko koristim interapt funkciju svi registri ce biti sacuvani
> na steku, ali onda ne mogu vrsiti preusmeranje na stari interapt vektor.
Pogledaj primer keep naredbe ili interrupt u bc helpu. Mnogo to ga ce ti
biti jasnije ;). BTW. to sto ti hoces se radi ovako:
void (interrupt far *oldtimer)(void);
void interrupt far newtimer(void);
.
.
.
main() {
oldtimer=getvect(0x1c);
setvect(0x1c,newtimer);
.
.
.
}
void interrupt far newtimer(void) {
*(oldtimer)();
.
.
.
}
Pozdrav od Todora.
ps. Mislim da ti nije jasno i da sam konfuzan ;( pa zato uzmi neku
knjigu ili racunare br. sedamdeset i nesto i zz je tamo opisao
tsr-ove i prica vazi i za tebe.
pps. Vidim da sam zaboravio da napisem da ti ono *(oldtimer)(); izvrsava stari
i int a to je valjda ono sto tebe buni.
cccc.197vasic,
> Treba da napravim kratku interapt rutinu koja bi se izvrsavala
> svake milisekunde (eventualno na 10 milisekundi). Koliko sam mogao iz
> dosad proučene literature da zakljucim moraću da se zakačim na INT08 i
> da petljam sa kolom 8254 (ako neko zna lakši način ...). Problem je što
> na isti INT može da bude nakačen neki drugi program, npr. smartdrv koji
> će očekivati prekid 18.2 puta u sekundi.
Programiraj 8254 da generiše INT 8 recimo sa 182Hz umesto standardnih
18.2 pa onda zovi stari handler tek pri svakom desetom intu. Ako tvoj
program nije rezidentan, tj. garantovano je da će ostati zadnji u lancu,
ovo bi trebalo da bude sasvim OK. U suprotnom možeš da koristiš foru
koju je prvi koristio (čini mi se) Sidekick: nakačiš se na DOS-ovu fj-u
za postavljanje interapt vektora (ne znam napamet koja je) pa kada ti
neki program zatraži da se nakači na osmicu, ti prvo otkačiš sebe, onda
pozoveš DOS da obavi posao i na kraju se ponovo nakačiš ti, ostajući
tako i dalje zadnji u lancu, odnosno prvi koji dobija kontrolu kad se
desi INT 8.
Ako ti nije bitno da program radi na XT-u, možeš da se poštediš svih
ovih muka i iskoristiš INT 70h. O tome je već bilo reči u PC.PROG.*, ako
neko zna tačno broj konferencije i poruke(a), neka ti javi.
cccc.198zsiz,
Imam jedan problem. Problem se odaziva na ime direktore.
Firma u kojoj radi (oko 100 ljudi) ima sada 4 računara.
Moj direktor bi hteo da mu ja napravim programe za:
1) plate
2) finansijsko poslovanje
3) knjigovodstvo
4) što god se seti.
Po njemu radi se o trivijalnim programima koje bi ja
mogao da uradim u pauzama između redovnih poslova koje
radim. Radim u mašinskom razvoju kao vođa grupe za
spec.podsklopove (št.ploče i kablovi) a radim i na razvoju
mehanike umesto kolege koji se posvađao sa našim neposrednim
rukovodiocem. Pored toga sam nešto kao SysAdm za gore
pomenuta 4 računara.
U m.razvoju ima jedno 10-tak ljudi koji uče da rade na
računara i njima pomažem kada im zapne nešto.
Na fakultetu sam, davne 1976, učio FORTRAN bez da sam video
računar na kome bi se ti programi izvršavali. Posle nisam
programirao osim nešto malo u BASIC-u. Učim C i voleo bi da
ovladam njime.
Ljudi s kojima sam se konsultovao, a koje cenim kao
programere (u C-u i Clipper-u) kažu da gore pomenuti
programi nisu nimalo jednostavni ni za napraviti ni za
održavanje s obzirom na stalne promene propisa.
Ako bi radio nešto voleo bi to da radim u C-u a ne u
Clipper-u jer ne želim da učim Clipper (ma koliko on
bio pogodan za ovakve programe).
Nisam rekao da moj direktor nema blage veze sa računarima
ni sa programiranjem i da se nije usudio da priđe računaru
da nauči nešto.
Šta kažete?
Pozdrav.
zsiz
cccc.199ppekovic,
>> Ako bi radio nešto voleo bi to da radim u C-u a ne u
>> Clipper-u jer ne želim da učim Clipper (ma koliko on
>> bio pogodan za ovakve programe).
>> Šta kažete?
Kažem da je tužno videti ljude sa predrasudama o jednom
zaista sjajnom programskom jeziku kao što je clipper.
Kao rešenje tvog problema, svrati u par firmi i pokupi
cenovnike za takve programe i pokaži svom direktoru.
Paya
cccc.200zsiz,
> Kažem da je tužno videti ljude sa predrasudama o jednom
> zaista sjajnom programskom jeziku kao što je clipper.
> Kao rešenje tvog problema, svrati u par firmi i pokupi
> cenovnike za takve programe i pokaži svom direktoru.
Dobra ideja.
Pozdrav.
zsiz
cccc.201draganm,
*> Sta kazete?
Menjaj firmu :)
cccc.202zsiz,
> *> Sta kazete?
> Menjaj firmu :)
Radije bi promenio direktora :)
Pozdrav
zsiz
cccc.203cubro,
Evo saljem NG za PXEngine 3.0 za C++ i za C skinuto
sa BORLAND BBS -a.
pxng3.zipcccc.204cubro,
A ovo je primer za objektno programiranje u PXEngine
file menageru. Napisane klase (objekti za read, search
,itd...) za C++
tpxcla.zipcccc.205mjova,
> Evo saljem NG za PXEngine 3.0 za C++ i za C skinuto
> sa BORLAND BBS -a.
e, hvala ti ko bratu! ;) bar da vidim šta ima novo ;)
ako imaš još nešto, šalji bez ustručavanja!
cccc.206bulaja,
│Evo saljem NG za PXEngine 3.0 za C++
└───
Hvala, bice valjda u dir-u kad ga pogledam!
Nego, jel ti nije problem da opet posaljes onaj prg za rad sa Paradox
bazama (ako se ne varam, ti si ga poslao) posto prosli put nije uspeo
file transfer.
cccc.207ndragan,
/*> Sta kazete?
/ Menjaj firmu :)
Problematična stvar. Kao klinac sam tačno znao da ako dam dva
plastikanca dobijam jednog gvozdenca - kod razmene klikera se _znalo_
šta je šta. Kad menjaš firmu, nikad ne znaš da li išta možeš da dobiješ.
cccc.208ljubao,
Napravio sam program da mi štampanje ide u pozadini i to je ok.
Međutim, taj kod je unutar glavnog programa, tako da ne mogu da napuštam
program sve dok se posao ne završi, što mi se ni malo ne sviđa.
Razmišljao sam da se kačim na interapte iz programčeta iz kog se
se startuju svi ostali programi, ali ne znam kako da u child programu
saznam gde su mi potrebni podaci oko štampanja.
Jedino mi je došlo u glavu (nisam probao), je da prosledim kao
argument child programu adresu strukture gde bih potrpao sve što mi treba.
Sve što znate je dobrodošlo - dolazi u obzir i pisanje TSR-a, ali
ni tu ne znam kako da razmenjujem podatke.
Ljuba
cccc.209dmiladinovic,
>> rukovodiocem. Pored toga sam nesto kao SysAdm za gore
>> pomenuta 4 racunara.
>> U m.razvoju ima jedno 10-tak ljudi koji uce da rade na
>> racunara i njima pomazem kada im zapne nesto.
A ko ti kriv kad se pravis da sve znas !!! :)
Treba mudro cutati i praviti se prostodusno glup, pogotovu kad
imas direktore slicnih ambicija.
Najbolje prodju oni sto nista ne znaju, a ponajbolje oni koji nista
ne znaju, ali samo u radno vreme. :)
Sto se paketa tice, batali se corava posla. Bez strucnog znanja i
visegodisnjeg programiranja u nekom jeziku/generatoru za takvu namenu,
nema sanse ni adresar da napises, a da bude upotrebljiv.
Cisto da se razumemo, da bude upotrebljiv za neku babu pred penzijom,
koja je uz to jos i sef racunovodstva.
Sve u svemu, batal' se corava posla, promeni posao ili kao zadnju verziju
kupi pistolj... Pa dal' prvo sebe il' babu, il obrnuto, e ... :)
cccc.210dcolak,
BTW people,
Jel ima neko NG za MS C6.0 ?
Ja evo konačno izađoh iz očajnog PWB-a. No, QH je mnogo nepraktičan
da ga stalno potežem iz QEdit-a. Idealno bi bilo nešto ko NG za
Clipper...
SLEDGE DAMMIR!
cccc.211zsiz,
> Cisto da se razumemo, da bude upotrebljiv za neku babu pred penzijom,
> koja je uz to jos i sef racunovodstva.
Kako si pogodio za babu? Vava nije ništa prema tebi :)
> Sve u svemu, batal' se corava posla, promeni posao ili kao zadnju verziju
> kupi pistolj... Pa dal' prvo sebe il' babu, il obrnuto, e ... :)
Ma direktora a ne babu, nije ona kriva. Krv mi pije 11 i kusur
godina. Prvo kao rukovodilac a posle (pošto se na svim funkcijama
pokazao nesposobnim - sve org.jedinice gde je imao neku funkciju su
rasturene) kao direktor.
Pozdrav.
zsiz
cccc.212ppekovic,
>> Jel ima neko NG za MS C6.0 ?
>> Ja evo konačno izađoh iz očajnog PWB-a. No, QH je mnogo nepraktičan
>> da ga stalno potežem iz QEdit-a. Idealno bi bilo nešto ko NG za
Napravi mali makro (ostavio sam jedan takav ovde u conf.)
kojim ćeš da pozivaš qh iz qedit-a. Poziv je bukvalno trenutan.
Paya
cccc.213cubro,
Evo jos jednog utilityja sa BORLAND BBS-a. Za recovery
Paradox format datoteka.
tutil40.zipcccc.214dcolak,
│ Napravi mali makro (ostavio sam jedan takav ovde u
│ conf.) kojim ćeš da pozivaš qh iz qedit-a. Poziv je
│ bukvalno trenutan.
│
│ Paya
Možda (sigurno) sam se loše odrazio. Dakle, treba
mi nešto ko NG za Clipper jer se može u isto vreme
imati Help i videti program.
A uz sve to, QH je stvarno shitast, so, again help
me if you can....
SLEDGE DAMMIR!
cccc.215dusanp,
=> A uz sve to, QH je stvarno shitast, so, again help
Zasto insistiras na MSCu? Nadam se da znas kako
izgleda Borlandov help.
cccc.217akojovic,
Pre otprilike nedelju dana sam postavio pitanje u vezi pisanja
interapt rutine koja se kači na INT 8. Dobio sam neke odgovore (hvala
na njima) ali su se pojavili dodatni problemi. Pre pozivanja rutine
učestanost generisanja interapt signala menjam na 1000 Hz podešavanjem
vrednosti registara čipa 8254. Pošto se ovaj interapt normalno
pojavljuje na svakih 55ms ubacio sam brojač koji svaki 55-ti put
poziva stari interapt vektor. Medjutim to dovodi do blokranja rada
računara. Ukoliko se izbaci brojač i pozivanje starog vektora vrši
svaki put rutina lepo radi ali dovodi do divljanja sata (radi 55 puta
brže) što bi želeo da izbegnem. Radi ispitivanja sam napisao kratku
TSR rutinu koju prilažem, pa ako neko zna u žemu može da bude problem...
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0x08
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
static int count=0;
/* smanjivanje veličine heap-a i steka */
extern unsigned _heaplen = 1024;
extern unsigned _stklen = 512;
void interrupt ( *oldhandler)(__CPPARGS);
void interrupt handler(__CPPARGS)
š
/* program koji treba da se izvrši */
if (count<55) /* pošto se interapt generiše */
count++; /* svake milisekunde stara */
else /* interapt rutina se poziva */
š /* svaki 55-ti put */
count=0;
oldhandler(); /* ukoliko se ostavi samo ovaj
red rutina radi */
ć
ć
int main(void)
š
oldhandler = _dos_getvect(INTR); /* očitavanje starog interapt */
/* vektora */
asm š
mov al,54 /* podešavanje čipa 8254 da */
out 0x43,al /* generiše interapt na 1ms */
mov ax,1193
out 0x40,al
mov al,ah
out 0x40,al
ć
count =0;
/* instalacija novog interapt vektora */
_dos_setvect(INTR, handler);
/* instalacija programa kao TSR rutine */
_dos_keep(0, (_SS + ((_SP+64)/16) - _psp));
return 0;
ć
cccc.218ppekovic,
>> Možda (sigurno) sam se loše odrazio. Dakle, treba
>> mi nešto ko NG za Clipper jer se može u isto vreme
>> imati Help i videti program.
Ok. ok. :) NG za MSC, koliko ja znam, a znam ;) ima mjova.
Javi mu se.
Tip: Pored VGA, kupi i monohrom monitor i karticu. Ne samo što će
debug-iranje postati pesma, nego ćeš u isto vreme moći da vidiš i
tvoj listing i qh ;)
Paya (nepopravljivi ljubitelj microsoft-a) :))
cccc.219ppekovic,
>> Zasto insistiras na MSCu? Nadam se da znas kako
>> izgleda Borlandov help.
Pravi razlog prelaska na novi kompajler je help :))))))
Paya
cccc.221zsiz,
> >> Jel ima neko NG za MS C6.0 ?
> >> Ja evo konačno izađoh iz očajnog PWB-a. No, QH je mnogo nepraktičan
> >> da ga stalno potežem iz QEdit-a. Idealno bi bilo nešto ko NG za
> Napravi mali makro (ostavio sam jedan takav ovde u conf.)
> kojim ćeš da pozivaš qh iz qedit-a. Poziv je bukvalno trenutan.
Šta su PWB i QH?
Pozdrav.
zsiz
cccc.222dcolak,
│ Zasto insistiras na MSCu? Nadam se da znas kako
│ izgleda Borlandov help.
Znam. No, ja strašno mrzim Borland. Ko će ga znati zašto.
Verovatno zbog njegovog editora, koji nikako ne mogu da
zavolim, opet, ko će ga znati zašto...
P.S.
:)))))
SLEDGE DAMMIR!
cccc.223dusanp,
=> Pravi razlog prelaska na novi kompajler je help :))))))
┌─────────────────┴────────────┐
izmedju svih ostalih razloga i
cccc.224dcolak,
│ Paya (nepopravljivi ljubitelj microsoft-a) :))
Ex, i ja spadam u njih, no bog će ga znati zašto.
Thanx for the information.
P.S.
Mail is walking to mjova
SLEDGE DAMMIR!
cccc.225dcolak,
│ Šta su PWB i QH?
PWB je integrisana programerska okolina ;)
Tj. to ti je k'o u turbo paskalu, kad imaš i editor,
i compiler i linker, help, sve zbudženo u jednu celinu.
QH je Quick Help. Ono što u PWB dobijaš kad pritisneš F1.
P.S.
Kakav full justify ;)
SLEDGE DAMMIR!
cccc.226todorp,
> Znam. No, ja strasno mrzim Borland. Ko ce ga znati zasto.
> Verovatno zbog njegovog editora, koji nikako ne mogu da
> zavolim, opet, ko ce ga znati zasto...
A da promenis samo editor? ;)
Pozdrav od Todora.
ps. Zar nije brief sad borlandov? ;))
cccc.227todorp,
> PWB je integrisana programerska okolina ;)
Aj' mi reci od cega je to skracenica? Kod Borlanda je logicno IDE od
Integrated Development Enviroment.
Pozdrav od Todora.
cccc.228todorp,
> Programiraj 8254 da generise INT 8 recimo sa 182Hz umesto standardnih
> 18.2 pa onda zovi stari handler tek pri svakom desetom intu. Ako tvoj
Jesi li ti ovo probao?
Pozdrav od Todora.
cccc.229mjova,
> Znam. No, ja strašno mrzim Borland. Ko će ga znati zašto.
> Verovatno zbog njegovog editora, koji nikako ne mogu da
> zavolim, opet, ko će ga znati zašto...
mržnja je uvek išla na štetu onoga koji mrzi, a naročito ako ne zna
zašto. što se mene tiče ja znam zašto ne koristim msc, ali ga nikako
ne "mrzim". zašto ne pokušaš da koristiš neki editor (bilo koji je
bolji od ide||pwb). sad, ako si navikao na interni debuger i ostale
mogućnosti onda ništa, živi u mraku ;)
cccc.230vasic,
> void interrupt handler(__CPPARGS)
> {
> /* program koji treba da se izvrši */
>
> if (count<55) /* pošto se interapt generiše */
> count++; /* svake milisekunde stara */
> else /* interapt rutina se poziva */
> { /* svaki 55-ti put */
> count=0;
> oldhandler(); /* ukoliko se ostavi samo ovaj
> red rutina radi */
> }
> }
Uh. :( Zaboravih prošli put da ti kažem da kad ne zoveš stari int
handler, onda moraš svojeručno interapt kontroleru da signaliziraš kraj
obrade prekida. Znači, handler() treba da izgleda kao dole. Sorry za
izgubljeno vreme.
void interrupt handler(__CPPARGS)
{
if (count<55)
{
count++;
outp(0x20,0x20); /* Evo sve razlike */
}
else
{
count=0;
oldhandler();
}
}
cccc.231bulaja,
│> PWB je integrisana programerska okolina ;)
│Aj' mi reci od cega je to skracenica?
└───
Programmer's WorkBench.
cccc.232spantic,
>> PWB je integrisana programerska okolina ;)
> Aj' mi reci od cega je to skracenica? Kod Borlanda je
> logicno IDE od Integrated Development Enviroment.
Pa čovek ti je lepo rekao: Programming Work Bench.
cccc.233ppekovic,
>> => Pravi razlog prelaska na novi kompajler je help :))))))
>> ┌─────────────────┴────────────┐
>> izmedju svih ostalih razloga i
Jasno, ali svakako ne samo help :))), pogotovu imajući u vidu
kvalitet MS QH-a. Pri tom da naglasim da QH ima mogućnosti koje
imaju i drugi, samo to radi na drugačiji način, a da li se to
nekome dopada ili ne, je njegova subjektivna stvar o kojoj ne
vredi diskutovati.
Paya
cccc.234paki,
> Aj' mi reci od cega je to skracenica? Kod Borlanda je logicno
> IDE od Integrated Development Enviroment.
Programmer's Work Bench. Ni manje, ni više logično :))
cccc.235vasic,
>> Programiraj 8254 da generise INT 8 recimo sa 182Hz umesto standardnih
>> 18.2 pa onda zovi stari handler tek pri svakom desetom intu. Ako tvoj
>
> Jesi li ti ovo probao?
Eh, :) pa naravno. U asembleru, doduše, ali to ništa ne menja stvar. Što
se C-a tiče, akojovic je upravo ostavio programče koje uz minimalne
izmene (a i one su tu) radi OK.
cccc.237dcolak,
│ ne "mrzim". zašto ne pokušaš da koristiš neki editor (bilo
│ koji je bolji od ide||pwb). sad, ako si navikao na interni
│ debuger i ostale mogućnosti onda ništa, živi u mraku ;)
Pa koristim ga, zato mi je i trebao MSC.NG koji
sam nabavio zahvaljujući predusretljivom mjovi.
Sad mogu lepo, k'o u Clipperu da imam helpić ;)
Sledge DAMMIR!
cccc.239vasic,
Ako je nekome potrebna veća tačnost u merenju vremena od one koju mu
daju DOS i BIOS (do 1/18.2sec), možda će mu biti od pomoći sledeća
funkcija. Ona vraća trenutno vreme dana u jedincama od po približno 214
mikrosekundi. A najlepše je to što radi čak i ako ne verujete. :)
Pažljiviji čitalac će sigurno primetiti da je promenljiva temp
nepotrebna. Ona je tu samo da bi se zadovoljili lavovi - tj. prevodilac
koji ne dozvoljava jednostavno jer može komplikovano. Znam i za #pragma
warn -rvl, al' pragma je pragma, nemamo svi Borlanda.
unsigned long timer214(void) // (C) by ja
{
unsigned long temp;
asm {
push ds
xor ax,ax
mov ds,ax
out 0x43,al // latch 8253 timer 0 (clock)
jmp label1
} label1: asm {
in al,0x40 // read LO(8253 timer 0)
jmp label2
} label2: asm {
in al,0x40 // read HI(8253 timer 0)
neg al // Brojač je dekrementirajući.
mov ah,byte ptr ds:0x46C // bios timer
mov dx,word ptr ds:0x46D
mov word ptr temp,ax
mov word ptr temp+2,dx
pop ds
}
return temp;
}
cccc.240pedjak,
> na njima) ali su se pojavili dodatni problemi. Pre pozivanja rutine
> učestanost generisanja interapt signala menjam na 1000 Hz podešavanjem
> vrednosti registara čipa 8254. Pošto se ovaj interapt normalno
Izvini, jel' možeš nešto više da napišeš o programiranju 8254.
pedja
cccc.241todorp,
> Pa covek ti je lepo rekao: Programming Work Bench.
A bas me zanima gde mi je rakao.
Pozdrav od Todora.
ps.Ne mislim da bulaju.
cccc.242todorp,
> Eh, :) pa naravno. U asembleru, doduse, ali to nista ne menja stvar. Sto
> se C-a tice, akojovic je upravo ostavio programce koje uz minimalne
Ok! Procitao sam poruku 7.230 i sad mi je jasno zasto je zaglavljivalo. Pitao
sam zato sto sam negde procitao da je int 8 osetljiv i da recimo nesmes da ga
cisto odseces (izmedju ostalog i zbog poziva int 1c i da ima neka fora sa
iret) ali izgleda da sam zaboravio sta sam procitao ;))
Pozdrav od Todora.
ps. No hard feelings ;)
cccc.243zzivotic,
Jugodata nudi
STALNI posao
programeru sa znanjem C-a i baza podataka,
spremnom za timski rad.
Jugodata - Beograd, B.Revolucije 326,
Tel/Fax: (011) 418-326, 419-768
cccc.244skerl,
Using Microsoft Foundation Classes with Borland C++ 3.1
Prepared by:
Language Business Unit
Borland International
1800 Green Hills Road
PO Box 660001
Scotts Valley, CA 95067-0001
Overview
This document describes how to build and use Microsoft Foundation Class
(MFC) programs with Borland C++ 3.1. This document is divided into
several sections. The first describes changes to make to the MFC source
files; the second, changes and suggestions for the build process; and the
final section explores compiling an example providing with Microsoft C/C++
7.0.
The changes described in this document are necessary for several reasons.
Some relate to non-standard syntax that Microsoft uses in their C++
compiler, while others relate to differences in assembly language
extensions and makefile conventions.
Pozdrav,
Skerl.
mfc-bc.zipcccc.245zolika,
Molio me je jedan kolega sa fakulteta da se raspitam:
Da li neko od cenjene gospode sezamovaca koristi (tako mi je rečeno)
C ISAM (Index Sequential Access Method)? Reč je o nekim rutinama pisanim u
C-u za indeks-sekvencijalne datoteke. Ako neko zna nešto više o nekom takvom
softverskom paketu molio bih ga da to napiše ovde ili da me obavesti privatnom
poštom.
cccc.246akojovic,
>Izvini jel' možeš nešto više da napišeš o programiranju 8254
Pošto odgovaram sa par dana zakašnjenja (nažalost imao sam puno
posla) trudiću se da bar budem opširan.
žip 8254 (ili 8253 na XT-u) ima tri identična, nezavisna kanala
koji su programabilni. Rad je nezavistan od CPU. Po tri registra
kontrolišu rad svakog kanala. Svakoj grupi od tri registra se pristupa
roz jedan U/I port 40H-42H za kanale 0-2. Sva tri kanala su uvek
aktivna. Kanalima su dodeljene po dve ulazne i jedna izlazna linija.
Pri programiranju kanala, nakon komandnog bajta, šalje se dvobajtna
vrednodst (prvo niži bajt) koja se smešta u 16-bitni leč registar, a
odatle smešta u 16-bitni brojač. Brojačkom registru se pri svakom
impulsu sistemskog sata vrednost smanjuje za jedan. Kada odbroji do
nule na izlazu kanala se generiše impuls, a iz leč registra se vrši
novo kopiranje 16-bitne vrednosti. Što je manja vrednost u brojačkom
registru impulsi su učestaliji. Trenutna vrednost bilo kog brojačkog
registra može biti očitana u svakom trenutku bez ometanja
odbrojavanja.
- Kanal 0 koristi sistemski sat. Generiše impulse približno 18.2
puta u sekundi. Linija je hardverski povezana na INT 8 (tajmer
interapt). Izlazna linija kanala 0 se takodje koristi za kontrolu
operacija sa diskom tako da u slučaju da nešto petljaš sa njom moraš
obnoviti originalne vrednosti pre pristupa disku.
-Kanal 1 kontroliše osvežavanje memorije (osim na PCjr) i ne treba
ga dirati (povezan je na DMA).
-Kanal 2 je povezan na zvučnik. Medjutim tu vezu je moguće
prekinuti i koristiti ovaj kanal za tajming. Vezu sa zvučnikom
kontroliše prvi bit porta B čipa 8255 (adresa 61H). 0-ti bit ovog čipa
kontroliše klok signal kanala 2. Da budem malo jasniji:
Dve ulazne linije svakog kanala su 'clock' linija koju kontroliše
sistemski sat i 'gate' linija koja uključuje i isključuje klok signal.
Za linije 0 i 1 'gate' linija je uvek na visokom logičkom nivou
(odbrojavanje se ne može zaustaviti) dok kanal 2 kontroliše navedeni
najniži bit porta 61H.
Frekvencija klok signala je 1193180 Hz (na svim mašinama). Pošto
je najveći broj u 16-bitnom registru 65535 maksimalni razmak izmedju
impulsa koji se može dobiti iznosi oko 55ms.
žip 8254 nudi 6 modova rada za svaki kanal (uglavnom se koristi
samo mod 3 koji generiše pravougaone impulse). 8-bitni komandni
registar kontroliše upis u leč registre. Nalazi se na adresi 43H.
Komandna reč ima sledeći oblik:
bit 0 ako je 0 podatak je binarni, inače BCD
3-1 broj moda, 0-5 (000-101)
5-4 vrsta operacije
00 = upisuje vrednost iz brojačkog registra u leč
01 = čita/zapisuje samo viši bajt
10 = čita/zapisuje samo niži bajt
11 = čita/zapisuje niži bajt, zatim viši bajt
7-6 broj kanala koji se programira, 0-2 (00-10)
Ukoliko te još nešto interesuje (ili nisam bio dovoljno jasan)
pitaj. Usput da se zahvalim todorp-u i vasicu na njihovim odgovorima.
Pozdrav, Koja
cccc.247mbacic,
Da li neko zna kako napraviti senku u tekstualnom modu u C-u,ne racunajuci
ZZ-ov meni interfejs jer ta funkcija nece da radi kada se kompajlira sa TC++
1.0
cccc.248bulaja,
Evo diskusije o stilu programiranja u C++.
Izvodi su sa nekog USA BBS-a, pojma nemam kog :),
al' izgleda zanimljivo :).
cppstyle.arjcccc.249ppekovic,
>> Da li neko zna kako napraviti senku u tekstualnom modu u C-u,ne racunajuci
>> ZZ-ov meni interfejs jer ta funkcija nece da radi kada se kompajlira sa TC++
>> 1.0
Evo ti box i shadow funkcije. Pišu direktno u video memoriju.
Ne znam da li će raditi na TC-u jer kosritsim _segment i _based, a
nisam siguran da to TC ima. Međutim, zaista je jednostavno to
prepraviti. BTW. funkcija shadow omogućuje 9 vrsti senki (iz svih
uglova).
Paya
shadow.ccccc.250vasic,
> -Kanal 1 kontroliše osvežavanje memorije (osim na PCjr) i ne treba
> ga dirati (povezan je na DMA).
Imam (imao sam?) neko programče - boost.com koje baš menjajući
učestanost osvežavanja memorije ubrzava računar. Autor tvrdi da je to
njegovom XT-u dalo krila, ubrzalo ga ne znam koliko posto, omogućilo mu
da interliv diska smanji sa 1:1e10 na neku normalniju vrednost i slično.
Kod mene (12MHz AT) ubrzanje je svega par procenata. Ako ga nađem,
baciću ga ovamo.
cccc.251pstojanovic,
Nisam dosada nesto mnogo pisao u c-u, pa imam jedan problem :
asm š
...
...
jnc ok
...
...
ok:
...
...
ć
u BC 2.00. (inline assembler) javlja gresku tipa
Undefined label 'ok'.
Medjutim kada uradim
asm š
...
...
jnc ok
...
...
ć
ok:
asm š
...
...
...
ć
radi bez problema.
U TP 6.00 to se resavalo stavljanjem znaka 'č' ispred labele,
medjutim, sada ne pomaze.
Problem je kada trebam pisati duze sekvence u asembleru, sto bi
me teralo da stalno zatvaram i otvaram asm š blokove. Da li postoji
bolje resenje ?
Hvala na pomoci.
cccc.252mbacic,
Hvala ppekovicu!!!
cccc.253akojovic,
Nabavio sam neki program koji koristi čip 8254 za merenje
trajanja izvršenja neke procedure. Priložen je izvorni kod u asembleru
C-u i CPP-u. Evo šta kače autor:
The Zen Timer Library
=====================
Version 1.1
This is a 'C' callable library for timing code fragments with an accuracy of
better than 10 microseconds (less when using the long period zen timer). The
code was originally written by Michael Abrash for his book "Zen of Assembly
language - Volume I, Knowledge". I modified the code and made it into a 'C'
callable library and added the utility routines LZTimerCount() and
PZTimerCount() to return an unsigned long integer representing the timed
count in microseconds, and a set of C++ wrapper classes.
This new version include a new Ultra Long Period timer that can be used
to time code that takes up to 24 hours to execute with an accuracy of 1/10th
of a second. I have fixed the long period Zen Timer so that you can now
time across a midnight boundary correctly, and I have added a number of
C++ classes that provided a common interface to the timing routines.
Pozdrav, Koja
interapt.zipcccc.254mjova,
> Nabavio sam neki program koji koristi čip 8254 za merenje
> trajanja izvršenja neke procedure. Priložen je izvorni kod
> u asembleru C-u i CPP-u. Evo šta kače autor:
verovatno da je lepo pogledati kako radi program, ali za merenja svih
vrsta preporučujem turbo profiler. u mnogim slučajevima mi je olakšao
izbor koda.
cccc.255mjova,
> Problem je kada trebam pisati duze sekvence u asembleru,
> sto bi me teralo da stalno zatvaram i otvaram asm š
> blokove. Da li postoji bolje resenje ?
mislim da nema :( osim da napišeš dotičnu rutinu u posebnom modulu i
da je prevedeš čistim tasm-om. vrlo jednostavne primere možeš naći u
uputstvu.
cccc.256pbojan,
>> Da izmerim duzinu: 1+1+13+4+2+2+2+4 = 29
>>
>> Medutim, sizeof(ARCHIVE_HEADER) daje 30. Ako promenim
>
> Da nisi naredio smestanje na parne adrese?
Seca li se ovog neko?
A secate li se kada sam prijavio zaglavljivanje jedne aplikacije u HUGE
modelu posle cirka 60K na heap-u? Tada sam izjavio, bog me ubio, da cu
prvom prilikom naci vremena i isceprkati gde je to Borland napravio
bag sa alokacijom memorije.
E, nadjoh vremena, pa da se pospem pepelom: ja se gore pravim pametan,
kao znam ja sta su parne adrese, a upravo to mi je rusilo aplikaciju
svih 2348 puta. Naime, odvojio sam memoriju za tamo neki bafer, cija je
duzina bila "nemam_pojam_ali_zato_sizeof_zna"...
A ja promenio i algoritam, i jos 20% koda okolo, onako u zaletu. :((
Covek se uci dok je ziv, a narocito tada.
cccc.257dekiper,
Svi znamo da u C-u postoje tri bitwise operatora AND - &, OR - đ i XOR - ž.
Međutim, u C-u postoje samo dva logička operatora AND - && i OR - đđ dok
ekvivalenta operatoru XOR nema. Da li neko ima ideju kako bi se ovaj operator
mogao realizovati ili barem simulirati i u C-u. Dakle, da li je moguće
napraviti logički XOR (žž)?
cccc.258pedjak,
> Pošto odgovaram sa par dana zakašnjenja (nažalost imao sam puno
> posla) trudiću se da bar budem opširan.
Hvala !
pedja
cccc.259akojovic,
Evo jednog SW programčeta koji radi baš to što si naveo, smanjuje
učestanost osvežavanja i time ubrzava rad.
mhz.zipcccc.260peca.st,
!-> ekvivalenta operatoru XOR nema. Da li
!-> neko ima ideju kako bi se ovaj operator
!-> mogao realizovati ili barem simulirati i
!-> u C-u. Dakle, da li je moguće napraviti
!-> logički XOR (žž)?
Pa XOR je vrlo lako simulirati sa OR i AND.
(ne znam o C-u, pa pišem čisto logičkim izrazom)
A XOR B <=> ((A=true) and (B=false)) or ((A=false) and (B=true))
ili ti A XOR B <=> A<>B (u smislu da su logičke vrednosti A i B različite)
Peđa.
cccc.261pstojanovic,
>> mislim da nema
Baš tužno.
>> osim da napišeš dotičnu rutinu u posebnom
>> modulu i da je prevedeš čistim tasm-om.
To je ok., mada ću nastaviti sa pisanjem u samom editoru. Zgodnije mi je
da radim u integrisanoj okolini pa makar kod izgledao malo ružno.
Doduše, i to se može rešiti preko pretprocesora sa
#define ASML(Arg) ć Arg: asm š
Interesantna je nedoslednost paketa; ako se već goto labele mogu
postavljati u okviru bilo kog bloka ograničenog sa šć, zašto to nije
uradjeno na neki način i za ASM šć blok ?
Postavio sam ovo pitanje u okviru pogrešne teme. Nisam video da je otvorena
tema cpp. :)
cccc.262robert,
>> ekvivalenta operatoru XOR nema. Da li neko ima ideju kako bi se
>> ovaj operator mogao realizovati ili barem simulirati i u C-u.
>> Dakle, da li je moguće napraviti logički XOR (žž)?
Pa iz logike znaš da je x XOR y = (x && y) || (!x && !y) i eto ti rešenja.
cccc.263djelovic,
>> ekvivalenta operatoru XOR nema. Da li neko ima ideju kako bi se
>> ovaj operator mogao realizovati ili barem simulirati i u C-u.
>> Dakle, da li je moguće napraviti logički XOR (žž)?
!x ž !y
cccc.264dnikolic,
>> verovatno da je lepo pogledati kako radi program, ali za merenja svih
>> vrsta preporucujem turbo profiler. u mnogim slucajevima mi je olaksao
>> izbor koda.
Meni nikako da proradi Profajler! :((( Sve (?) sam pokusao, i stalno
prijavljuje gresku Loading Error. Treba li mozda neka specijalna instalacija za
TP. Inace, ja ga uvek pozivam iz integrisane okoline.
dn
cccc.265vasic,
> Evo jednog SW programčeta koji radi baš to što si naveo, smanjuje
> učestanost osvežavanja i time ubrzava rad.
Mali (MHZ+) se pravi previše pametan sa svojim određivanjem optimalnog
osvežavanja. Svaki put dobijem "On board parity error at ..." Ali zato
evo Boost-a. Dovoljno je sitan da nije nikakav problem izvući iz njega
deo koji radi posao. Eksperimentisao sam malo sa promenom osvežavanja,
ali bolje od Boost-ovog podrazumevanog nisam uspeo da dobijem. I još
nešto: program se MORA startovati sa "BOOST 1" jer je samo "BOOST" isto
što i "BOOST 0", tj. vraća osvežavanje memorije na normalno (i sporo).
boost.arjcccc.266peca.st,
!-> Pa iz logike znaš da je x XOR y = (x &&
!-> y) đđ (!x && !y) i eto ti rešenja.
Robert, ovo je, meni se čini, netačno. XOR daje true kada su x i y različiti,
kod tebe daje kada su isti...
Time se postiže ono čuveno:
(X XOR Y) XOR Y = X
Peđa.
cccc.267robert,
>> Robert, ovo je, meni se čini, netačno. XOR daje true kada su x i y
>> različiti,
Da... (stidim se ;).
Treba: x XOR y = (!x && y) || (x && !y) a ono prethodno bi značilo
u stvari: !(x XOR y).
cccc.268dnikolic,
Moze li neko malo detaljnije da objasni kako se preuzima od DOS-a kontrola
gresaka prilikom kopiranja fajlova na diskete (treba mi u jednom programcetu)?
Posto se, predpostavljam, radi o preuzimanju nekog interapta, ima li neko
primercic kako se na ekran "montira" sat?
Kad sam se ces raskukao, treba mi i kalkulator i kalendar. Ko ce sve to da
programira! :)
Hvala, dn
cccc.269ndragan,
/ napraviti logički XOR (žž)?
Može na najbanalniji način - != (nije jednako - nisam siguran u C
sintaksu).
a b a=b a!=b a xor b
0 0 1 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 0 0
cccc.270dekiper,
Zahvaljujem svima koji su odgovorili na moje pitanje o XOR operatoru. Ideje su
odlične i nadam se da ću uz pomoć njih uspeti da rešim problem. Naime radi se o
zbirci nekih paskalskih programa u kojoj sam našao jednu interesantnu proceduru
koja bi mi dobro došla u C-u. Iskaz je glasio ovako:
if(((a!=b SHL 3) XOR (a SHR 3) AND (a>b)) XOR (b+sqrt(c) SHL 4) AND (c XOR a))
Pretpostavljam da bez celog programa nećete skontati šta ovo znači, (radi se o
nekim vrlo primitivnim operacijama sa dužima), ali se ipak nadam da ću uspeti
da rešim problem. Hvala, dekiper.
cccc.271dnikolic,
Postoji li nesto cime se mogu kreirati maske za unos podataka, pa da se kasnije
ta maska koristi u programu? Ubih se ovako! :(
dn
cccc.273ljubao,
** Moze li neko malo detaljnije da objasni kako se preuzima od DOS-a
** kontrola gresaka prilikom kopiranja fajlova na diskete (treba mi u
Pogledaj funkciju harderr.
** jednom programcetu)? Posto se, predpostavljam, radi o preuzimanju nekog
** interapta, ima li neko primercic kako se na ekran "montira" sat?
Imaš u C direktorijumu primer (čini mi se SNIP* arhiva).
** Kad sam se ces raskukao, treba mi i kalkulator i kalendar. Ko ce sve to
** da programira! :)
Za 50 DEM - ja. ;)
Ljuba
cccc.274bulaja,
**** new file ****
R:\IBMPC\C\*.*
----------------------
snip1292 arj 153308 C-snippets 12/92, zbirka raznih C funkcija (source) #1
snip1292 a01 152091 C-snippets 12/92, zbirka raznih C funkcija (source) #2
Odlicna zbirka, sadrzi oko 280 (!) C funkcija raznih namena, sve je dato
u izvornom (source) kodu. Uz poruku je prikacen indeks svih funkcija.
snippets.arjcccc.275pyramid,
Evo jednog velikog problema:
Interapt 08h proverava da li se dogodio neki event (tastatura, mis i sl.),
pa ako jeste da zameni ss:sp za moj stek. Sve to u principu radi, ali...
Koliko sam ja ukapirao, int 08h je nemaskirajuci, sto ce reci, dogadja se
uvek bez obzira na IF. To bi trebalo da znaci da moze prekinuti izvrsavanje
neke int xx komande. Izgleda da zbog toga program i puca. Ako zabranim zamenu
stekova pre izvrsenja bilo koje funkcije iz stdlib-a (printf, puts, pa cak i
kbhit) sve radi kako treba, ali neverovatno usporava stvari... Kako to moze
da se sredi i da li je uopste u tome problem? Kada postavim breakpoint na
delu za zamenu stekova, trenutna vrednost ss:sp je 0116:0840 sto je totalna
nebuloza (niti je to neki od mojih stekova, niti je to uopste neki stek)...
Da li neko ima iskustva sa ovim? Program je inace pisan u BC3.1 huge model.
Ako treba malo da pojasnim stvar napisacu primer programcic...
Nebojsa
cccc.276mjova,
> Interapt 08h proverava da li se dogodio neki event
> (tastatura, mis i sl.), pa ako jeste da zameni ss:sp za
> moj stek. Sve to u principu radi, ali...
int 08 se generiše posle određenog vremenskog intervala. nije mi baš
jasno kako si hteo da izvedeš da se on startuje u svim uslovima?
int 9 se generiše radi obrade tastature, a int (8+3,4) se generiše ako
je došlo do mrdanja pacova (zavisi na kom com portu je).
što se tiče ostalog, nisam primetio da imam problema, i ako sam
petljao sa sva tri inta koja pominješ. da li si ti pisao rutinu za int
8?
cccc.277pyramid,
>> da li si ti pisao rutinu zaint 8?
Da... Ali cini mi se da me nisi najbolje razumeo. Mis je hendlovan preko rutine
int 33/0c tako da se pri svakom pokretu pozi´kva moja rutina. Ona samo upise na
odredjeno mesto da je mis pomeren/pritisnuto dugme. E, onda int 8 proverava to
mesto da li je nesto upisano, pa ako jeste zameni stek... Moj problem je u tome
sto se int 8 generise UVEK posle odredjenog vremenskog intervala (u mom slucaju
200Hz), pa cak i kada je IF=0, sto ce reci, int 8 je NMI... Kada se izvrsava
odredjena funkcija dos-a (znaci int 21 ili slicni) i int 8 se generise stek je
potpuno se sludi (dobija stalno istu vrednost 0116:08xx). Zasto? S obzirom da
EventHandler (koji se dogadja po pritsku na neko dugme misa/dastature) nije
jedini task, int 8 ce prvo spremiti vrednost steka u Task strukturu programa
koji se trenutno izvrsava. Kako je stek potpuno druga vrednost, kada
EventHandler vrati stek tog taska (koji ustvari i nije stek - F,CS,IP koje IRET
skine sa njega su potpuno nebulozni), ode sve tamo daleko.... Kada bih mogao da
zabranim generisanje int-a 8 dok se izvrsava npr. int 21 i slicni mislim da bi
problem bio resen (sve lepo shljacka kada pred izvrsavanje puts, kbhit-a koje
trenutno za testiranje koristim, stavim zabranu promene taska, ali s obzirom da
program uglavnom izvrsava ove instrukcije to znatno usporava reagovanje na
pritisak tastera)... Pokusavao sam razne nacine pa i skidanje sa steka Flag
registra i testiranje IF-a, pa ako je 0 promena taska je zabranjena, ali nece.
Kada ga u TD-u zaustavim na tom delu, Flag registar je takodje potpuno sludjen
(neki od onih 'nedokumentovanih' bitova je setovan npr., IF jednom jeste jednom
nije itd.). Ako se stek tada ne promeni sve radi i dalje normalno.... Kako?
Zasto???
Nebojsa
cccc.278djelovic,
> Moj problem je u tome
> sto se int 8 generise UVEK posle odredjenog vremenskog interva
> 200Hz), pa cak i kada je IF=0, sto ce reci, int 8 je NMI...
Uzmi neki drugi interapt. Pogledaj malo unazad, dal' vasa dal dzakic su
pisali o nekom zgodnom. Ili testiraj INDOS fleg, kao što se to radi za TSR
programe.
cccc.279nkbog,
> Koliko sam ja ukapirao, int 08h je nemaskirajuci, sto ce reci, dogadja
> se uvek bez obzira na IF.
Ajoj. Teško. To bi značilo da x86 prvo skoči na int 2, pa na int 8. (int 2
je NMI). Tajmer stalno generiše prekide, ali kada prekide onemogućiš, oni
se jednostavno ne prepoznaju. Jednostavno: napravi program koji uradi CLI,
i vrti se u petlji, a int 8 nešto piše na ekran, videćeš da ništa ne radi.
> To bi trebalo da znaci da moze prekinuti izvrsavanje neke int xx komande.
Uvek se može desiti prekidanje nekog interapta. DOS, Mpx, Video svi oni
mogu imati pozive duže od 55 ms, pa samim tim mogu biti prekinuti od
strane tajmera. A svi oni obično imaju na početku naredbi STI, upravo da
ne bi zbunjivali tajmer, COM port et al. Da bi to sigurno radilo
testiraj da nisi možda u okviru DOS (InDOS), Keyboard, COM, ili Video
prekida (preuzmeš ih i ažururaš brojač svaki put kad se pozovu, odnosno
završe).
Izgleda da zbog toga program i puca.
> Ako zabranim zamenu stekova pre izvrsenja bilo koje funkcije iz
> stdlib-a (printf, puts, pa cak i kbhit) sve radi kako treba, ali
> neverovatno usporava stvari...
Možda radi, al' neće uvek: ako je stek nekog programa skoro pun, pa ga
prekine tajmer, a ti pozoveš printf ima da se nakupiš ihaha stvari na
steku i da šlogiraš sistem. Logično je da jako usporava, jer te funkcije
rade preko DOS-a.
NB.
p.s. IMHO BC, MSC et al nisu zgodni za kritične delove TSR.
cccc.281wizard,
U svakom izvršnom fajlu generisanim BC-om figuriše Borland-ovo ime i
kopirajt poruka.
Predpostavljam da je krivac za nju TLINK, a pošto bih želeo da je
izbegnem, da li je to moguće ili da menjam linker?
cccc.282djelovic,
> Predpostavljam da je krivac za nju TLINK, a pošto bih želeo da
> izbegnem, da li je to moguće ili da menjam linker?
Uzmi lepo PC TOOLS ili Nortona u ruke i sredi stvar. Ili ako ti treba
često, napravi mali programčić.
BTW, postoji masa programa koja traže određeni string u nekom fajlu.
Postoji li neki koji radi search&replace? Nešto kao grep-with-replace.
cccc.283.obj,
> U svakom izvršnom fajlu generisanim BC-om figuriše Borland-ovo ime i
> kopirajt poruka.
>
> Predpostavljam da je krivac za nju TLINK, a pošto bih želeo da je
> izbegnem, da li je to moguće ili da menjam linker?
Nema veze TLINK sa time. Borland copyright se nalazi u startup-kodu,
tj. onome što se izvrši pre main() (inicijalizacije, obrada kom. linije
itd). Dakle, u datoteci CRT0.ASM (ili kako se već zove kod BC, valjda
C0.ASM) promeniš taj copyright i asembliraš ponovo CRT0.ASM. Trebalo bi
da za to asembliranje postoji nekakav BAT (MAKECRT.BAT ili nešto
slično).
E, da. Ne smeš 'tek tako' da promeniš taj copyright jer se provarava
njegov checksum (zbog kontrole da li je nešto upisivano u početak DATA
segmenta, gde se taj Copyright nalazi). Najbolje pogledaj gde je taj
CMP AX, Checksum, pa sledeću instrukciju prepravi da checksum uvek bude
OK (ako ti je baš toliko važan taj (C)). Inače (ako ne prepraviš tu
proveru) će te tvoj program na kraju uvek pozdravljati sa 'Null pointer
assignment'.
cccc.284pyramid,
Da li neko zna kako TurboVision reaguje na pritisak tastera, ili pomeranje misa
(i uopste sve event-e koji mogu da se dogode, npr. pritisak dugmeta misijeg dok
je pointer na vrhu prozora sto rezultira njegovim pomeranjem) i koje sve
interapte menja i zasto??
Nebojsa
P.S. Veoma mi je vazno, zaglavio sam se u sred programa... :(
cccc.285nkbog,
> Uzmi lepo PC TOOLS ili Nortona u ruke i sredi stvar. Ili ako ti treba
> često, napravi mali programčić.
Samo ako je program u LARGE modelu ili ako je za Windows, inače
imamo "null-pointer assignement"... Najbolje rešenje je preko
prerade C0?.ASM za BC odnosno CRT* za MSC. Treba pre promene
kopirajta izmeniti proveru null-pointer assignementa (proveru
kontrolne sume kopirajta).
NB.
p.s. Nemojte misliti da Borland ili Microsoft onda neće znati
da ste koristili njihove kompajlera i run-time biblioteke...
cccc.286mrmf,
> Ima li neko "Trilogiju o Zemljomorju" Ursule Legvin?
Imam. Reci, kazi.
Brada
cccc.287ematic,
> U svakom izvršnom fajlu generisanim BC-om figuriše Borland-ovo
> ime i kopirajt poruka.
>
> Predpostavljam da je krivac za nju TLINK, a pošto bih želeo da
> je izbegnem, da li je to moguće ili da menjam linker?
Jok, nije linker zapalio seno. Moraš da menjaš c0.asm, gde se nalazi
start-up koji se obavezno linkuje. Samo, moraš malko da pripaziš, jer
nije dovoljno promeniti samo poruke, nego mora još malo da se čačne
po programu, piše_tamo_gde :))). Posle toga, build-c0.bat i gotovo.
cccc.288wizard,
> imamo "null-pointer assignement"... Najbolje rešenje je preko
> prerade C0?.ASM za BC odnosno CRT* za MSC.
Hvala na odgovoru tebi, .obj-u i ematic-u. A što se tiče pc-tools-a
((c) djelovic :) - da je to radilo, ne bih ni pitao. :)
> p.s. Nemojte misliti da Borland ili Microsoft onda neće znati
> da ste koristili njihove kompajlera i run-time biblioteke...
Neka znaju, ali ne mogu da dokažu ;) (tako je najslađe :).
cccc.289wizard,
> E, da. Ne smeš 'tek tako' da promeniš taj copyright jer se provarava
> njegov checksum (zbog kontrole da li je nešto upisivano u početak DATA
> segmenta, gde se taj Copyright nalazi).
Da li tako trivijalna promena (eliminisanje kontrole) može da ima i neke
negativne posledice? Vrlo se slabo razumem u same procese link-ovanja,
kompajliranja i generisanja .EXE fajlova, pa ne zamerite što davim. :)
cccc.290janko,
>> Predpostavljam da je krivac za nju TLINK, a pošto bih
>> želeo da izbegnem, da li je to moguće ili da menjam
> linker?
>
> Uzmi lepo PC TOOLS ili Nortona u ruke i sredi stvar. Ili
> ako ti treba često, napravi mali programčić.
No chance!
Slučajno, poruka je nameštena tako da ako je menjaš dobijaš
NULL ASIGNMENT. ;)
Moguće je je izbeći, malo suptilnijim metodima, ali nije u
redu... sve dok ne napišete sopstveni ran tajm.
cccc.291nkbog,
> Neka znaju, ali ne mogu da dokažu ;) (tako je najslađe :).
Na žalost, ili njihovu sreću, mogu. Naime koristiš njihov kod
koji ostavlja trag (na primer svaka firma ima neki svoj način za
strcpy - razlike su trivijalne, ali postoje), i mogu da te tuže
za ilegalno korišćenje softvera, naravno u Americi i naravno
ukoliko im se to isplati (a čisto sumnjam).
NB.
cccc.292nkbog,
> Da li tako trivijalna promena (eliminisanje kontrole) može da ima i neke
> negativne posledice?
U toku debagovanja programa nema smisla to raditi, jer je to
pomoć razvoju programa. U distribuciji ukoliko je program
sigurno tačan (sic!) taj deo je suvišan i može se izbaciti.
Ima i drugi način: uzmeš NU ili PCT promeniš kopirajt, nađeš
poruku koja se ispisuje kao NULL pointer assignement i staviš
0 na njen početak (ili je pormeniš u May the farce be with
you...).
NB.
cccc.293djelovic,
> Hvala na odgovoru tebi, .obj-u i ematic-u. A što se tiče pc-to
> ((c) djelovic :) - da je to radilo, ne bih ni pitao. :)
Borland C++ kpoirajt poruku upisuje na dno data segmenta. E sad, ovo se
koristi u malomemorijskim :) modelima da se proveri da li je došlo do NULL
pointer asajnmenta :), ali u velikomemorijskim :) modelima ona nema funkciju.
Tj., PCT tehnika radi za program pisan u, recimo, large modelu.
Ozbiljno pitanje: Da li ima iko ko u ozbiljnim programima (linija > 100)
koristi neki drugi model osim large? :)
cccc.294akojovic,
Ne znam šta ti konkretno treba, ali Turbo Vision upravo služi da
se izbegne petljanje sa kontrolom miša i tastature. Prevešću ti
nekoliko rečenica iz uputstva za TV pa ako te nešto konkretnije zanima
pitaj.
Postoji četiri tipa dogadjaja
MOUSE EVENTS
- postoje četiri vrste dogadjaja vezane za miša: pritisak i
otpuštanje bilo kog tastera, promena položaja i "auto" dogadjaj.
Pritisak tastera generiše evMouseDown, otpuštanje evMouseUp a pomeranje
evMouseMove. Ukoliko se neki taster drži pritisnut periodično će biti
generisan evMouseAuto.
KEYBOARD EVENTS
- oni su najjednostavniji, pritisak tastera generiše evKeyDown.
MESSAGE EVENTS
- oni dolaze u tri oblika: komande, emitovanja i korisničke
poruke. Razlike su u načinu obrade. (Da ne objašnjavam mnogo emitovanje
se koristi za komunikaciju. Recimo kada klikneš na skrol bar pri
pregledu fajla funkcija koja prikazuje tekst mora dobiti komandu koja
će dovesti do prikazivanja drugog dela teksta)...
NOTHING EVENT
- ako se ništa nije dogodilo
TEvent struktura je definisana u system.h i ima oblik
struct TEvent
š
ushort what;
union
š
MouseEventType mouse;
KeyDownEvent keyDown;
MessageEvent message;
ć;
void getMouseEvent();
void getKeyEvent();
ć
getMouseEvent postavlja odgovarajuću evMousexxx vrednost ili ako nije
diran miš evNothing dok getKeyEvent poziva BIOS INT 16 rutinu da
proveri da li je bilo pritisaka na tastaturu
MessageEvent ima posebnu strukturu, ali to je mnogo duga priča.
Zato ako te još nešto interesuje pitaj konkretnije, ne mogu da
prekucavam celu knjigu.
Pozdrav, Koja
cccc.295dcolak,
Ne znam dal pogotih conf. no evo problema..
Kako da u MSC6.0 primim RING signal sa
modema na COM3 ?
Tj. šta se dešava kada modem dobije RING?
Tj. hteo bih da napravim nešto kao TSR
winfax, tj. da mi ekran "zasvetli" ;)
kad pozvoni telefon.
Tj. kako da pokupim bilo kakav signal sa
COM3 iz mog programa. Preko kog interapta?
Glavni mi je problem da znam na koji
interapt treba da se nakačim. Mada mi
i nije najjasnije kako ću pristupiti COM3
dok je sa _bios_serialcom lako pristupiti
COM2 i 1 :((
So, na koji interapt da se prikačim, odakle
da čitam primljen signal? Tj, kako da proverim
sa kog COM-a stiže signal?
Sledge DAMMIR!
cccc.297mihajl,
Na VAX-u ( BUEF78:: ) je otvorena nova konferencija USENET koja
prenosi poruke sa istoimene mreze sa trulog zapada. Trenutno su
najvise prenesene poruke za C++, ali kazu da ce biti i ostalih
konferencija. Uz poruku je prikacen fajl sa nazivima rasprava.
Notes> dir
USENET
Created: 23-MAR-1993 13:16 4 topics Updated: 2-APR-1993 12:59
Topic Author Date Repl Title
1 BUEF78::DRAGANSR 23-MAR-1993 1 Introduction
2 UBBG::EMALENOV 24-MAR-1993 11 USEnet dokumentacija
3 UBBG::EMALENOV 24-MAR-1993 20 FAQ comp.lang.c++
4 UBBG::EMALENOV 24-MAR-1993 663 comp.lang.c++
[ End of requested listing ]
cvax.arjcccc.298.obj,
> Da li tako trivijalna promena (eliminisanje kontrole) može da ima i neke
> negativne posledice?
Teoretski da, praktično ne. Osim te 'Null pointer assignment' greške
koja se, kao, na taj način kontroliše, postoji barem 431 milion načina
da program ne radi zbog greške pri operacijama sa pokazivačima...
Slobodno menjaj :)
cccc.299.obj,
> So, na koji interapt da se prikačim, odakle
> da čitam primljen signal? Tj, kako da proverim
> sa kog COM-a stiže signal?
Računari 57, tekst Zorana čivotića. Tamo piše sve što si tražio.
cccc.300wizard,
> Ima i drugi način: uzmeš NU ili PCT promeniš kopirajt, nađeš
> poruku koja se ispisuje kao NULL pointer assignement i staviš
> 0 na njen početak (ili je pormeniš u May the farce be with
> you...).
Mislim da ću usvojiti ovo rešenje. Hvala, trebalo se setiti. :)
cccc.301dgrbic,
:: Da li tako trivijalna promena (eliminisanje kontrole)
:: može da ima i neke negativne posledice? Vrlo se slabo
:: razumem u same procese link-ovanja,
Ne može ako tvoj program inače ne izleće sa ranije pomenutom porukom o null
pointerima :)
Znači, prvo očistiš program od insekata, pa onda promeniš c0.asm i nema
frke.
cccc.302dgrbic,
:: Neka znaju, ali ne mogu da dokažu ;) (tako je najslađe
:: :).
Mogu, kako ne bi mogli :)
Dovoljno je da pronađu npr. printf kod i pošto je on identičan u njihovoj
biblioteci i kod tebe...
cccc.303dcolak,
│ Računari 57, tekst Zorana čivotića. Tamo piše sve što si
│ tražio.
Ali ne kaže mi na koji interapt da se nakačim,
kako bih napravio TSR, koji će se aktivirati
na RING...
Sledge DAMMIR!
cccc.304pyramid,
Sve mi je to jasno, ali KAKO TO RADI??? Koje on interapte postavlja da bi dobio
poruku od misa i kada je ta poruka dobivena kako postupa (npr. promeni INT
33/0c - pokazivac na user interrupt handler za misa i kad se dogodi klick na
okvir prozora on mora startovati svoju rutinu koja ce taj prozor
pomeriti/rasiriti/ugasiti... Kako to izvodi?)
Ovo mi je potrebno jer sam napravio svoj sistem prozora za odredjeni
programcic...
Nebojsa
cccc.305djelovic,
> Sve mi je to jasno, ali KAKO TO RADI??? Koje on interapte post
> poruku od misa i kada je ta poruka dobivena kako postupa (npr.
> 33/0c - pokazivac na user interrupt handler za misa i kad se d
> okvir prozora on mora startovati svoju rutinu koja ce taj proz
> pomeriti/rasiriti/ugasiti... Kako to izvodi?)
Hoćeš da ti pošaljem klasu za miša koja sve to radi?
cccc.306pyramid,
>> Hoces da ti posaljem klasu za misa koja sve to radi?
Moze... Hvala unapred...
Nebojsa
cccc.307dcolak,
Evo ja opet. Dakle, kako da pristupim COM4 iz
MSC6.0 ?
Svi programi iz Racunara su za COM1 i 2. Sto
je veoma prosto posto ih podrzava MSC, ali
kako da dodjem do COM3 i COM4 ?!
Sledge DAMMIR!
cccc.308dekiper,
Molim te, ako možeš pošalji i meni. Puno puno zahvalan,
dekiper.
cccc.309akojovic,
Evo ti nekih rutina za rad sa COM portom. Objašnjenja su prilično
detaljna (a i prevedena su pošto je mojoj drugarici trebalo za
diplomski). Podržan je rad sa COM 1 - COM 4. Ako bude bilo problema
pitaj.
Pozdrav, Koja
ibmcom.zipcccc.310akojovic,
> Sve mi je to jasno, ali KAKO TO RADI??? ...
U okviru TEvent objekta se nalazi ushort član 'what'. Brojna
vrednost ovog člana opisuje vrstu dogadjaja koji se pojavio, a ostatak
strukture sadrži specifičnu informaciju o dogadjaju: kod pritisnutog
tastera u slučaju pritiska na tastaturu, informaciju o poziciji miša
i stanju tastera (da li su pritisnuti ili ne)... Tačan oblik možeš
pronaći u header fajlovima. Bitovi u ushort promenljivoj what su
rasporedjeni na sledeći način
┌───┬───┬───┬───┬───┬───┬───┬────────────────────────────────evMessage
│ │ │ │ │ │ │ │ ┌────────────────evKeyboard
│ │ │ │ │ │ │ │ │ ┌───┬───┬───┬evMouse
╔═¤═Đ═¤═Đ═¤═Đ═¤═Đ═¤═Đ═¤═Đ═¤═Đ═¤═Đ═══Đ═══Đ═══Đ═¤═Đ═¤═Đ═¤═Đ═¤═Đ═¤═╗
║msb│ │ │ │ │ │ │ │ │ │ │ │ │ │ │lsb║
╚═══¤═══¤═══¤═══¤═══¤═══¤═Đ═¤═Đ═¤═══¤═══¤═══¤═Đ═¤═Đ═¤═Đ═¤═Đ═¤═Đ═╝
│ │ │ │ │ │ └evMouseDown
│ │ │ │ │ └────evMouseUp
│ │ │ │ └────────evMouseMove
│ │ │ └────────────evMouseAuto
│ │ └────────────────evKeyDown
│ └────────────────────────────────evCommand
└────────────────────────────────────evBroadcast
Ako želiš da ispitaš da li se desio neki od dogadjaja vezanih
za miša umesto
TEvent event;
...
if (event.what & (evMouseDown đ evMouseUp...))!=0
...
možeš da koristiš
if (event.what & evMouse) !=0
...
Funkcija handleEvent obavlja ono što tebe interesuje. Ako želiš
u svojoj aplikaciji da uradiš nešto specifično treba da preradiš ovu
f-ju i naučiš novi handleEvent dve stvari: kako da reaguje na nove
komande koje si definisao i kako da reaguje na dogadadjaje izazvane
tastaturom ili mišem. Evo šta piše u knjizi:
virtual void TNewView::handleEvent (TEvent event)
š
// code to change or eliminate base view behavior
TBaseView::handleEvent(event);
// code to perform aditional functions
ć
Drugim rečima ako želiš da tvoja nova klasa obradjuje dogadjaje
drukčije nego bazna klasa obradićeš te dogadjaje pre nego što proslediš
dogadjaj baznoj handleEvent funkciji (Ona obradjuje one dogadjaje koje
si naveo: povećava/smanjuje prozore pomera ih i sl.)
Nadam se da će ti ovo pomoći.
Pozdrav, Koja
cccc.311djelovic,
Evo klase za baratanje sa mišem. Za razliku od drugih biblioteka
pomoću kojih možete da saznate samo poziciju miša i status dugmadi, ova
klasa vam daje jednu od sledećih informacija:
LCLICK - pritisnuto levo dugme
RCLICK - pritisnuto desno dugme
LDOUBLE - dupli klik levog dugmeta
RDOUBLE - dupli klik desnog dugmeta
DRAGON - korisnik je pritisnuo levo dugme i drži ga (koristi se
za vučenje objekta po ekranu)
DRAGGING - korisnik još uvek drži pritisnuto dugme
DRAGOFF - korisnik je otpustio levo dugme
Kako to sve radi? Pa lepo, samo deklarišete primerak klase Mouse
i konstruktor će sve da sredi:
Mouse pacov;
Sada možete da proverite da li je miš instaliran:
if (pacov.Installed ())
...
Mišiji kursor se skida i stavlja na ekran sa pacov.hide () i
pacov.show (). Pri tom ne treba zaboraviti da je mišiji kursor zapravo
softverski kursor (pravi ga drajver za miša - MOUSE.SYS), pa miša treba
isključiti pre svakog štampanja pa ga onda opet uključiti.
Funkcija get vraća status miša - tj. status pritisnutih dugmadi.
Takođe, ona postavlja koordinate x i y koje predstavljaju poziciju miša.
Mali primer:
#include <stdio.h>
#include <conio.h>
#include "mouse.hpp"
main ()
š
Mouse mis;
int dugme;
if (!mis.Installed ()) š
printf ("Drajver za miša nije instaliran.Đn");
return 1;
ć
mis.show (); // Prikazi misiji kursor
while (!kbhit ()) š // Dok ne pritisnes tastaturu
dugme = mis.get ();
if (dugme) š
mouse.hide (); // Sakri misa zbog ispisa na ekran
switch (dugme) š
case LCLICK: printf ("Levo dugme"); break;
case RCLICK: printf ("Desno dugme"); break;
case LDOUBLE: printf ("Levi dupli klik"); break;
case RDOUBLE: printf ("Desni dupli klik"); break;
case DRAGON: printf ("Pocetak vucenja"); break;
case DRAGGING: printf ("Vucenje"); break;
case DRAGOFF: printf ("Pustio dugme"); break;
ć
printf (" na poziciji %d, %d", mis.x / 8, mis.y / 8);
mouse.show (); // Vrati misiji kursor na ekran
ć
ć
mis.hide (); // Sakrij misiji kursor
return 0;
ć
--> Ovaj primer isecite i stavite na disk jer ga nema u arhivi <--
BTW, primetite da sam pri ispisu koordinata x i y njih delio sa
osam. To je zato što mišiji kursor vraća koordinate za grafički ekran, a
nas zanima tekstualni.
Na raspolaganju vam je i konstanta CLICKWAIT kojom se definiše
koliko mišonja posle prvog klika treba da čeka da bi video da li će da
bude dupli klik. Kod mene je postavljena na 200 milisekundi jer je jedna
sekretarica imala reflekse ko mrtav konj :), ali vi je možete bezbedno
smanjiti na recimo 150.
mouse.zipcccc.312dcolak,
│ Evo ti nekih rutina za rad sa COM portom. Objašnjenja su
│ prilično detaljna (a i prevedena su pošto je mojoj
│ drugarici trebalo za diplomski). Podržan je rad sa COM 1 -
│ COM 4. Ako bude bilo problema pitaj.
Hvala!
Sad ću moći da slušam glasno muziku a da mi ekran
prosvetli tako da znam kad zvoni telefon :))
Sledge DAMMIR!
cccc.313dcolak,
│ Evo ti nekih rutina za rad sa COM portom. Objašnjenja su
│ prilično detaljna (a i prevedena su pošto je mojoj
│ drugarici trebalo za diplomski). Podržan je rad sa COM 1 -
│ COM 4. Ako bude bilo problema pitaj.
Ipak ima problema, rađen je za Turbo C a ja koristim
MSC6.0... So, prebacih što mogadoh, no DTRBio ili
tako nekako nema MSC so, piši propalo :((
void interrupt (*old_vect)();
Ovde Compiler prijavljuje: Syntax Error: '(' ???
prepravih u
void (_interrupt *old_vect)(void) i CL je prošo..
Ex.... Znači još uvek ništa....
P.S.
Možda nabavim TC samo zbog ovoga :(((
Sledge DAMMIR!
cccc.314pedjak,
> Tj. šta se dešava kada modem dobije RING?
> Tj. hteo bih da napravim nešto kao TSR
> winfax, tj. da mi ekran "zasvetli" ;)
> kad pozvoni telefon.
Imam jedan program koji radi to što ti treba + .ASM sors. Ako ti
treba, reci.
cccc.315djelovic,
> Ipak ima problema, rađen je za Turbo C a ja koristim
> MSC6.0... So, prebacih što mogadoh, no DTRBio ili
> tako nekako nema MSC so, piši propalo :((
Imaš u staroj PC.SOFT ili PC.PROG biblioteku lcomm (mislim) Vlade Kostića,
a onda imaš negde kasnije tu istu biblioteku koju je neko modifikovao da radi i
sa COMM 3 i COMM 4, plus je "dobila" i veći bafer. Potraži.
cccc.316mdimitrijevic,
Zdravo!
Da li ima neko neki source u C-u koji moze da cita DBF datoteke iz
DBASE IV i FOX-a. Ili ako bar ima njihovu strukturu.
Pozdrav,
Marjan Dimitrijevic
cccc.317bulaja,
│Da li ima neko neki source u C-u koji moze da cita DBF datoteke
│iz DBASE IV i FOX-a. Ili ako bar ima njihovu strukturu.
└───
Evo ti struktura (preuzeto iz R.Spence "Clipper Programming Guide"):
typedef struct
{
char dbf_id;
char last_update[3];
long last_rec;
unsigned data_offset;
unsigned rec_size;
char filler[20];
} DBF_HEAD;
typedef struct
{
char field_name[11];
char field_type;
char dummy[4];
union
{
unsigned char_len;
struct
{
char len;
char dec;
} num_size;
} len_info;
char filler[14];
} FIELD_REC;
cccc.318skerl,
Mouse++ Version 4.0
Copyright (c)1992 by Carl Moreland
10/06/92
-----------------------------------------------------------------------
Using the Mouse Class
To incorporate the mouse routines in your program, simply add
mouse.lib to your project or make file and #include mouse.h in any mo-
dule that calls a mouse function. mouse.lib contains all the functions
in mouse.cpp and cgc.cpp, but the functions are separated into differ-
ent object modules for greater efficiency. Note that mouse.lib is com-
piled for the large memory model.
Pozdrav,
Skerl.
moupp400.zipcccc.319skerl,
(*********************************************************************
* MouseLib *
* mouseLib for TC2.0, TC++ and BC++ *
**********************************************************************)
Pozdrav,
Skerl.
mouclib5.zipcccc.320mjova,
> Da li ima neko neki source u C-u koji moze da cita DBF
> datoteke iz DBASE IV i FOX-a. Ili ako bar ima njihovu
> strukturu.
imam ja. sve radi super. probao i ostavio ;)
db.arjcccc.321dcolak,
│ Imam jedan program koji radi to što ti treba + .ASM sors.
│ Ako ti treba, reci.
Naravno!! Šteta što nije C, no nema veze, samo
nek radi!
So, ne budite zamoljeni...
Sledge DAMMIR!
cccc.322mdimitrijevic,
Hvala za opis DBF i za source.
Pozdrav,
Marjan Dimitrijevic
cccc.323pyramid,
Hvala na objasnjenju...
Nebojsa
P.S. Je l' znas ko poziva handleEvent?
cccc.324pyramid,
Hvala... Nadam se da ce mi ovo pomoci...
Nebojsa
cccc.325dcolak,
│ Imaš u staroj PC.SOFT ili PC.PROG biblioteku lcomm
│ (mislim) Vlade Kostića, a onda imaš negde kasnije tu istu
│ biblioteku koju je neko modifikovao da radi i sa COMM 3 i
│ COMM 4, plus je "dobila" i veći bafer. Potraži.
Bacam se na mukotrpni posao traženja, hvala :)
Sledge DAMMIR!
cccc.326bdm.,
Hi,
za sve programere u C-u i još zainteresovane za konferenciju sa
UseNeta-a comp.lang.c++, malo obaveštenje, počeo je njen automatski
prenos na Hobbiton (u konferenciju UseNet), poruke stižu nešto ranije
nego na UBBG, plus što se mogu propustiti kroz off-line reader (HOR).
BDM.
cccc.327dusanp,
Pre nekog vremena mi je bio potreban program koji
odredjuje tip procesora (286,386,...). Posto sam dobio
program u asembleru prepravio sam ga u pa sad lici na
c proceduru. Da ne zaboravim - posto se koristi inline
asembler za njegovo koriscenje mora da se koristi c
kompajler koji ima ovu mogucnost.
Evo njega ;) (exe i sors), mozda jos nekom zatreba.
cputest.arjcccc.328djelovic,
Kojom #ifdef direktivom mogu da proverim da li je kompajler kojim prevodim
MSC? Primera radi, TC ima definisano __TURBOC__
cccc.329ilotina,
HI!
Pošto su neki ljudi tražili F(x) za rad sa Sound Blaster-om , evo
ih:). Fajl je skinut još u doba kad nam je Trickle bio dostupan, pa
ako neko ima noviju verziju nek je upl.
Ivan
blast13.arjcccc.330pedjak,
> Naravno!! Šteta što nije C, no nema veze, samo
> nek radi!
Eve ga... pa ga budži po svojoj volji :)
phonring.zipcccc.331bstevan,
Zdravo !
Ja, testirao BOOST i MHZ+ rade i jedan i drugi kod mene.
BOOST mi ubrzava AT 286 12 Mhz za 10%, a MHZ+ nijednom nije
prijavio poruku kao kod tebe, ali je ipak bolji od BOOST-a,
jer mi je ubrzao AT za 14%, ovih 4% je ipak prednost u odnosu
na BOOST.
---POZDRAV---
---BSTEVAN---
cccc.332akojovic,
>PS. Je l' znaš ko poziva handleEvent?
Glavna petlja funkcije run, člana klase TApplication, poziva
funkciju TGroup::execute koja u osnovi izgleda ovako:
TEvent event;
event.what=evNothing;
do
š
if (event.what !=evNothing) eventError(event);
getEvent(event);
handleEvent(event);
ć
while (endstate==continue); // dok se ne postavi 'quit' fleg
Pozdrav, Koja
cccc.333dcolak,
│ Eve ga... pa ga budži po svojoj volji :)
Evo, zahvaljujem se unapred. No kad pogledam,
dobićete što ste zaslužili ;))
Sledge DAMMIR!
cccc.334dekiper,
Pišem neki programčić za crtanje i između ostalog trebalo bi zna
koliko
video memorije ima kartica na dotičnom kompjuteru. Da li je to nekako
moguće
iz Borland C++ 3.1. Puno hvala,
dekiper
cccc.335dekiper,
// __TURBOC__
Mislim da sam negde u literaturi video da postoji konstanta
_MSC_(broj verzije)
ovde broj verzije je zapisan u obliku:
verzija 5.1 broj verzije=510
verzija 6.0 broj verzije=600
verzija 7.0 broj verzije=700
itd...
tako da ćeš sa #ifdef _MSC_600 dobiti istinito ako se radi o MSC-u
6.0.
cccc.336mjova,
> Pišem neki programčić za crtanje i između ostalog trebalo
> bi zna koliko video memorije ima kartica na dotičnom
> kompjuteru. Da li je to nekako moguće iz Borland C++ 3.1.
nisam ništa radio u grafici, ali mi se čini da ću uskoro početi ;).
pogledaj u diru negde na sezamu ima svga bgi veznik, možda u njemu
piše nešto o tome.
generalno, što se tiče toga koliko kartica imam memorije, mora da
postoji neki int koji daje taj podatak - prolutaj po helpovima. (int
10h/1bh)
cccc.337skerl,
SOUNDBLASTER FREEDOM PROJECT
The aim of the Soundblaster Freedom Project is to provide a cheap
source of programming information for the Soundblaster and other
sound cards. Previously, programming a sound card has required a
not inconsiderable investment in a developer's kit for each sound
card. These developer's kits have been known to be terse and not
well written. Our aim is to provide enough information to the
general programmer to allow them to add sound card support to their
software at minimal cost.
environ.c 1228 4-05-92 17:23
sbp.asm 655 3-08-92 0:04
readme.txt 2131 2-12-92 11:45
driver.c 3045 4-05-92 17:23
dacdir.c 1267 4-05-92 17:23
sb.h 4342 4-05-92 19:43
getvol.c 1282 4-05-92 17:23
mixed1.sam 27508 4-05-92 23:31
hitit.sam 4100 1-31-92 1:43
getvol.exe 10910 4-05-92 17:26
sbdac.c 2179 4-09-92 3:00
sbfm.c 3574 4-05-92 17:23
sbfm.exe 18751 2-15-92 0:53
dacdma.exe 29882 4-09-92 3:00
organ.sam 23612 1-31-92 1:45
play_cmf.exe 34174 4-09-92 3:00
brasshit.sam 14318 1-28-92 18:00
lowbrass.sam 12380 1-28-92 18:00
brass2.sam 13754 2-01-92 0:00
sbmidi.c 298 4-05-92 17:23
sbf.lib 12288 4-09-92 3:00
fmtest.c 919 4-05-92 17:23
fmtest.exe 19002 4-09-92 3:00
sbp_chk.asm 1047 3-08-92 0:02
getopt.c 4215 4-09-92 2:53
play_cmf.c 8056 4-05-92 17:23
driver.exe 18387 4-05-92 19:45
vochdr.h 478 4-05-92 17:23
sbf.txt 543 4-13-93 14:30
dma_code.asm 14943 4-05-92 19:27
dacdir.exe 24206 4-09-92 3:00
mixed.sam 8200 4-05-92 20:13
mult.sam 18339 4-05-92 23:42
m1.sam 32093 4-05-92 23:43
dacdma.c 2518 4-09-92 2:56
makefile 1110 11-10-92 15:14
Pozdrav,
Skerl.
sbf2.zipcccc.338pyramid,
Imam problema sa patchovanjem int-a 21. Evo primercica:
#include <dos.h>
void far interrupt (*old)();
void interrupt Int21() {
asm {
pop bp
pop di
pop si
pop ds
pop es
pop dx
pop cx
pop bx
pop ax
}
old();
asm {
push ax
push bx
push cx
push dx
push es
push ds
push si
push di
push bp
}
}
void main() {
old=getvect(0x21);
setvect( 0x21, Int21 );
puts( "Ovo je sa promenjenim dvajeskecom" );
setvect( 0x21, old );
}
Program bi trebalo da patchuje int 21 i jednostavno skoci na stari vektor.
Oni push-ovi i pop-ovi su tu zato sto kompajler (BC++3.1 huge model) pri
definisanju rutine sa interrupt sve registre push-uje na stek, a pri izlasku
ih vrati... Sta je problem?
Nebojsa
cccc.339zorans,
Upomoc !
Trazim C ili C++ biblioteku za serial comm ( int driven ). Na primer
GreenLeaf++ ili nesto slicnoH
Paradox Engine i odgovarajuci Paradox.
TurboVision ili ObjectVision ili nesto slicno za menu+dataentry sistem.
Sve ovo moram da strpam u jednu near real-time app, te je pozeljno da se ove
komponente "vole".
Naravno, pozeljno je da se ovo sve vidi u grafickom modu na ekranu.
Imam, ( pokusavao sam ) sa C-scape-om + C-Isamom, ali ovo trazi suvise
rintanja ( programiranja).
Zahvalan svima koji pomognu.
pozdrav ZORANS.
cccc.340mjova,
> old();
(*old)();
cccc.341ppekovic,
>> Trazim C ili C++ biblioteku za serial comm ( int driven ). Na primer
>> GreenLeaf++ ili nesto slicnoH
Na FFS-u (a biće na sezamu čim bulaja nađe vremena) ima jedna
lepa C/C++ biblioteka za rad sa com portovima. Pogledaj u
/msdos/prog/c dir-u.
>> Paradox Engine i odgovarajuci Paradox.
>> TurboVision ili ObjectVision ili nesto slicno za menu+dataentry sistem.
U Beogradu postoji nekoliko firmi koje prodaju software,
nazovi ih i pitaj.
Paya
cccc.342dzakic,
>> Oni push-ovi i pop-ovi su tu zato sto kompajler (BC++3.1 huge model) pri
>> definisanju rutine sa interrupt sve registre push-uje na stek, a pri
>> izlasku ih vrati... Sta je problem?
Mjova ti reče da je problem u pozivu stare rutine, a mislim da
ti nije potrebno sklanjanje vrednosti sa steka i ponovno vraćanje
po povratku. Ako ih je C već sačuvao, ostavi ih tako... sigurno
nije bez razloga.
cccc.344pyramid,
>> ti nije potrebno sklanjanje vrednosti sa steka i ponovno vracanje
Potrebno je zbog toga sto kompajler odmah po inicijalizaciji unisti BP, DS i
eventualno AX koji su mi neophodni pri pozivu neke dos funkcije... Kada bih
ostavio na kraju da vrati sacuvane vrednosti sa pocetka nikada ne bi mogla ni
jedna funkcija da mi vrati rezultat...
Nebojsa
cccc.345pyramid,
>> > out();
>> (*out)();
Probah... Nije...
Nebojsa
cccc.346mjova,
> Program bi trebalo da patchuje int 21 i jednostavno skoci
> na stari vektor. Oni push-ovi i pop-ovi su tu zato sto
> kompajler (BC++3.1 huge model) pri definisanju rutine sa
> interrupt sve registre push-uje na stek, a pri izlasku ih
> vrati... Sta je problem?
pre svega da ti preporučim da izbegavaš huge model, osim ako ti
je *baš* potreban (spor i dug kod).
pored onoga što ti već rekoh, pogledah kakav se asm dobijq za
old() i za (*old)()... ono što sam primetio je da NEMA RAZLIKE u
kodu ;). bio sam ubeđen da je potrebno startovati program od
adrese koja je ubeležena u promenljivu old (koja je tipa
interrupt fn). elem, malore (posle zakove poruke) sam tek
pročitao celu tvoj poruku (i ceo kod ;).
prekid (int) se, generalno, može desiti BILO GDE i s tog
stanovišta treba čuvati sve registre. međutim, prekidi poput 8,
(9... i drugi koji se izazivaju posebnim H/W zahtevima - IRQ)
MORAJU žUVATI REGISTRE, u suprotnom to, jednostavno, neće raditi
ni trena. drugo, što se tiče ostalih interapta (kao npr 0x10,
0x21...), oni su zapravo funkcije ili čisti vektori (samo nešto
pokazuju).
ovde i leži problem koji tebe zbunjuje. ti treba od te funkcije
da dobiješ neki rezultat, a on zapravo neće biti vraćen jer sama
direktiva ˙interrupt˙ čuva/vraća sve registre. moram priznati da
ovo nisam radio iz C-a jer smatram da nema osnova - zašto bih
filtrirao dosove funkcije (a i ostale) kad samo moj program može
da poziva te fn? ovo bih radio za neki TSR, ali TSR bih pisao u
ASM.
e, sad, pošto tvoja fn mora da se vraća sa IRET onda fn treba
deklarisati kao interrupt, ali to zeza registre... šta sad? ;) e,
tu dolazi asm koji ima više stepeni slobode. mali primer tek da
počneš:
//---------------------------------------------
// mojint21.asm
//---------------------------------------------
.model large
PUBLIC C _int21 ; da C primeti ovu fn
EXTRN C mojint21:FAR ; deklaracija C fn-a
.code
_int21 PROC far
call FAR PTR mojint21 ; poziv C funkcije
iret
ENDP _int21
end
//---------------------------------------------
// mojint21.c
//---------------------------------------------
typedef void interrupt (*new_fn)(); // ovo zbog C++
extern void far _int21(void);
void interrupt (*old21)();
//-----------------------------------------------------------
// ovde obrati pažnju na DS registar (a i ostale ;)
void far mojint21(void) {
// ovde brljaj po int 0x21
(*old21)(); // šta da radim, navika... ;)
}
//-----------------------------------------------------------
int main (void) {
old21= getvect(0x21);
setvect(0x21, (new_fn)_int21);
//
// tvoj program.
//
setvect(0x21, old21);
return(0);
}
eto, to bi bilo to, valjda će raditi odmah - nisam probao, ali
ono što sigurno radi šaljem ti uzporuku. to je obrada dosove
kritične greške i može se lepo primeniti u programima. radi se o
suvom rešenju za zamenu dosove poruke abort/retry/...
pozdrav, SY.
critical.arjcccc.347zorans,
Hvala Paya. No,
Nemam pojma sta je to FFS.
Drugo,ono za kupovinu sw-a, znam samo za CET, ali mi se ne daju tri plate za
jedan lib.
Please, posavetuj dalje
pozdrav zorans.
cccc.348nkbog,
>> old();
>(*old)();
To je isto to. I jedno i drugo bi podržavaju i MSC i BC
(čini mi se i da su obe forme deo ANSI sintakse C-a).
NB.
cccc.349dzakic,
>> ostavio na kraju da vrati sacuvane vrednosti sa pocetka nikada ne bi
>> mogla ni jedna funkcija da mi vrati rezultat...
Da... izgubio sam iz vida da se radi o int 21h (još mi u glavi
osmica, od ztime-a :). Poznat mi je problem, isto se dešava i kad
pokušaš da preuzmeš int 16h, recimo.
Znaš šta je mene tad mučilo: što interapt treba da postavi neke
flegove (Z, C i sl.) a oni se skupe sa steka tek po izlasku iz TVOJE
int rutine naredbom IRET! iako ih je originalni interapt uredno
postavio. Onda sam morao da pucam na stek, sa "ss:[sp+6]" ili neku
sličnu adresu, da ga napunim vrednostima flag registra. Tu adresu
moraš da izračunarš - koliko imaš registara gurnutih na stek, pa 4
bajta za return adresu pa su 2 sa flegovima. Mislim da je isti
problem i sa dosovim interaptom. Mnoge funkcije vraćaju grešku u C
flagu pa se mašina zbog toga blokira. (?)
cccc.350dejanr,
>> No, Nemam pojma sta je to FFS.
FFS = Fon File Server. Domaći Trickle. Pogledaj SRBBS.TXT u direktorijumu
NOVOSTI.
cccc.351ppekovic,
>> Drugo,ono za kupovinu sw-a, znam samo za CET, ali mi se ne daju tri plate za
>> jedan lib.
Ako ne želiš da kupuješ, ostaju ti PD i SW biblioteke, ali ne
brini i njih ima podosta. Reci tačno šta te zanima pa da te uputim
na neke fajlove, ili da ih potražim.
Paya
cccc.352mjova,
> Potrebno je zbog toga sto kompajler odmah po
> inicijalizaciji unisti BP, DS i
ovo možeš srediti preko _loadds.
inače, ne uniši ih već se njihove vrednosti izgube tokom rada,
naročito ako je u pitanju huge model koji ima za svaki modul po jedan
DS.
cccc.353zorans,
Hvala!
cccc.354pyramid,
ů>> ovo nisam radio iz C-a jer smatram da nema osnova - zasto bih
>> filtrirao dosove funkcije (a i ostale) kad samo moj program moze
>> da poziva te fn? ovo bih radio za neki TSR, ali TSR bih pisao u
Zato sto je potrebno da dosove funkcije moze da poziva VISE tvojih
programa, a kako dos nije bas pisan u skladu sa par osn. pravila
multitaskinga mora se zabraniti promena taska dok se dos fn-ija ne
izvrsi do kraja...
>> e, sad, posto tvoja fn mora da se vraca sa IRET onda fn treba
>> deklarisati kao interrupt, ali to zeza registre... sta sad? ;) e,
>> tu dolazi asm koji ima vise stepeni slobode. mali primer tek da
Cini mi se da je bolja ona moja rutinica u C-u sto cuva registre, a
uostalom isto rade. Problem je u Flag registru (ko sto rece dzakic)....
Nebojsa
cccc.355pyramid,
>> Znas sta je mene tad mucilo: sto interapt treba da postavi neke
>> flegove (Z, C i sl.) a oni se skupe sa steka tek po izlasku iz TVOJE
>> int rutine naredbom IRET! iako ih je originalni interapt uredno
>> bajta za return adresu pa su 2 sa flegovima. Mislim da je isti
>> problem i sa dosovim interaptom. Mnoge funkcije vracaju gresku u C
>> flagu pa se masina zbog toga blokira. (?)
Izgleda da je to...
Evo prilazem i ispravljenu verziju (dodato je:
pushf
pop ax
mov bp,sp
mov [bp+22],ax ), ali ni ovako promenjen ne radi... :(
Nebojsa
tst.ccccc.356duduk.,
Da li neko ima uputstvo za dflat9 ?
cccc.357skerl,
Personal Communications Library
For the C Language
(PCL4C)
Version 3.4
Jan 4, 1992
1.0 Introduction
The Personal Communications Library for the C Language (PCL4C) is
an asynchronous communications library designed for experienced
software developers programming in C. Four compilers are
supported: Microsoft Optimizing C, Microsoft Quick C, Borland
Turbo C, and MIX Power C. An IBM PC/XT/AT or compatible is
required. The PCL features:
o SMALL, COMPACT, MEDIUM & LARGE memory models.
o 32 communications and support functions.
o Support for the high performance INS16550 UART.
o Supports hardware (RTS/CTS) flow control.
o Interrupt driven receiver.
o Supports 300 baud to 115,200 baud.
o Supports COM1, COM2, COM3, and COM4.
o Adjustable receive queues from 8 bytes to 32 KB.
o Control-BREAK error exit.
o 17 communications error conditions trapped.
o Allows 4 ports to run concurrently.
o Complete modem control & status.
o Written in assembly language for small size & high speed.
o Terminal program featuring XMODEM, YMODEM, & YMODEM-G.
Pozdrav,
Skerl.
p.s. Bulaja, mogao bi i ovu i onu biblioteku iz pascal teme da prebacis
u odgovarajuce direktorijume.
pcl4c34.zipcccc.358pmijat,
Narode, imam jednu molbu za vlasnike MS C-a :
Treba mi jedna funkcija (samo OBJ) koja ocitava broj slobodnih
bajta na disku po zelji (0=A,1=B...). Naime, radi se o sledecem :
radim u MS COBOL-u (4.5), a doticni nema (ili ja ne znam za nju)
funkciju koja mi vraca slobodan prostor na disku. Kod kuce imam
i Turbo C++, sa kojim nazalost gorenavedeni Microsoftov proizvod
nije kompatibilan (mrze Borland, pa to ti je) po pitanju .OBJ-a.
Napominjem da za sada tek pomalo ceprkam po C-u, pa se unapred
izvinjavam ako odvalim neku glupost.
Doticna f-ja bi trebalo da izgleda ovako :
#include <dos.h>
long int GET_DSK_SIZE(unsigned char drive)
š
struct dfree dinfo;
long int freesp;
getdfree(drive,&dinfo);
freesp = dinfo.df_avail * dinfo.df_sclus * dinfo.df_bsec;
if (dinfo.df_sclus == -1) freesp = 0; /* u slucaju greske freesp = 0 */
return(freesp);
ć
Ovako mislim da bi to izgledalo u Borland Turbo C-u, a ako MS C ima
neku drugu f-ju od getdfree...
Ukoliko to ima nekog uticaja pri prevodjenju samo u OBJect, trebalo
bi je prevesti u HUGE model (sam COBOL po definiciji radi u HUGE
modelu, pa nekako mislim da to ima veze i sa tim u kom modelu se
prevode funkcije za linkovanje sa istim. Da li sam u pravu ?).
Molim neku dobru dusu koja gaji neki od Microsoft C-ova ( MS C 4.0,
5.0, ili 6.0 - ne MS C 7.0, jer ne znam slaze li se ovaj COBOL sa
njim) da mi gorenavedenu f-ju iskompajlira u OBJ i da mi je mail-ne
(ma wr pmijat).
Unapred hvala
Pozdrav
Predrag(pmijat)
cccc.359dnikolic,
>> Da li neko ima uputstvo za dflat9 ?
Uh, mnogo je komplikovano, i ja se ovih dana bakcem sa njim. Jedva kompajlirah
primer dat uz DFLAT. Ukoliko se jos neko zanima sa istim da osnujemo grupu,
stvar je, verujem, dosadna za one koji se njom ne bave. :) Jedino je sigurno da
je mocno!
dn
cccc.360djelovic,
> Da li neko ima uputstvo za dflat9 ?
A da ti predložim bolju alternativu :) ? Koristiš li C++ ili si samo C-man?
cccc.361nkbog,
>> Da li neko ima uputstvo za dflat9 ?
Pročitaj neki tekst o programiranju pod Windowsima. DFlat je samo text-mode
implementacija SAA standarda (Windows i PM iz OS/2). Jako slično i nešto malo
lakše za programiranje (i puno lošije od uzora).
NB.
cccc.362robert,
>> primer dat uz DFLAT. Ukoliko se jos neko zanima sa istim da
>> osnujemo grupu, stvar je, verujem, dosadna za one koji se njom ne
>> bave. :) Jedino je sigurno da je mocno!
Eh, ja sam digo ruke od tog Dflat-a čim sam video dokumentaciju i
rečenicu da treba pogledati DDJ iz godina: 18xx-199X ;(. Da bi iole
uspešno koristio Dflat, trebaju ti svi ti brojevi DDJ jer je autor to
objavljivao kao Dinastiju ;(. Moćno možda jeste, ali je užasno
komplikovano. BTW, ako te interesuje rad sa prozorima i ekranom u C-u,
dođi u klub večeras, donosim jednu disketlu za jednog ortaka pa ako te
zanima... :)).
cccc.363robert,
>> A da ti predložim bolju alternativu :) ? Koristiš li C++ ili si
>> samo C-man?
Ehej, Deki, polako, prvo da istrebimo gamad i da napišemo uputstvo pa
onda.... ;))))). (Just kidding ;)
cccc.364mjova,
gde grešim? opet imam problema oko findfirst/findnext. ili meni nije
jasan princip rada ili to nije ispravno. malo sam preuredio osnovni
primer za ove dve fn i to ne radi kako treba!
/* findfirst and findnext example */
#include <stdio.h>
#include <string.h>
#include <dir.h>
#include <dos.h>
int main(int argc, char *argv[]) {
struct ffblk ffblk;
int done;
char *find= "*.*";
if(argc > 1 && strlen(argv[1]) < 66)
find= argv[1];
printf("Directory listing of %s\n", find);
done = findfirst(find, &ffblk, FA_DIREC);
while (!done) {
printf("%s %s\n",
(ffblk.ff_attrib & FA_DIREC ? "Dir:" : " "),
ffblk.ff_name);
done= findnext(&ffblk);
}
return 0;
}
dakle, ovo bi trebalo da traži samo imena direktorijuma (zadato FA_DIREC),
što kod mene nije slučaj - pretraži sve što postoji u tom direktorijumu.
ove dve funkcije pozivaju dosovu 0x4E, tako da i svako iskustvo oko
rada iste je dobro došlo.
inače, ovaj problem sam imao još tokom pisanja scd-a, međutim tamo mi je
bio potreban i spisak fajlova tako da se sve drugačije manifestovalo.
cccc.365dejanr,
>> dakle, ovo bi trebalo da traži samo imena direktorijuma (zadato FA_DIREC),
>> što kod mene nije slučaj - pretraži sve što postoji u tom direktorijumu.
Koliko se sećam, FA_itd je *maska* kojom se neke stvari *uključuju*. Mogu
da se uključe direktorijumi i skriveni fajlovi itd, ali obični fajlovi
ne mogu da se isključe. Moraš da prođeš i kroz njih pa da "odbacuješ" šta
ti ne treba.
cccc.366stomic,
--------------------------------------------------------------------------
The case against C
P.J. Moylan
Department of Electrical and
Computer Engineering
The University of Newcastle
N.S.W. 2308,
Australia
...
The goal of this paper is to argue that it is time to retire C in favour
of a more modern language.
....
In what follows, I shall be using Modula-2 as an example of a
modern programming language. This is simply because it is a
language about which I can talk intelligently. I am not suggesting
that Modula-2 is perfect; but it at least serves to illustrate that
there are languages which do not have the failings of C.
...
Do these reasons look familiar? Yes, they are almost identical to
the arguments which were being trotted out a few years ago in
favour of BASIC. Could it be that the current crop of C programmers
are the same people who were playing with toy computers as
adolescents? We said at the time that using BASIC as a first
language would create bad habits which would be very difficult to
eradicate. Now we're seeing the evidence of that.
...
Now, where does C fit into this picture? The answer is that C is
built around lessons which were learnt from Algol 60 and its early
successors, and that it does not incorporate much that has been
learnt since then. We have learnt some new things about language
design in the last 20 years, and we do know that some of the things
that seemed like a good idea at the time are in fact not such good
ideas. Is it not time to move on to D, or even E?
...
--------------------------------------------------------------------------
Ništa lično ;). Ako ste i izrazito za C, obavezno pročitajte tekst.
žovek je totalni genije :). Ceo tekst ide uz poruku.
Source: tesla.newcastle.edu.au
Hobbiton, i:\info\c-case.zip
Pozdrav, stomic@hobbiton.
c-case.zipcccc.367madamov,
******
The answer is that C is built around lessons which were learnt from Algol 60
******
A paskal kao nije baziran na principima iz Algola? B) Nemam ništa protiv
Module 2, čak sam prvo u njoj i radio pre prelaska na C, ali ovo mu i nije neki
argument. B)
cccc.368skerl,
ASYNCHRONOUS FUNCTIONS FOR MICROSOFT, TURBO, OR ZORTECH C
The LIB(s) on the included disk are libraries of serial
communications functions designed specifically for use with
Microsoft C, Turbo C / C++, and Zortech C / C++. The regis-
tered version has LIBs for all memory models. The shareware
version is small model only.
--- Features of the library functions ---
o Support for 16550 UART's FIFO mode of operation
o Fully interrupt driven
o Baud rates up to 115,200 baud
o User defined transmit and receive ring buffer sizes.
o Ring buffers may be in placed in FAR memory even in small
and medium model programs.
o User defined port addresses, IRQ use, and interrupt vector
numbers.
o Support for simultaneous operation of 2 ports.
o Built in support for XON/XOFF and hardware flow control
o Block transmit and receive functions
o Receive buffer look ahead function
o 100% assembler code for maximum speed
o Totally compatible with Microsoft C, Turbo C, Zortech C,
and other C compilers that use standard Microsoft high
level language calling conventions.
---------------------------------------------------------------
Mike Dumdei, 6 Holly Lane, Texarkana TX 75503
MCOMM5 (c) 1989, 1990, 1991 All Rights Reserv
---------------------------------------------------------------
Pozdrav,
Skerl.
mcomm552.zipcccc.369ematic,
> A paskal kao nije baziran na principima iz Algola? B) Nemam
> ništa protiv Module 2, čak sam prvo u njoj i radio pre prelaska
> na C, ali ovo mu i nije neki argument. B)
C nije jezik, C je religija :)))))))). Mada, čovek je napisao i
ponešto što vredi, npr kaže da je C macho jezik :))))))).
cccc.370stomic,
$ A paskal kao nije baziran na principima iz Algola? B) Nemam
Pascal niko ne bi više koristio da nije bilo Borlanda ;). Šta više,
TP je najmanje Pascal ;).
$ ništa protiv Module 2, čak sam prvo u njoj i radio pre prelaska
$ na C, ali ovo mu i nije neki argument. B)
Interesujeme šta ti se svidelo na C-u što te je nateralno da
ostaviš Modulu-2.
Ja nisam pisao onaj tekst i nemam nameru da ga branim :), ipak
čovek programira od 70tih i verovatno zna malo više od tebe i mene ;).
Nemam nameru da započnem još jednu diskusiju, npr. Modula-2 protiv
ostalih, ili tako nešto (mada i nije loše u ovim dosadnim danima :),
čisto me interesuje tvoje mišljenje.
Pozdrav, stomic@hobbiton.
cccc.371stomic,
$ C nije jezik, C je religija :)))))))). Mada, čovek je napisao i
He, he.. Ovo si 100% upravu. C JESTE religija koju su nam nametnuli
ameri (kao i milion drugih stvari, kao njihovo 'mezimče'). Pogledajte
realno, svi normalni i dobri jezici su nastali u Evropi :).
$ ponešto što vredi, npr kaže da je C macho jezik :))))))).
Drago mi je da si pročitao :).
Pozdrav, stomic@hobbiton.
cccc.372.obj,
> The goal of this paper is to argue that it is time to retire C in favour
> of a more modern language.
Smatram da je "ubeđivanje" programera da je neki jezik bolji od drugog
čisto gubljenje vremena. Ali to opet ne smeta da se malo "posvađamo" :)
IMHO, Modula-2 nema ama baš ništa bolje "projektovano" nego ANSI C. Ako
neko hoće da piše macho-kod on to može da uradi i u Moduli, ali ima da
se odere. Međutim, ako neko ima živaca (i mozga) da disciplinovano piše
neki program, ja bih mu UVEK pre preporučio C nego Modulu. A još kada
ustanovim da je sa C-a lako preći na C++, tu za mene uopšte nema dileme :)
cccc.373mnikolic,
Jedno pitanje za poznavaoce TC 2.0.
Da li je preddefinisani stream 'stdprn' vezan jedino za LPT1 ili se preko
njega može pristupiti i ostalim LPT izlazima? Ako može, da li se izbor
možda vrši preko funkcije 'biosprint', komanda '1 - Initializes the printer
port'? Imam samo jedan paralelni port pa ne mogu da eksperimentišem :(.
Možda na Sezamu u nekoj od SW/PD biblioteka ima primera za rad sa
paralelnim portovima?
m.
cccc.374madamov,
******
C nije jezik, C je religija
******
Malo ga pretera. B)
cccc.375madamov,
******
Pascal niko ne bi više koristio da nije bilo Borlanda ;).
******
Znam. B) žesto sam svojim kolegama AtariSTima na pitanje zašto mnogo
vlasnika PC-a koristi TP odgovarao da je TP na PC-u nešto kao GFA Basic na
Atariju: možeš vrlo brzo i vrlo lako da uradiš neke stvari.
******
Interesujeme šta ti se svidelo na C-u što te je nateralno da ostaviš Modulu-2.
******
Razlozi su čisto praktične prirode. Ma koliko bio dobar TDI Modula-2
kompajler na Atariju, Turbo C je bio bolji i više mi je odgovarao. Napominjem
da sam paralelno radio u oba jezika, tako da mi izbor jezika nije bio mnogo
važan, mnogo mi je važnije bilo koji je paket bolji. Iako imam nekih zamerki
Moduli-2 (a ono što joj zameram Wirth vuče još iz paskala, one čuvene
petljancije oko pointera) u njoj sam uradio nekoliko onih programa koje bi
mogli nazvati sistemskim, na primer program za menjanje aktivne tastaturne
tabele i slično, tako da, što se funkcionalnosti jezika tiče, nisam pravio
razliku između njih. Tu i leži moj glavni razlog za napuštanje Module 2, otkrio
sam par bagova u nekim pozivima funkcija operativnog sistema, pa da bi to
ispravio morao sam da vežbam i pisanje inline asemblerskih poziva na Modulin
način: CODE(FFFFH);. Kad mi se smučilo prešao sam na C.
******
Nemam nameru da započnem još jednu diskusiju, npr. Modula-2 protiv ostalih
******
Nemam ni ja tu nameru, pogotovo što cenim ama baš svaki jezik. žesto sam
svojim drugarima koji spremaju ispit iz nekog programerskog predmeta
objašnjavao da prvo treba da shvate suštinu problema i da ga algoritamski reše,
a kasnije se lako izabere jezik koji takav problem može najefikasnije da reši.
Uglavnom su to bili ljudi koji su ispit iz programiranja shvatili kao i svaki
drugi, pa uzmu zbirku nekih zadataka i vežbaju zadatke. Nemaš pojma koliko sam
muke imao da takvima objasnim da to nije isto. Na njih sam i mislio kad kažem
da zameram Moduli (i paskalu) na petljancijama sa pointerima. Iz iskustva sa
takvima koji na taj način uče programiranje znam da im je C-ovski princip da je
pointer jednostavno nekakva adresa mnogo bliži, pa im prvo na taj način
objasnim šta su to pointeri, a onda lagano objašnjavam šta je pisac (Wirth)
hteo da kaže kod paskala i Module.
cccc.377djelovic,
> Da li je preddefinisani stream 'stdprn' vezan jedino za LPT1
> ili se preko njega može pristupiti i ostalim LPT izlazima?
Stream stdprn je vezan isključivo za LPT1. Pri tom te, naravno,
ništa ne sprečava da kažeš nešto kao:
stdprn = fopen ("LPT2", "w");
i da ga time presumeriš na LPT2.
No, van toga, moj savet ti je da se ostaviš štampanja kroz stdprn jer je to
štapanje kroz DOS, koji će ti, u slučaju greške (recimo ako je štampač
isključen) javiti čuvenu "Abor, Retry, ignore" grešku. Zato sva štampanja treba
da vršiš kroz biosprint funkciju, i to:
1. Pre svakog znaka proveriš da li štampač spreman (to je neka kobinacija
flegova koju vraća biosprint).
2. Tek onda štampaš znak.
3. Incijalizaciju štampača nemoj da koristiš jer ona ume da ubrlja DL-ovana
YU slova i slične stvari koje su u ramu štampača. Hoćeš jednu C++ klasu za rad
sa štampačem?
(Ko o čemu, ja o klasama :).)
cccc.378zorans,
Ziveo SKERL !!!!!
ps: Gde li samo dolazi do finih stvari koje nesebicno deli sa nama?
cccc.379janko,
> The case against C
> Ako ste i izrazito za C, obavezno pročitajte.
I ja ga preporučujem za čitanje. Iako ima bombast naslov,
članak je OK.
Prvo, autor koristi C. ;)) Prava stvar. Da bi o nečemu
raspravljao, moraš to nešto da poznaješ.
Drugo, autor je primetio tipične greške loših programera u C-u.
čeleći da pokaže slabost jezika, više je pokazao da neki koji
pišu na njemu nisu ukapirali ideje, pogotovu ANSI standarda. C
stvarno dozvoljava svašta, ali dobro školovan programer znaće
šta da koristi a šta ne... Tvrdim da otkako znam C++ bolje
pišem i programe na običnom C-u. (Inače, C++, po meni,
definitivno JESTE novi jezik. To što možete da koristite i
prljave C trikove u njemu, ne znači da je zato to "prošireni
C.")
Inače, autor posmatra problem iz ugla koji nije naglasio, ali
ja hoću, jer je to isti ugao iz kog i ja pišem u ovoj poruci:
Reč je o tome koliko je kompleksan program koji se piše...
SVAKI jezik je jednako dobar kada broj linija programa mali.
Kada je program veliki, više uopšte nije isto šta se koristi!
Klase i moduli su pravljeni da olakšaju konzistenciju VELIKIH
programa. Ko piše programe od stranu-dve, stvarno nikad neće
primetiti potrebu za takvim sredstvima (Digresija: Iako je na
C-u napisan juniks, i C je zamišljen kao jezik za MALE
programe, pa su njegove slabosti u velikim programima sasvim
logične. Zanimljivo, i Paskal je zamišljan kao je jezik za male
programe, ali se na C-u mogu simulirati moduli, a na Paskalu
ne).
Evo nekih citata, koji kao da su stvoreni, u stvari, za "Školu
C-a -- kako pisati veće programe na C-u)" a ne za 'članak protiv
C-a' (!)
> Now, modular programming is POSSIBLE (naglasio J.S. ;) in C,
> but only if the programmer sticks to some fairly rigid rules:
>
> - Exactly one header file per module. The header should
> contain the function prototypes and typedef declarations
> to be exported, and nothing else (except comments).
Ovo "nothing else" je ovde višak. Još neke stvari (npr. razni
enum) su potpuno prirodne da se tu nalaze. U C++-u je to
pristojno rešeno.
> - The comments in a header file should be all that an
> external caller needs to know about the module. There
> should never be any need for writers to know anything
> about the module except what is contained in the header
> file.
>
> - Every module must import its own header file, as a
> consistency check.
Naravno.
> - Each module should contain #include lines for anything
> being imported from another module, together with comments
> showing what is being imported. The comments should be
> kept up-to-date. There should be no reliance on hidden
> imports which occur as a consequence of the nested
> #include lines which typically occur when a header file
> needs to import a type definition or a constant from
> elsewhere.
Ovo je preoptimistično -- opšte je poznato da čim nešto nije
direktno u jeziku, nema šanse da se održi konzistentno
komentarima. Ne preporučujem.
> - Function prototypes should not be used except in header
> files. (This rule is needed because C has no mechanism for
> checking that a function is implemented in the same module
> as its prototype; so that the use of a prototype can mask
> a "missing function" error.)
>
> - Every global variable in a module, and every function
> other than the functions exported via the header file,
> should be declared static.
Ovo sam primetio da malo programera praktikuje, a trebalo bi...
> - The compiler warning "function call without prototype"
> should be enabled, and any warning should be treated as an
> error.
>
> - For each prototype given in a header file, the
> programmer should check that a non-private (i.e.
> non-static, in the usual C terminology) function with
> precisely the same name has its implementation in the same
> module. (Unfortunately, the nature of the C language makes
> an automatic check impossible.)
--
Slažem se sa autorom da je C zastareo. Ali, autor tvrdi da C++
"nije pravo rešenje." Međutim, autor nema dovoljno jake
argumente za to. žinjenica je da C++ otklanja puno slabosti
C-a, i vuče jezik prema jačoj proveri tipova, čistijoj
modularnosti itd. Po meni ono što bi trebalo zvati "modernim
jezikom" nije nikako Modula-2, već, naprotiv, C++. Jer,
preveliko insistiranje na formalizmu kakvo je svojstvano
Paskalu, Adi i Moduli definitivno nije od neke posebne koristi.
Odrađena sloboda u korišćenju pointera je praktično neophodna.
Implicitno pretvaranje jednog numeričkog tipa u drugi pri
pozivima funkcija i unutar aritmetičkih izraza je daleko
prirodnije od strogosti Paskala, Ade i Module. I, naravno,
Modulini moduli su, ipak, samo specijalni slučaj C++ klasa. A C++
klase su korak dalje u shvatanju programiranja -- ideja da podaci
moraju da imaju odgovorne procedure za njih, a da ne 'vise u
vazduhu' kao kod Paskala je pomak jednaka "strukturnom
programiranju" za koje su se izborili sredinom sedamdesetih.
(Istorijski gledano, već tada su već postojali jezici sa klasama,
(Simula) ali su, očigledno, u tom trenutku bili isuviše ispred
svog vremena!)
Priznajem da loš programer može da napiše svašta ružno u C++-u,
ali ne verujem da je moguće dizjnirati jezik tako da te zaštiti
od loših programera. Oni su tako inventivni. :) Zanimljivo je
da je Ada dizajnirana sa tim ciljem, ali da su i sami autori, u
kasnijim tekstovima, otkrivali "rupe u zakonima."
Ubeđen sam da će za neku godinu programiranje na jezicima sa
klasama biti jednako stvar dobrog programiranja koliko je već
danas ono što su pročetkom sedamdesetih zvali "structured
programming." Danas, više niko ne piše WHILE petlje kao komplet
od dva GOTO i dve labele, jednostavno zato što to više nije
potrebno. Isto će biti i sa klasama. Naravno, isto kao što
postojanje pametnijih jezika nije izbacilo iz upotrebe Bejzik,
to ne znači da će svi pisati tako. Recimo, DejanR tvrdi da on
neće. ;) čivi bili pa videli...
cccc.380ppekovic,
>> He, he.. Ovo si 100% upravu. C JESTE religija koju su nam nametnuli
>> ameri (kao i milion drugih stvari, kao njihovo 'mezimče'). Pogledajte
>> realno, svi normalni i dobri jezici su nastali u Evropi :).
Sa C-om ti je ista stvar kao i sa MS-DOS-om, (gotovo) svi ga
kritikuju, (gotovo) svi ga koriste.
Paya
cccc.381mjova,
> Ja nisam pisao onaj tekst i nemam nameru da ga branim :),
> ipak čovek programira od 70tih i verovatno zna malo više
> od tebe i mene ;).
jeste, da znaš! sad ću da pitam ćaleta zašto mu se sviđa PL/I! to mora
da je dobar jezik, jer on programira još od 60-ih. ;)
cccc.382dejanr,
>> Ziveo SKERL !!!!!
>> ps: Gde li samo dolazi do finih stvari koje nesebicno deli sa nama?
Programi su većinom sa trickle-a :)
cccc.383robert,
>> YU slova i slične stvari koje su u ramu štampača. Hoćeš jednu C++
>> klasu za rad sa štampačem?
E pa neće samo on... oće i drugi ;)).
cccc.384ematic,
> Malo ga pretera. B)
Malko šale nikad nije na odmet :))). Mada ima tu i zbilje ;). Ne bih
da ulazim u raspravu koji jezik je pogodniji za šta, samo da objasnim
praktičnu stranu rada u C-u ;)
Da preciziram, činjenica je da za veliki broj ovdašnjih korisnika
računara C predstavlja zonu sumraka. Kaži nekom da radiš u npr.
Pascalu, samo će da slegne ramenima i pogleda te 'onako', međutim
C... vof :)))). Onda, da zasladiš stvar, pokažeš mu neki svoj 'boza'
listing tipa 'hello world' (samo ti znaš da je jednostavan, on ne zna
;). E, tu već počinje sladostrašće ;). Posle treće vitičaste zagrade
vraća ti dotičnoga ;) i počinje da te gleda pogledom rezervisanim
samo za vrhovnog sveštenika Boga Bajta ;)))). Gde ćeš lepše hrane za
svoje samoljublje ;). Da ne pominjem situaciju kad pronađem neki svoj
stariji (slabo komentarisan, podrazumeva se ;) sors. Tu se zapada u
ekstazu divljenja samome sebi ('au, šta ja ovo napisah, na šta samo
liči, a još i radi, joj što sam ja pametan ';)). Da, ako želiš da
obožavaš sebe nema ničeg korisnijeg od programiranja u C-u :))))))
p.s. Ja se malko raspis'o, ne zamerite mi :)))))
cccc.385ematic,
> Drago mi je da si pročitao :).
Naći će se valjda još 'škakljivih' tekstova, nadam se ? :)
cccc.386skerl,
│ ps: Gde li samo dolazi do finih stvari koje nesebicno deli sa nama?
└────
Vecinom ih skidam sa trickle-a i cica-e.
Pozdrav,
Skerl.
cccc.387stomic,
$ Znam. B) žesto sam svojim kolegama AtariSTima na pitanje zašto
$ mnogo vlasnika PC-a koristi TP odgovarao da je TP na PC-u nešto
$ kao GFA Basic na Atariju: možeš vrlo brzo i vrlo lako da uradiš
$ neke stvari.
OK. Nisam znao da radiš na AtariST-u. Da ne citiram ostalo, slažem
se sa tobom, ipak koliko god da je dobar jezik nema nište bez dobre
implementacije. Jedino da sedneš i ti napišeš kompajler za Modulu-2 ;).
Pozdrav, stomic@hobbiton.
cccc.388stomic,
$ jeste, da znaš! sad ću da pitam ćaleta zašto mu se sviđa PL/I!
$ to mora da je dobar jezik, jer on programira još od 60-ih. ;)
Pa možda i ne bi da je nastavio da prati razvoj programa :))). Šala,
naravno :).
Pozdrav, stomic@hobbiton.
cccc.389stomic,
$ Smatram da je "ubeđivanje" programera da je neki jezik bolji od
$ drugog
Da se odmah ogradim ;), nisam imao, niti imam nameru da ubeđujem
nekoga da pređe na neki drugi jezik. Na neki način izbor jezika je
stvar ukusa :). Bio bih lud, kada bi i pokušao da ubedim nekoga,
pogotovo u cccc topic-u :).
$ "posvađamo" :) IMHO, Modula-2 nema ama baš ništa bolje
$ "projektovano" nego ANSI C. Ako neko hoće da piše macho-kod on
$ to može da uradi i u Moduli, ali ima da se odere. Međutim, ako
$ neko ima živaca (i mozga) da disciplinovano piše neki program,
$ ja bih mu UVEK pre preporučio C nego Modulu. A još kada
$ ustanovim da je sa C-a lako preći na C++, tu za mene uopšte
$ nema dileme :)
Da, tu se slažem. U C-u možeš 'kulturnije' pisati nego u Moduli-2,
naravno :). Ali pri učenji programiranja (a svi mi učimo još uvek,
možda ne naredbe, ali principe), ako smeš da radiš sve i svašta
posle će biti mnogo teže da 'kulturno' pišeš program.
Jedan od razloga zašto mi se sviđa M2, i koristim je, je baš to,
što ne moram da trošim energiju (relativno) da bi lepo pisao program.
Dalje, većina stvari može da se uradi u C-u (kao u M2), npr. moduli,
ali opet mora da poštuješ neke principe, koje ako omaneš niko živi
te neće ni upozoriti :))).
Jedno 'lično' pitanje... Zar ti (gotovo) isključivo ne programiraš
u asembleru :))). Pozdravi brata i nek mi javi na mail njegovu adresu
na UNSIM-u (ili gde već ima) :).
Pozdrav, stomic@hobbiton.
cccc.390stomic,
$ I ja ga preporučujem za čitanje. Iako ima bombast naslov,
$ članak je OK.
Da... Još od UKRASa mi nikako nije bilo jasno zašto programiraš u C-u.
Suviše ti je kod i način bio lep za (tipičnog) C programera :))).
$ Modulini moduli su, ipak, samo specijalni slučaj C++ klasa. A
$ C++ klase su korak dalje u shvatanju programiranja -- ideja da
$ podaci moraju da imaju odgovorne procedure za njih, a da ne
$ 'vise u vazduhu' kao kod Paskala je pomak jednaka "strukturnom
Abstraktno programiranje? Trivialno se izvodi u M2. Naravno klase
imaju mnogo prednosti koje se ne mogu (ili teže mogu) izvesti u npr.
M2.
IMHO, C++ ima izuzetno moćan OOP, jedini problem (što je meni najviše
zasmetala) je što je (ipak) baziran na C-u ;).
Ostatak teksta nisam citirao jer se u veći stvari slažem sa tobom :).
Ako te interesuje razvoj jezika, poslaću ti isečak o Modula-3 jeziku,
koga je možda bolje porediti sa C++ . Svrati na Hobbiton, postoji rasprava
u UseNet/Modula-3 -- 'M3 vs C++ :)'.
Pozdrav, stomic@hobbiton.
cccc.391mnikolic,
> YU slova i slične stvari koje su u ramu štampača. Hoćeš jednu C++ klasu za
> rad sa štampačem?
Rado, samo kad (i ako) budem prešao na C++ :)))
Koliko vidim, ima zainteresovanih pa šalji za njih.
Hvala na savetima, m.
cccc.392dr.grba,
>> C nije jezik, C je religija :)))))))). Mada, covek je napisao i
>> ponesto sto vredi, npr kaze da je C macho jezik :))))))).
Macho, mislis da je to kompliment? Macho je ipak asocijacija na coveka
koji je ogroman, snazan, glup i beskoristan. Prema tome, pobornice C-a,
bila je to uvreda (;
Pozdrav, dr ÔpŰa
cccc.393prvul,
Ů> - Exactly one header file per module. The header should
Ů> contain the function prototypes and typedef declarations
Ů> to be exported, and nothing else (except comments).
Ů▄▄
E meni se kod C-a ne sviđa to što moram da strukture koje
se koriste u procedurama deklarišem u heder fajlu. Nekako mi
se čini da bi bilo poželjno da u heder fajlu pišu samo "javne"
informacije. Npr. u C++ bi se public: deo klase deklarisao u
heder fajlu, ali kompletna struktura samo u cpp fajlu, nikako
ne bi trebalo da se vidi u .h fajlu.
Ja skoro sve procedure pišem tako da primaju pointere na strukture,
a ne same strukture kao parametre... u .h fajlu deklarišem tipove
tih pointera kao void pointere samo zato da ne bih napisao kako
struktura izgleda, ali time gubim više stvari: prvo, provera tipa...
dobro, to mi ne smeta, navikao sam da pazim pa ne grešim po tom
pitanju... e, ali druga mana je malo gora... naime, u .c fajlu koji
implementira procedure moram da cast-ujem non-stop pointere koje sam
dobio kao argumente... ta petljancija oko cast-ova naravno ne uvećava
kod koji se dobije, ali je ipak neprijatna.
E sada, znam da kompajler da bi koristio neku klasu ili strukturu
mora da zna njenu veličinu, a za to mu služi njena definicija u .h
fajlu, ali mislim da bi bilo lepše da, ako baš kompajler mora da zna
više nego što bih voleo da se o strukturi zna, pri kompajliranju .c
fajla generiše neki pomoćni fajl koji bi sadržao takve informacije,
a da se .h fajl ostavi da sadrži striktno informacije koje su javne.
Prvul
P.S. I ja sam prešao sa M2 na C posle skoro dve godine "moduliranja".
Zašto? Zato što C kod odgovara realnoj situaciji... pointeri su baš
ono što treba da budu... ime niza je pointer baš kao što jeste.. >>
i << se daju lako isprogramirati u moduli, ali volim da za često
korišćene operacije kao što su operacije na bitovima imam operatore
jer su izrazi sa operatorima pregledniji nego oni sa pozivima funkcija...
Pa onda blokovi u moduli, koji se završavaju sa END. Zar nije lepše
sa vitičastim zagradama... to me podseti na moju glavnu zamerku fortranu:
tip sa duplom preciznošću se deklariše kao DOUBLE PRECISION... kao da nemam
druga posla nego ću da kucam toliku deklaraciju... fuj...
Doduše, nedostaje mi ono modulino FROM modul IMPORT bla, bla
Tj. da u neku oblast važenja prenesem samo određene identifikatore
iz druge oblasti važenja...
cccc.394duduk.,
Koristim iskljucivo C.Sto?
cccc.395duduk.,
Komplikovano jeste. Takodje i mocno jeste (bar tako izgleda onaj demo primer).
Medjutimkopajuci po sorsu, nisam uspeo da nadjem funkciju kojom se kreiraju
ske za unos podataka (to meni najvise treba).
Usput, da li neko mozda ima Vermont Views ili C-Worthy lib.
cccc.396paki,
> implementacije. Jedino da sedneš i ti napišeš kompajler za
> Modulu-2 ;).
A napisao bi ga na C-u :))
cccc.397stomic,
$ A napisao bi ga na C-u :))
Naravno, tako teče evolucija. Sa nižeg na više, sa prostijeg na
složenije ;).
Pozdrav, stomic@hobbiton.
cccc.398stomic,
$ Pa onda blokovi u moduli, koji se završavaju sa END. Zar nije
$ lepše sa vitičastim zagradama... to me podseti na moju glavnu
$ zamerku fortranu: tip sa duplom preciznošću se deklariše kao
$ DOUBLE PRECISION... kao da nemam druga posla nego ću da kucam
$ toliku deklaraciju... fuj...
Ipak smo ljudi :). Zar nije lepše kada čitaš program kao knjigu,
tj. delovi liče na rečenice :). Šta bi rekao za IMPLEMENTATION
MODULE ;).
Ipak, programi se ne pišu svaki dan. Npr. sedneš i kažeš sada ću
nešto da kucam, bla, bla... Planiranje programa može prilično da
traje i posle toga ti nije teško da kucaš mnogo slova. Na kraju,
krajeva C kod mi nikada ne može biti lep, baš zbog tih skraćivanja,
lenjosti... :). Mogli smo i for da nazovemo - f i while - w, tada
bi najmanje kucali. Ali ipak... :).
Pozdrav, stomic@hobbiton.
cccc.399korvin,
>> Macho, mislis da je to kompliment? Macho je ipak asocijacija na coveka
>> koji je ogroman, snazan, glup i beskoristan. Prema tome, pobornice
>> C-a, bila je to uvreda (;
Šešelj programira u C-u ? :))
cccc.400janko,
> Da... Još od UKRASa mi nikako nije bilo jasno zašto
> programiraš u C-u. Suviše ti je kod i način bio lep za
> (tipičnog) C programera :))).
Joj, onaj Ukras sors i nije bio baš reprezentativan -- bar iz
mog ugla, kada sam ga "širio" za podršku za nivo 2 (ćirilicu).
Baš mi je smetalo što je pravljen "samo da proradi." Ako hoćeš
da nešto što nisi pre pisao stvarno izgleda savršeno, izgleda da
moraš da pišeš ispočetka pošto već jednom napišeš. :( Moram li da
kažem da nikad nisam za to skupio vremena, u ovom slučaju...
Možda ti je bilo zanimljivije to što sam ja kao pisao C a
komentarisao tvoje Paskal i Modula programe? Da živiš u Bgd-u već
bi ti naveliko pisao C++ ;)
cccc.401madamov,
Janko, care! Odlična analiza, mislim da ne bih mogao bolje od tebe napisati
ovo što si rekao, a sa čime se slažem.
cccc.402madamov,
******
Ja se malko raspis'o, ne zamerite mi
******
Nema veze, tačno je to što si napisao, mada ja sve ređe srećem takve ljude.
B)
cccc.403madamov,
******
Nisam znao da radiš na AtariST-u
******
Da, i na Atariju i na Meku. S tim što je na Meku paskal nekako prirodan
jezik kao što je C za Atari, ali ja i dalje koristim C na, što bi se reklo, obe
platforme. Naime, do System 7 Mekovi operativni sistemi su pisani u paskalu i
asembleru, a System 7 i kasniji su napisani korišćenjem C++. Atarijev GEM je
kompletno napisan u C-u.
******
Jedino da sedneš i ti napišeš kompajler za Modulu-2
******
Pa, nije to bila jedina Modula 2 za Atari, ali sam do drugih došao tek kad
sam definitivno prešao na Turbo C. Sad imam problem i sa Atarijem i Mekom što
ne mogu da dođem do dobrog C++ kompajlera za njih. Taman kad sam se rešio da
skinem sa ftp servera GNU C++ za Atari prošle godine, Austrijanci nam secnuše
vezu. B(
cccc.404madamov,
******
Naravno, tako teče evolucija. Sa nižeg na više, sa prostijeg na složenije ;).
******
B) Nego, da se nadovežem na ovo. Svojevremeno sam uploadovao PD C kompajler
za Atari na Sezam. I sećam se da sam u njegovoj dokumentaciji pročitao da su
kompajler testirali tako što su ga pustili da kompajlira sam sebe. B)
Interesantno, zar ne?
cccc.405tuci,
Da li neko ima biblioteku funkcija za rad sa IEEE-488 protokolom,
bilo bi dobro za TurboC ali prihvatamo sve :)
Pozdrav, Zlatko
cccc.406zormi,
* 4.1406 NOVOSTI:microb
*
* TITLE: Visual C++
*
* In March, Microsoft (Redmond, WA, (206) 882-8080) planned to release
* Visual C++, a full-fledged professional development language with a
* Visual Basic-like front end.
Imam to od pre mesec dana pa ako nekog zanimaju utisci:
Dolazi na 20 (!) malih disketa po 1.44 MB. Jako moćna stvar, ima sve i
svašta i pojede diska - ne pitaj.
Ukratko, za pola sata zezanja može da se kreira Windows prozor sa
sve ikonama, menijima, toolbar-om (!), dijalog prozorima, tasterima...
i to sve bez ijedne napisane linije u C-u. Takav "program" ima
EXE od preko 1 MB. Da bi program nešto korisno i radio treba dopisati
event-e, odnosno reakcije na izbore iz menija, tastera... itd.
Dakle, jako lepo i glomazno. Iz navike i dalje koristim Borland C++ 3.1.
cccc.407drmarke,
Jedan moj ortak moli za jednu biblioteku na C-u. Biblioteka bi
trebala da se zove "COGO.*" i da se bavi problemima
koordinatne geometrije. Biblioteka mu je potrebna radi
diplomskog. Ako neko ima neku ideju (mislim ovu ili ma koju
sličnu biblioteku) neka se javi. Stvar je relativno hitna.
Unapred hvala.
Pozdrav DrMarke
cccc.408dgrbic,
:: lenjosti... :). Mogli smo i for da nazovemo - f i while -
:: w, tada bi najmanje kucali. Ali ipak... :).
Zato poneki ovde koriste Brief ;>
cccc.409bulaja,
│** Uz poruku 'pcl4p30.zip' (48837 bytes)
│** Uz poruku 'pcl4c34.zip' (71564 bytes)
└───
Prebaceno u C i PASCAL direktorijume, thanks again.
cccc.410prvul,
Ů Ipak smo ljudi :)
Ů▄▄
Podsetio si me na Srđana Janeva i njegovu čuvenu izjavu "Ja nisam čovek,
ja sam programer!" :))
ŮZar nije lepše kada čitaš program kao knjigu, tj. delovi liče
Ůna rečenice :). Šta bi rekao za IMPLEMENTATION MODULE ;).
Ů▄▄
Ma pusti, imao sam svuda po tastaturi definisane makroe za te i takve
konstrukcije... :) Imao sam i jedan makro za
FROM InOut IMPORT WriteLn,WriteString... :)
ŮMogli smo i for da nazovemo - f i while - w, tada
Ůbi najmanje kucali. Ali ipak... :)
Ů▄▄
E, pa ako ćemo tako ;) mogli smo u moduli da uvedemo
NOT_EQUAL operator pa ipak imamo tarabu (joooj što mi to fali
u C-u :) Neke kriptične oznake za stvari koje se stvarno jako
često koriste su po meni opravdane... za for i ostalo je ok,
jer nekako imamo prirodnupredstavu šta to radi... ali blok_naredbi
nije nešto što postoji u prirodi, pa je potpuno pitanje konvencije
šta će ga obeležavati, a vitičaste zagrade su prilično dobar
izbor... inače, mogli smo i komentare da "deklarišemo" sa COMMENT ;)
cccc.411dr.grba,
>> Pa mozda i ne bi da je nastavio da prati razvoj programa :))).
Pa mozda i bi da su mu kupili nesto drugo da radi na tome. Ovako covek
skoluje svog sina radeci na PDP kanti ):
Pozdrav, dr ÔpŰa
cccc.412dr.grba,
>> Seselj programira u C-u ? :))
Sumnjam. On bi eventualno mogao da pvogvamiva.
cccc.413janko,
> Ja skoro sve procedure pišem tako da primaju pointere na
> strukture, a ne same strukture kao parametre... u .h fajlu
> deklarišem tipove
I o ovome sam hteo da pišem:
Iako ZZ u nekom skorašnjem članku tvrdi da je SPORO kopirati
strukturu umesto samo pointera na nju, i da se to u C-u NE
RADI, ja tvrdim suprotno!
Običaj prenosa pointera i kada treba i kada ne treba ostao je
kao posledica K&R first ed. u kome tvrde da se strukture ne
mogu prenositi cele, nego samo pointeri na njih. Međutim!
Autori su malo bili rezervisaniji nego što je trebalo -- po
sopstvenom priznanju (ako se dobro sećam) kompajler na kome su
oni pisali već je dozvoljavao prenos struktura.
Od usvajanja ANSI specifikacije više nema dileme -- kopiranje
čitavih struktura je legalno.
Tvrdnja da je TO sporije, ne može da se izrekne generalno! Ako
elementima strukture često pristupamo u toku izvršavanja
procedure, i ukoliko struktura nije veća od neke određene
veličine, moguće je da vreme potrošeno za jedno kopiranje bude
daleko manje od vremena potrebnog za referenciranje elemenata
preko pointera sa steka, umesto direktnog referenciranja steka.
(Na žalost, neke RISC arhitekture su projektovane sa idejom da
stek malo raste -- očigledno su programi iz kojih su skidali
statistike iz "stare garde." Ali, na sreću, ko kaže da u takvim
slučajevima stvarno mora da se struktura nalazi na istom steku
na kome se nalaze i jednorečni parametri?)
Osim toga, programi koji prenose cele strukture umesto pointera
(gde je to korisno, bar, a ima gde jeste) daleko elegantnije
izgledaju, lakši su za proširivanje i održavanje.
Lično, držim se principa -- za sve što nije deo kritične
petlje, neću da se opterećujem da štedim poneki ciklušćić. Ako
još time izbegnem eksplicitno pisanje nekih malloc konstrukcija
i obaveze da pazim da posle čudo dealociram, sa zadovoljstbom
ću preneti celu strukturu umesto njenog pointera. I još, ako
budem te procedure kasnije koristio i u C++ programima, lako ću
dodati samo & ako bi bilo bolje da se ne kopira cela
struktura...
I još -- sve ovo -- samo kad moram (npr. za jedan projekat
profesor mi je eksplicitno tražio da ga pišem u C-u). Do sada
nisam napisao nijedan program sa nekom ultrasloženom
hijerarhijom klasa na C++-u, ali već samo sve pogodnosti
postojanja klasa, konstruktora i destruktora (___ čitko dodati
još po izboru ;) koji ne moraju da se pozivaju "peške" (kao u
Turbo Paskalu, zgroz) toliko razmazi čoveka da ga mrrrrzi da
piše na suvom C-u osim ako je program manji od 100 linija ili
ako mora.
Ono što je značajnije je to što mi se u načinu razmišljanja,
otkako znam C++, dogodio pomak -- više ne razmišljam "statički"
-- sve može da ima više svojih pojava, jednostavno zato što to
bezbolno realizujem. (A nekad je bilo "jao, sada ovo moram da
generalizujem... ma mrzi me, dosta je jedna!") Zato sam rekao
da mislim da sada pišem i bolje C programe...
> E meni se kod C-a ne sviđa to što moram da strukture koje
> se koriste u procedurama deklarišem u heder fajlu. Nekako
> mi se čini da bi bilo poželjno da u heder fajlu pišu samo
> "javne" informacije. Npr. u C++ bi se public: deo klase
> deklarisao u heder fajlu, ali kompletna struktura samo u
> cpp fajlu, nikako ne bi trebalo da se vidi u .h fajlu.
Da. To jeste više zamerka C++-u, nego C-u, jer kod C-a skoro
NIŠTA NIGDE ne moraš da deklarišeš, ako pišeš prljavo. ;)
Postojanje PRIVATE dela tako izloženog jeste malo nedosledno,
ali, izgleda, prilično potrebno kompajlerima -- ni u Adi nisu
mogli to da izbegnu.
Lično, meni to nije nikada zasmetalo. Nikad nisam nešto pisao i
pomislio "e sad bi mi program bio bolji/lakši_za_pisanje da ovo
ne moram ovde da pišem."
cccc.414janko,
> $ Pa onda blokovi u moduli, koji se završavaju sa END. Zar nije
> $ lepše sa vitičastim zagradama... to me podseti na
> lenjosti... :). Mogli smo i for da nazovemo - f i while -
> w, tada bi najmanje kucali. Ali ipak... :).
Nekad sam i ja mislio da je lepše BEGIN .. END. Samo zato što
sam čitao samo K&R, a oni, stare cicije, ;) su štedeli i na
linijama sorsa (K&R su inicijalno dizajnirali C, između
ostalog, sa idejom da sors fajlovi budu što kraći(!)) pa je to
izgledalo ovako:
for (a=1;a<=10;a++) (
telo11;
telo12:
)
if (uslov) (
for ( ) (
blabla1;
blabla2;
)
d++;
) else (
teloels1;
teloels2;
)
(zamislite vitičaste zagrade umesto nekih običnih)
E, sad, ovako pisan program je prilično (ćuj, bolan, prilićno,
skroz, ba!) nečitljiv čim se konstrukcije malo rastegnu u više
linija i još malo ugnezde... Zato je glavna fora editora za C
bila "nađi zagradu koja se slaže sa ovom") ;) U poređenju s
tim, ono
for a:=1 to 10 do
begin
trala;
lala;
end;
je lepše... (osim što treba da se navikneš da prvu i poslednju
liniju u bloku preskačeš kada čitaš).
Međutim! Jednostavno dovođenje zagrada gde im je mesto (da
parovi budu u istoj koloni), daje C sors čitljiviji od
ekvivalentnog paskalskog ili modulskog jednostavno zato što
umesto silnih REžI BEGIN .. END imamo po jedan SIMBOL. (Nije to
ništa novo -- matematičari to rade vekovima -- uvode simbole
za sve ono što mora često da se piše.) žini mi se da takav
način pisanja (zagrade u istim kolonama) ima i svoje ime, ali
ga ja nisam zapamtio.
for (a=1;a<=10;a++)
(
telo11;
telo12;
)
if (uslov)
(
for ( )
(
blabla1;
blabla2;
)
d++;
)
else
(
teloels1;
teloels2;
)
Ovo je vizuleno daleko lepše -- skoro kao da je algoritam
nacrtan a ne napisan (tj. lako bi od ovoga docrtavanjem dobio i
pravi dijagram)... svaka struktura se vidi "iz aviona." (Ako i
ne delite moje mišljenje, onda morate da priznate da je lakše
za kasnije editovanje...)
Još jedan argument u korist C-a: zbog toga što se neumereno
koriste ključne reči, u paskaloidnim jezicima je uobičajeno da
se ljudi dodatno trude da označavaju ključne reči na jedan
način a ostatak teksta na drugi (npr. velikim slovima u
programima ili podebljanim slovima kada se publikuju programi)
samo da bi se unapredila faktički loša čitljivost teksta
programa. U C-u takav problem praktično ne postoji.
BTW, po meni su lepše konstrukcije FOR .. ENDFOR, WHILE ..
ENDWHILE i slične, jer se tako najbolje, ipak, izbegavaju
traženja "od čega je ovo end" i "od čega je ovo zagrada" a u
ove jezike (i Paskal i C) nisu ušle samo zato da bi mogli da
napišu ovo
for ... a(i)=b(i)+1
tj. zbog specijalnog slučaja kada se blok svodi na jednu
naredbu, zeznuli su sve ostalo... krajevi struktura se teško
prepoznaju.
Da ne govorimo o tome da onda mora posebno da se pazi šta se
radi u onim višestrukim ifovima -- tj. uz šta će da dođe ELSE.
Zato ja, kao što u Paskalu pišem tačku-zarez i pred END-om, da
bi mi dodavanje eventualne sledeće naredbe bilo bezbolnije,
često smestim eksplicitne oznake bloka i oko jedne naredbe, ako
je ona u telu programske strukture... posle me manje boli
glava...
Zanimljivo da ni ADA nije početke i krajeve struktura
najsrećnije rešila, iako su razmišljali u tom pravcu. Neke
konstrukcije se završavaju sa ENDpočetak ali neke i samo sa
END, pa nikad ne znaš šta gde da staviš. Još su uveli da iza
END možeš da staviš identifikator, ali ne i prozvoljan komentar
(što bi dalo mogućnost da ipak pišeš sve konstrukcije sa
ENDpočetak).
Inače, lično bih bio srećniji da C ne koristi uglaste i
vitičaste zagrade -- jer koristim juski, pa ni primere na mogu
da napišem a da se neki ne zgroze... ali ipak mislim da je
jedan simbol zgodniji od čitave reči u ovom slučaju...
Ipak, postoji jedna stvar koja ne izgleda nimalo lepo u C-u --
a to nije to što nema BEGIN END -- deklaracije funkcija. Naći
(pogotovu programski) definiciju funkcije u Paskal sorsu je
trivijalno, ali u C-u... čak ni na gledanje (tj. kada je ativna
i ljudska intuicija), ako sors nije čitljivo pisan -- ne znaš
gde je počela nova procedura!
> Ipak smo ljudi :). Zar nije lepše kada čitaš program kao
> knjigu, tj. delovi liče na rečenice :). Šta bi rekao za
> IMPLEMENTATION MODULE ;).
Onda pređi na Kobol. Tamo čak i na kraj svakog reda staviš
tačku. ;>
Btw. Kobol sam učio tek na petoj godini faksa (!) a pre ga
nisam znao. Kobol ima jednu lepu stvar, koja definitivno JAKO
fali dibejz-lajk jezicima -- struktururanje zapisa --
proizvoljan broj polja, kada se strukturira, se može kopirati
odjednom. A na Kliperu moram da se patim -- ili da navodim sva
imena, ili da kopiram i ono što ne bih, ali je tako lakše da se
nparavi petlja sa makroima...
cccc.415miro,
ű> Smatram da je "ubeđivanje" programera da je neki jezik bolji
ű> od drugog čisto gubljenje vremena. Ali to opet ne smeta da se
ű> malo "posvađamo" :) IMHO, Modula-2 nema ama baš ništa bolje
ű> "projektovano" nego ANSI C. Ako
Hops. Ovdje postaje zabavno. :)
C-Case nije nikakvo ubjeđivanje. Tu je čovjek od zanata, koji
je 70tih godina i sam projektovao jezike, bez upotrebe pljuvačnih
žlijezda objasnio neke stvari.
Pogledaj malo šta piše o header fajlovima u c-case pa reci kako
to rješava ANSI C. Ovo samo kao blic primjer stvari za koju C
prosto nije.
Pozdrav.
cccc.416miro,
Koristiću, kao i autor c-case, Modulu-2 kao primjer modernog
jezika:).
ű> for a:=1 to 10 do
ű> begin
ű> trala;
ű> lala;
ű> end;
FOR a:=1 TO 10 DO
trala;
lala;
END;
Ovo je adekvatan Modula-2 kod. Napomenuo bih i jednu (jedinu?!)
prednost C-a, a to je da je njemu semicolon statement terminator
a ne delimiter kao u 'paskaloidnim' jezicima;
ű> Međutim! Jednostavno dovođenje zagrada gde im je mesto (da
ű> parovi budu u istoj koloni), daje C sors čitljiviji od
ű> ekvivalentnog paskalskog ili modulskog jednostavno zato što
ű> umesto silnih REžI BEGIN .. END imamo po jedan SIMBOL. (Nije
ű> to
Taj jedan simbol je onaj END jer za razliku od Pascala u
Moduli-2 blokovi podrazumijevaju BEGIN. BEGINom samo počinju
tijela procedura i samih MODULE-a. I nemaš jedan nego dva
simbola, jednim počinješ, drugim završavaš. U Moduli 2 imaš JEDAN
SIMBOL, tj END i njime završavaš.
ű> Još jedan argument u korist C-a: zbog toga što se neumereno
ű> koriste ključne reči, u paskaloidnim jezicima je uobičajeno da
ű> [stuff deleted:)]
ű> programa. U C-u takav problem praktično ne postoji.
Još jedan dokaz da, za razliku od autorâ s 'druge strane',
ne poznaješ 'neprijatelja':). Modula-2 (kako rekoh primjer
modernog jezika) je case sensitive.
ű> BTW, po meni su lepše konstrukcije FOR .. ENDFOR, WHILE ..
ű> ENDWHILE i slične, jer se tako najbolje, ipak, izbegavaju
ű> traženja "od čega je ovo end" i "od čega je ovo zagrada" a u
Vjerovatno, ali sam si rekao da pravilnom identacijom to može
efikasno da se prevaziđe. Ja imam običaj da iza ENDa koji
završava blok duži od ekrana stavim u (* *) i tip bloka.
ű> Da ne govorimo o tome da onda mora posebno da se pazi šta se
ű> radi u onim višestrukim ifovima -- tj. uz šta će da dođe ELSE.
ű> Zato ja, kao što u Paskalu pišem tačku-zarez i pred END-om, da
ű> bi mi dodavanje eventualne sledeće naredbe bilo bezbolnije,
ű> često smestim eksplicitne oznake bloka i oko jedne naredbe,
ű> ako je ona u telu programske strukture... posle me manje boli
ű> glava...
Opet nepoznavanje 'neprijatelja'. Sintaksa Module-2 nije kao
kod paskala već
IF uslov THEN
statements
{ELSIF uslov THEN
statements}
[ELSE
statements]
END;
Dalje, već sam rekao šta mislim o karakteru ';'. Što se tiče
'eksplicitne oznake bloka' i to spada u nepoznavanje a gore sam
napisao šta je to u M2.
ű> da napišem a da se neki ne zgroze... ali ipak mislim da je
ű> jedan simbol zgodniji od čitave reči u ovom slučaju...
Ja ne. Mislim da je END dovoljno prosto a mnogo više doprinosi
čitljivosti koda.
ű> fali dibejz-lajk jezicima -- struktururanje zapisa --
ű> proizvoljan broj polja, kada se strukturira, se može kopirati
ű> odjednom. A na Kliperu moram da se patim -- ili da navodim sva
C i Clipper... Ti si stvarno nesretnik:)).
Ljudi koje znam da pišu u Moduli-2, SVE završavaju u Moduli-2!
cccc.417miro,
ű> Prvo, autor koristi C. ;)) Prava stvar. Da bi o nečemu
ű> raspravljao, moraš to nešto da poznaješ.
Za neke projekte, zaboravi ti da kažeš. On je i rekao da ne
poriče upotrebljivost Cu, ali preporučuje upotrebu razuma pri
izboru jezika za buduće projekte.
O poznavanju subjekta raspravljanja imaš u mojoj drugoj
replici:). Napomenuću da je moj redoslijed bio
Pascal-Basic-C-Modula2 + neki manje važni jezici (Cobol, Fortran,
Forth, Asembler...) između.
ű> Drugo, autor je primetio tipične greške loših programera u
ű> C-u. čeleći da pokaže slabost jezika, više je pokazao da neki
ű> koji pišu na njemu nisu ukapirali ideje, pogotovu ANSI
ű> standarda. C
žini mi se da tamo piše da svaki tim ima bar jednog lošeg
programera. Jedan je više nego dovoljan da zagorča život ostatku
tima.
ű> C-a, i vuče jezik prema jačoj proveri tipova, čistijoj
ű> modularnosti itd. Po meni ono što bi trebalo zvati "modernim
Vuče, ali ne odvlači. Kako autor reče, C++ rješava neke
probleme Ca (prototipi i slično) ali unosi i neke nove, a sve
probleme NE rješava.
ű> preveliko insistiranje na formalizmu kakvo je svojstvano
ű> Paskalu, Adi i Moduli definitivno nije od neke posebne
ű> koristi. Odrađena sloboda u korišćenju pointera je praktično
ű> neophodna.
Aman, sloboda u korišćenju pointera... Znaš li možda za tipove
ADDRESS BYTE WORD u Moduli-2? Znaš li za deklaraciju varijable na
apsolutnim pozicijama koja je dio standarda u M2? SYSTEM modul,
takođe dio standarda?
NE, ne znaš!
ű> postojanje pametnijih jezika nije izbacilo iz upotrebe Bejzik,
Piše tamo... Možda je bolje da su ljudi ostajali na BASICu:))
cccc.418miro,
ű> Razlozi su čisto praktične prirode. Ma koliko bio dobar TDI
ű> Modula-2 kompajler na Atariju, Turbo C je bio bolji i više mi
ű> je odgovarao. Napominjem
ű> važan, mnogo mi je važnije bilo koji je paket bolji. Iako imam
ű> nekih zamerki
ű> razliku između njih. Tu i leži moj glavni razlog za napuštanje
ű> Module 2, otkrio sam par bagova u nekim pozivima funkcija
ű> operativnog sistema, pa da bi to ispravio morao sam da vežbam
ű> i pisanje inline asemblerskih poziva na Modulin način:
ű> CODE(FFFFH);. Kad mi se smučilo prešao sam na C.
Ovo je ista argumentacija kojom DejanR kruniše svoje rasprave
na relaciji Pascal-Modula2.
Jedan kolega, npr., smatra da je Borland što se tiče
uspotrebljivosti paketa apsolutno najbolji. A piše u TopSpeed
M2:)
cccc.419miro,
ű> B) Nego, da se nadovežem na ovo. Svojevremeno sam uploadovao
ű> PD C kompajler za Atari na Sezam. I sećam se da sam u njegovoj
ű> dokumentaciji pročitao da su kompajler testirali tako što su
ű> ga pustili da kompajlira sam sebe. B) Interesantno, zar ne?
Da. Ako nisi znao to je završna faza vjerovatno svakog
kompajlera. Što bi rekli, krunski test. E sad, ako ja nemam jezik
X na platformi za koju radim, ja ću da radim o onome šta imam
(tj. Y). Kad napravim upotrebljiv alat, sve prepišem u jezik X i
gotovo.
U početku Y je bio asembler. Sad je uglavnom C, kao
najrašireniji.
cccc.420dejanr,
>> Modula-2 (kako rekoh primjer modernog jezika) je case sensitive.
... što je, po meni, jedna od njenih mana. Istina, i C je case
sensitive, ali to nekako kod njega "manje boli", jer su uglavnom
sva imena funkcija (MS C) pisana malim slovima, konstante velikim,
a kod Module su "mešali", i to kod raznih verzija Module na razne
načine, pa treba za svaku funkciju pamtiti kakvim se slovima piše.
>> C i Clipper... Ti si stvarno nesretnik:)).
Eh... od Clipper-a i C-a se živi :)
cccc.421dejanr,
>> Ovo je ista argumentacija kojom DejanR kruniše svoje rasprave
>> na relaciji Pascal-Modula2.
Pa da, ne programira neko na paskalu, fortranu, c-u, moduli 2 nego
na Turbo Pascalu, MS Fortran-u, MS C-u, JPI Moduli 2 (ili već nekoj
drugoj varijanti), dakle uz jezik mora se gledati i konkretna stvar
koja je čoveku na raspolaganju, jer to je ono od čega se živi. Šta
vredi dobar jezik ako nema dobre implementacije? Ono, uvek postoji
nada da će se jednog dana pojaviti dobra implementacija, ali zar se
do tada treba mučiti ako ima drugi jezik koji je dobro napravljen?
>> Jedan kolega, npr., smatra da je Borland što se tiče
>> uspotrebljivosti paketa apsolutno najbolji. A piše u TopSpeed
>> M2:)
Interesantno, ja ne znam nikoga ko programira u Moduli 2 (ako izuzmemo
ove diskusije na Sezamu, naravno). Znam da su u Lola Institutu jednom
hteli da pređu na taj jezik zbog nekog projekta sa engleskim institutom,
kupili originalni softver, organizovali ljudima kurseve, mučili se neko
vreme... i najzad digli ruke. Ispalo da se na "prastarom i bednom" PL/M-u
mnogo lakše programira to što njima treba.
Po meni, argumentacija između Module 2 i C-a ide u prilog C-u. Autor
nedavnog manifesta je uradio dobar posao, ali imam utisak da je čitavu
stvar zasnovao na poređenju lošeg C programera i dobrog programera na
nekom drugom jeziku. Što rekli u jednom mnogo starijem manifestu,
"pravi programer (?) može da piše fortran (bejzik, nestrukturirane,
špageti... ;) programe na bilo kom jeziku" ;)
cccc.422ematic,
> >> Macho, mislis da je to kompliment? Macho je ipak
> asocijacija na coveka >> koji je ogroman, snazan, glup i
> beskoristan. Prema tome, pobornice >> C-a, bila je to uvreda
> (;
>
> Šešelj programira u C-u ? :))
Pvavi pvogvamevi movaju da pvogvamivaju u C-u, ko neće taj je
izdajica vaskolikog pvogvamevstva i tveba da se pvikolje ;)
cccc.423prvul,
Ů> Ja skoro sve procedure pišem tako da primaju pointere na
Ů> strukture, a ne same strukture kao parametre...
ŮIako ZZ u nekom skorašnjem članku tvrdi da je SPORO kopirati
Ůstrukturu umesto samo pointera na nju, i da se to u C-u NE
ŮRADI, ja tvrdim suprotno!
Ů▄▄
Tvrdiš suprotno? Znači li to da tvrdiš da nije sporo ili da se
to u C-u radi? Ako tvrdiš ovo drugo, to valjda svi znaju da sme
da se uradi... oko sporosti treba malo prodiskutovati...
ŮTvrdnja da je TO sporije, ne može da se izrekne generalno! Ako
Ůelementima strukture često pristupamo u toku izvršavanja
Ůprocedure, i ukoliko struktura nije veća od neke određene
Ůveličine, moguće je da vreme potrošeno za jedno kopiranje bude
Ůdaleko manje od vremena potrebnog za referenciranje elemenata
Ůpreko pointera sa steka, umesto direktnog referenciranja steka.
Ů▄▄
Tako je to kada kompajler ne optimizuje kod. Kada se prenese pointer
koji se često referencira u proceduri, sve su šanse da će ga kompajler
pokupiti sa steka u registar i onda raditi referencirajući elemente
preko pointera u registru, što je isto tako brzo ili brže nego direktno
referenciranje steka (na većini arhitektura). Na 80x86 je možda problem
to smeštanje u registar jer ima malo registara, ali na svim savremenijim
procesorima se uvek nađe pokoji slobodan registar za pointer. A nekako
više volim da kompajler uradi optimizaciju registara nego da sam razmišljam
da li je brže referencirati strukturu po steku ili preko pointera. Sa C++
i "upućivanjem" ili kako se to već prevodi nestaje i problem preglednosti.
Ůotkako znam C++, dogodio pomak -- više ne razmišljam "statički"
Ů-- sve može da ima više svojih pojava, jednostavno zato što to
Ůbezbolno realizujem. (A nekad je bilo "jao, sada ovo moram da
Ůgeneralizujem... ma mrzi me, dosta je jedna!") Zato sam rekao
Ůda mislim da sada pišem i bolje C programe...
Ů▄▄
:) Nisi jedini... ja patim od toga da sve bude generalizovano, pa
ne pamtim kada sam poslednji put deklarisao bilo globalnu bilo static
promenljivu... a nešto se ne sećam ni da sam deklarisao strukturu kao
lokalnu promenljivu (mada je toga bilo). Sve strukture imaju svoje
funkcije za alokaciju i dealokaciju, a deklarišu se samo pointeri na iste.
Da ne pričam koliko je lako posle sve ovo preneti na C++ i dobiti
klasu sa sve konstruktorima i destruktorima za 2-3 minuta.
ŮLično, meni to nije nikada zasmetalo. Nikad nisam nešto pisao i
Ůpomislio "e sad bi mi program bio bolji/lakši_za_pisanje da ovo
Ůne moram ovde da pišem."
Ů▄▄
Pa ne verujem da bilo kome smeta u nekom tehničkom smislu, samo
je pitanje principa... ako već imamo princip sakrivanja onoga što
nije programeru potrebno da zna o klasi, zašto to ne izvesti do kraja
nego stati na pola puta? Jeste da je za kompajler jednostavnije, ali
mogli su da se izvuku... uostalom, kompajler treba da služi onome ko
programira, a ne obratno ;)
cccc.424prvul,
Ůtraženja "od čega je ovo end" i "od čega je ovo zagrada" a u
Ůove jezike (i Paskal i C) nisu ušle samo zato da bi mogli da
Ůnapišu ovo
Ů for ... a(i)=b(i)+1
Ů▄▄
Pa eno u moduli FOR, WHILE i ostale strukture automatski
otvaraju blok, ali se on opet zatvara sa END. Možda ENDFOR,
ENDWHILE, ENDIF i ostalo ne postoje jer bi to uvelo gomilu
(nepotrebnih?) ključnih reči u jezik.
Ůako sors nije čitljivo pisan -- ne znaš
Ůgde je počela nova procedura!
Ů▄▄
Zavisi od stila pisanja... kod mene su jedine zagrade koje
su na samom početku reda baš te zagrade koje označavaju početak
i kraj funkcije. Dobro, de... ima i onih koje označavaju početke
i krajeve deklaracija struktura, ali te su uvek na samom početku
fajla, a funkcije slede, pa se ne može pogrešiti.
cccc.425.obj,
> C-Case nije nikakvo ubjeđivanje.
Ja nisam ni rekao da je C-CASE.TXT ubeđivanje. Ubeđivanje je ono što je
taj tip pokušao a nije uspeo.
> Pogledaj malo šta piše o header fajlovima u c-case...
Piše da ostavljaju programeru preveliku slobodu, da je sistem podložan
greškama u slučaju nepažnje, da je #include/prototipi mehanizam
jednostavan i zastareo. Ništa od toga ne smatram manama C/C++ već
odličnim rešenjima (nasuprot Moduli-2 gde se toliko preteralo u
simetriji da je dobijen jezik koga, objektivno, ljudi jednostavno ne
žele da koriste).
> ...pa reci kako to rješava ANSI C.
Perfektno.
cccc.426prvul,
Ů Hops. Ovdje postaje zabavno. :)
Ů▄▄
Ů Još jedan dokaz da, za razliku od autorâ s 'druge strane',
Ůne poznaješ 'neprijatelja':). Modula-2 (kako rekoh primjer
Ůmodernog jezika) je case sensitive.
Ů▄▄
Ů Aman, sloboda u korišćenju pointera... Znaš li možda za tipove
ŮADDRESS BYTE WORD u Moduli-2? Znaš li za deklaraciju varijable na
Ůapsolutnim pozicijama koja je dio standarda u M2? SYSTEM modul,
Ůtakođe dio standarda?
Ů NE, ne znaš!
Ů▄▄
Imam utisak da ti je iz poruke u poruku postajalo sve manje zabavno...
mnogo si se emotivno vezao za tu modulu ;) Modula se može koristiti
kao primer modernog jezika za struktuirano programiranje. Kao što može
i bilo koji drugi struktuirani jezik (Pascal, C, neke verzije BASIC-a).
Međutim, sa C++ nije je za porediti. Razlika između M2 i C-a se na kraju
svodi na notacione pogodnosti, a tu moraš priznati da je C u prednosti.
Jeste, C ti DOZVOLjAVA da napišeš mnogo gori program nego što bi ikada
u moduli uspeo da napišeš, ali kada se program piše planski praktično je
pitnaje ukusa u kome jeziku će se realizovati algoritam. E, a onda C ima
sažetiju sintaksu, operatore nad bitovima (uvek se lepim za njih ali šta
da radim kada ih koristim tako često) i najzad ima ga svuda. Da ne
zaboravimo, to je jedini uspešan jezik koji je doživeo uspešno unapređenje
u OOL.
Za nekoga ko je malo pisao u C-u programi deluju kriptično i nečitljivo.
Međutim sa iskustvom ti isti programi postaju čitljiviji nego u drugim
jezicima... nekima je smetalo što zagrade označavaju blokove... međutim,
ako se lepo indentira to omogućava da se strukture vide kao da su nacrtane,
smo treba imati "šmek" za to... isto tako u matematici bi se neko bunio što
lepo prirodno ne piše INTEGRAL(f) ali posle dužeg bavljenja znak za integral
baš onakav kakav je omogućava da izrazi sa integralima budu pregledni...
slično je i sa sumama i matricama...
Meni je prvi jezik koji sam stvarno naučio bio C. Posle toga sam naučio
modulu i u njoj radio oko dve godine i najzad se prebacio na C. Naravno,
forth, fortran, pascal i ostalo samu međuvremenu uzgred učio, ali nikada
stvarno koristio. Moram priznati da mi neke stvari iz M2 nedostaju, ali se
sada sa C-a i C++ ne bih vraćao na M2 ako baš ne moram.
cccc.427pmijat,
>> ű> for a:=1 to 10 do
>> ű> begin
>> ű> trala;
>> ű> lala;
>> ű> end;
>>
>> FOR a:=1 TO 10 DO
>> trala;
>> lala;
>> END;
>>
>> Ovo je adekvatan Modula-2 kod.
Nisam mogao da odolim, iako ne spada ni u temu ni u raspravu :
PERFORM WITH TEST AFTER VARYING a FROM 1 BY 1 UNTIL a = 10
trala
lala
END-PERFORM.
Ovo je odgovarajuca COBOL sintaksa za isto.
Jos jednom, sorry zbog upadanja u diskusiju
Pozdrav
Predrag(pmijat)
cccc.428spantic,
> kompajler testirali tako što su ga pustili da kompajlira
> sam sebe. B) Interesantno, zar ne?
Ima i bolja priča. Svojevremeno je za QLa postojao SuperBASIC prevodilac,
koji je napisan, verovali ili ne, u SuperBASICu a testiran je tako što je
preveo prvo sebe :)
cccc.429stomic,
$ odličnim rešenjima (nasuprot Moduli-2 gde se toliko preteralo u
$ simetriji da je dobijen jezik koga, objektivno, ljudi
$ jednostavno ne žele da koriste).
Izuzimajući pola Evrope (npr. gotovo cela Nemačka) ;). Pa i nije to
mnogo ;).
Pozdrav, stomic@hobbiton.
cccc.430stomic,
$ Možda ti je bilo zanimljivije to što sam ja kao pisao C a
$ komentarisao tvoje Paskal i Modula programe? Da živiš u Bgd-u
$ već bi ti naveliko pisao C++ ;)
Sada teško ;). Pre još nisam bio 'siguran'. Sada nema šanse :).
Pozdrav, stomic@hobbiton.
cccc.431stomic,
$ Podsetio si me na Srđana Janeva i njegovu čuvenu izjavu "Ja
$ nisam čovek, ja sam programer!" :))
Koliko mi se čini, on programira u Moduli-2 ;).
$ E, pa ako ćemo tako ;) mogli smo u moduli da uvedemo
$ NOT_EQUAL operator pa ipak imamo tarabu (joooj što mi to fali
$ u C-u :) Neke kriptične oznake za stvari koje se stvarno jako
Taraba, npr. strašno podseća na precrtan znak jednakosti (tj.
ne jednako) i samim tim njeno korišćenje je sasvim logično i
opravdano.
Pozdrav, stomic@hobbiton.
cccc.432stomic,
$ a kod Module su "mešali", i to kod raznih verzija Module na
$ razne načine, pa treba za svaku funkciju pamtiti kakvim se
$ slovima piše.
Mešali? Šta? Svaka procedura (funkcija) počinje velikim slovom,
ako ima druga reč unutar imena, ona je opet velikim slovom... A i
ko je još video da neko programira na dva različita kompajlera za
isti jezik ;>. Kada pređeš na nešto i to ćeš koristiti duže vreme,
nije ti teško naučiti ta imena (uglavnom, učenje ide spontano).
Kolika je sličnost između MS C i BC-a? Kada dobijaš poseban make
file za jedan i za drugi, a još rade na istim mašinama pod istim OSom.
Pozdrav, stomic@hobbiton.
cccc.433stomic,
$ Pa da, ne programira neko na paskalu, fortranu, c-u, moduli 2
$ nego na Turbo Pascalu, MS Fortran-u, MS C-u, JPI Moduli 2 (ili
$ već nekoj drugoj varijanti), dakle uz jezik mora se gledati i
$ konkretna stvar koja je čoveku na raspolaganju, jer to je ono
$ od čega se živi. Šta vredi dobar jezik ako nema dobre
$ implementacije? Ono, uvek postoji
Ne znam koliko ceniš I.S. Petnicu, ali tamo se isključivo rade
projekti u JPI TopSpeed v3.02 radnoj okolini. I prilično su hvalili
Modulu-2.
$ kupili originalni softver, organizovali ljudima kurseve, mučili
$ se neko vreme... i najzad digli ruke. Ispalo da se na
$ "prastarom i bednom" PL/M-u mnogo lakše programira to što njima
$ treba.
Dejane, jel' ti menjaš jezik zavisno šta treba da uradiš? Nikada
(a programiraš dugo, koliko znam) nisi seo i napisao svoju bibliteku,
i baci (npr.) Clipper zauvek. OK, da se ponekad spustimo na ASM,
ali sa jednog na drugi viši jezik... Argument da je u Clipperu nešto
brže uraditi, ne stoji, ako iole dobro napišeš svoje module.
Pozdrav, stomic@hobbiton.
cccc.434stomic,
$ Imam utisak da ti je iz poruke u poruku postajalo sve manje
$ zabavno... mnogo si se emotivno vezao za tu modulu ;) Modula se
$ može koristiti kao primer modernog jezika za struktuirano
$ programiranje. Kao što može i bilo koji drugi struktuirani
$ jezik (Pascal, C, neke verzije BASIC-a).
Nije mu. Veruj mi ;). Drugo, da ne iznosim argumente i ne širim
raspravu, Modula-2 je nastala početkom '80tih, znači nekih 10-15
godina kasnije od gore nabrojanih. Ako ništa drugo, N. Wirth barem
nije kreten da ne uradi ništa pametno za ovo vreme. Module će
preuzeti i C++ kad tad ;). U nekoj svojoj cfront x.y.z verziji ;).
Pozdrav, stomic@hobbiton.
cccc.435janko,
> Janko, care! Odlična analiza, mislim da ne bih mogao bolje
> od tebe napisati ovo što si rekao, a sa čime se slažem.
Zahvaljujem. :) Baš sam se pitao, da li zalud pišem ovakav
tekst na Sezamu... da li će ostati neprimećen bilo zbog dužine
bilo zbog širine... :)
cccc.436ppekovic,
>> B) Nego, da se nadovežem na ovo. Svojevremeno sam uploadovao PD C kompajler
>> za Atari na Sezam. I sećam se da sam u njegovoj dokumentaciji pročitao da su
>> kompajler testirali tako što su ga pustili da kompajlira sam sebe. B)
>> Interesantno, zar ne?
:) To radi i GNU C pri instalciji. Pošto dolazi u source-u,
prvo ga iskompajliraš sa postojećim C komapjlerom, a zatim tako
dobijeni kompajler iskompajlira ponovo ceo source u finalnu
verziju.
Paya
cccc.437madamov,
******
Modula-2 (kako rekoh primjer modernog jezika) je case sensitive.
******
I ANSI C je case sensitive. A kompajleri uglavnom imaju switch da uključiš
ili isključiš razlikovanje velikih i malih slova. Ako me sećanje ne vara i ona
moja TDI Modula 2 na Atariju je imala switch za tako nešto, mada ne bih mogao
da stavim ruku u vatru za to. Doduše, čini mi se da vas dvojica mislite na
ključne reči, pa ovo i nema mnogo veze.
cccc.438madamov,
******
Ovo je ista argumentacija kojom DejanR kruniše svoje rasprave na relaciji
Pascal-Modula2.
******
žuo sam za taj tekst (ili možda tekstove?), ali ih nisam čitao tako da ne
znam da li nam je ista argumentacija. Takođe ne znam šta je Dejan i kako radio,
ali ja sam prvo radio u Moduli, pa onda dosta dugo paralelno i u Moduli i C-u
(čak sam išao dotle da neke sitne programe napišem i u jednom i u drugom jeziku
da bi ih uporedio), a onda definitivno prešao na C. Da opet ponovim, samo iz
praktičnih razloga, nikako zato što smatram jedan jezik boljim od drugog.
******
Jedan kolega, npr., smatra da je Borland što se tiče uspotrebljivosti paketa
apsolutno najbolji. A piše u TopSpeed M2:)
******
B) Sada znatno manje programiram na Atariju, uglavnom radim na Meku, a za
njega još nisam nabavio Modula 2 kompajler. I mogu ti obećati da kad (i ako) ga
nađem, pa on bude bolji od THINK C-a koga sada koristim, preći ću opet na
Modulu. Mada čujem da je THINK Pascal skoro kao Modula, ali tu opet dolazimo do
slične priče kao ukod upoređivanja Turbo Pascal-a i Module 2.
cccc.439madamov,
******
Ako nisi znao to je završna faza vjerovatno svakog kompajlera.
******
Tada nisam znao pa mi je bilo interesantno. A i kompajler je sam po sebi
interesantan, tj. to je kompletan paket za pisanje programa u C-u, a čak nije
ni PD, tj. autori eksplicitno u dokumentaciji navode da im niko nikako ne šalje
ni jedan cent, jer su sve to uradili za svoju dušu. Kako se to obično zove,
freeware?
cccc.440madamov,
******
pa treba za svaku funkciju pamtiti kakvim se slovima piše.
******
Na ovo sam se navikao u poslednje vreme, jer su sve funkcije Mekovog
operativnog sistema nazivane na ovaj način (nije ni čudo, OS je prvobitno
napisan u paskalu). Postoje i tu određena pravila kod davanja naziva, vrlo brzo
se uhvati ta logika, pa nije veliki problem. Pretpostavljam da slična nepisana
pravila postoje i za Modulu.
cccc.441dejanr,
>> > odličnim rešenjima (nasuprot Moduli-2 gde se toliko preteralo u
>> > simetriji da je dobijen jezik koga, objektivno, ljudi
>> > jednostavno ne žele da koriste).
>>
>> Izuzimajući pola Evrope (npr. gotovo cela Nemačka) ;). Pa i nije to
>> mnogo ;).
Eh, Nemci su poznati kao država u kojoj se mnogo koristio čak i Atari
ST, dakle skloni su raznim vrstama devijantnog ponašanja ;)))))
cccc.442dr.grba,
>> Pa mozda i bi da su mu kupili nesto drugo da radi na tome. Ovako covek
>> skoluje svog sina radeci na PDP kanti ):
Htedoh reci UNIVAC ):, al' jednako mladoliko...
cccc.443dejanr,
>> > a kod Module su "mešali", i to kod raznih verzija Module na
>> > razne načine, pa treba za svaku funkciju pamtiti kakvim se
>> > slovima piše.
>>
>> Mešali? Šta? Svaka procedura (funkcija) počinje velikim slovom,
>> ako ima druga reč unutar imena, ona je opet velikim slovom...
Lepo i logično zvuči. Ali, kako je onda, primenjujući takvu logiku,
Logitech nazvao funkciju sqrt a JPI istu funkciju Sqrt? Zašto se
(JPI) kaže LONGREAL a ne LongReal?
>> Kada pređeš na nešto i to ćeš koristiti duže vreme,
>> nije ti teško naučiti ta imena (uglavnom, učenje ide spontano).
Nema sumnje, ali samo kažem da je čitava ta filozofija "velika/mala
slova su različita" nešto teža za učenje od koncepcije starog dobrog
FORTRAN-a koja kaže "piši slova kako ti drago". Doduše, neki kažu da
je posle preglednije, a sve ima svoju cenu. A kad mora, navikne se
čovek i na gore stvari, ne bi da opet pominjem vi ;)))
>> Kolika je sličnost između MS C i BC-a?
Sličnost je mala, u pravu si. Ja sam samo "pričao" o različitom tretmanu
velika/mala slova u smislu da ako dva kompajlera iste funkcije različito
zovu (po pitanju velika/mala slova), onda tu nešto sa logikom davanja
imena nije u redu.
cccc.444dejanr,
>> Ne znam koliko ceniš I.S. Petnicu, ali tamo se isključivo rade
>> projekti u JPI TopSpeed v3.02 radnoj okolini. I prilično su hvalili
>> Modulu-2.
Veoma cenim I.S. Petnica kao u našim uslovima jedinstvan projekat
koji već godinama postiže zbilja izuzetne rezultate. Ali, IS Petnica
je baš to što joj i ime kaže - omladinska istraživačka stanica. Kao
takva, ona ne mora da ispoljava neki previsok stepen veza sa "realnošću",
može (i treba!) da se bavi raznim interesantnim projektima koji obuhvataju
paralelno procesiranje, nove arhitekture, RISC, egzotične jezike itd.
Većina tih projekata završava baš tamo gde je i rađena, i kao rezultat da
jedino to da su učesnici u projektu nešto naučili. Neki projekat će možda
na duži rok rezultirati i raznim drugim stvarima. Sasvim je prirodno da
takve istraživačke stanice propagiraju razne jezike, i zapravo bi u tome
trebale da budu što raznovrsnije. Mene lično više zanimaju jezici, a naročito
njihove implementacije, od kojih se živi.
>> Dejane, jel' ti menjaš jezik zavisno šta treba da uradiš?
Pa, naravno. Ne znam koliko si se bavio pitanjima projektovanja softvera,
ja jesam uglavnom onoliko koliko se to izučavalo kod prof. J. Dujmovića (u
okviru predmeta "Metode programiranja", ETF) jer kod nas, na žalost, ima
jako malo softverskih firmi i većih softverskih projekata koji bi uopšte
zahtevali "pravo" projektovanje :( Međutim, ovako čisto teorijski, jedna
od značajnih faza projektovanja jednog sistema je izbor jezika. Kada se
sagledaju problemi i skicira moguće rešenje, pristupa se pregledu
raspoloživih jezika i alata kako bi se odabrao onaj pomoću koga će se
problem najefikasnije rešiti. Jedan od značajnih parametara pri tom izboru
jeste znanje i iskustvo raspoloživog programerskog tima - dakle, ako se
više prethodnih projekata radilo na C-u, ima smisla pre svega
razmotriti C. Prelazak na neki drugi jezik razmatra se sa četiri aspekta,
i sva četiri se "vulgarno" izraze u dolarima: (1) koliko će koštati da se
programeri obuče da rade na drugom jeziku; (2) koliko koštaju novi alati;
(3) koliko će jednostavniji (=jeftiniji) biti razvoj programa na novoj
platformi i (4) koliko će u budućnosti biti prilike da se novi alati koriste.
Naravno, najteže je odrediti poslednji aspekt, jer treba predvideti buduća
kretanja na tržištu i poslovnu politiku firme. Dakle, ako se ispostavi da
će ubuduće na tržištu biti sve više poslova koji se mogu kvalitetnije i
efikasnije raditi na nekom drugom jeziku, postepeno se programeri obučavaju
da rade na njemu ili se deo postojećih programera otpušta a angažuju se
novi koji poseduju odgovarajuća znanja (to je ono kad u NOVOSTI/microb
čitamo o "reorganizaciji i otpuštanjima" u nekoj firmi, recimo trenutno
Quaterdeck izgleda planira da se pomalo orijentiše na druge platforme,
dakle otpušta programere koji su uglavnom radili na asembleru).
Inercija softverske industrije je prilična tj. potrebni su dosta jaki
argumenti (u vidu $$$) da bi se menjali neki od bazičnih programerskih
alata sa kojima se u okviru jedne firme radi. žak i prelazak sa verzije
na verziju nije lako prihvatljiv, recimo silne (čak i vrlo ozbiljne!)
softverske firme i dalje koriste MS C 5.1. Ali, ako se uoči dovoljno
jasna računica, nema "milosti".
Primenjeno na naše "male" uslove, naravno da ne radim sve na istom jeziku.
Razni tipovi poslova rade se mnogo lakše na raznim jezicima. Moj lični
izbor je Clipper kada se pišu baze podataka, Turbo Pascal kada se pišu
"mali" uslužni programi, FORTRAN kada se piše za VAX-a, PL/M kada se
radi mikroprocesorski softver za razne Intelove kontrolere i C kada ništa
od toga nije raspoloživo i/ili ne može da zadovolji potrebe. Plus asembler,
kad baš mora. Nikada nisam osećao preterane probleme od istovremenog
korišćenja svih ovih jezika, jer svaki koristim za razne stvari. Jedini
problem je što treba odvojiti 100+ mega na disku za razne kompajlere ;(
>> i baci (npr.) Clipper zauvek.
Baci ga ti, ako želiš, ja sam na njemu tako lepo zaradio (i zarađujem) da
ga mnooogo poštujem :) Clipper ima svoje mane i svoja ograničenja, ali
dobro radi posao za koji je namenjen. Video sam svašta drugo, i Force,
i razne Paradox Engine, i CISAM-e/DISAME-e, i ModBase/Repertoire, i druge
biblioteke i, po meni, ništa od toga nije konkurencija Clipper-u.
Konkurencija Clipper-u su jedino jezici "njegovog nivoa" kao što su Fox
i slični. Neki su, možda, i bolji od njega. Ali baze podataka na C-u ili
(pogotovu) Moduli 2... hvala lepo :(
Što se tiče Module 2, moram da kažem da sam negde 1988/1989. bio spreman
da je jako ozbiljno razmotrim kao mogući univerzalni alat za razne
poslove. Bio sam na neki način "zaveden" time što su u mnogim prikazima
isticane razne biblioteke za nju, hvaljene performanse, univerzalnost,
prenosivost itd. Pomišljao sam da bi se možda sve stvari koje radim,
dakle i mikroprocesorski softver, i baze podataka, i "mali uslužni programi",
moglo raditi na jednom jeziku (Moduli) što bi bio solidan dobitak. Odvojio
sam prilično vreme a bogami i novac (nabavka kompajlera, biblioteka
(ModBase itd) i svega i svačega... nešto je moglo da se dobije na prikaz
ali nešto je i moralo da se plati :( ) za taj eksperiment. Završio sam
potpuno razočaran u Modulu 2, vreme i novac otpisani kao gubitak. Razočaran
sam ponajmanje Modulom kao jezikom, poprilično njenim PC implementacijama
i totalno tim bibliotekama (neozbiljno pisano) i performansama koje čitav
sistem postiže. Odluka da Modulu (do daljeg, ne treba biti isključiv) potpuno
otpišem kao jezik mi se u današnje vreme čini još opravdanijom, jer vidim da
je praktično jedini jezik za razvoj softvera na novim platformama (Windows,
OS/2...) upravo C (i sve više C++), dok sve drugo stigne mnogo kasnije (pri
čemu prvo stiže paskal, hvala Borlandu :) uz vrlo sumnjive karakteristike.
Pri svemu tome, imam utisak da kod mnogih mlađih programera postoji prevelika
fasciniranost programskim jezikom. Ja programski jezik prevashodno gledam
kao sredstvo pomoću koga se ostvaruje neka zamisao, smatrajući zamisao za
ono bitno a alat za nešto mnogo manje važno. Dobro programiranje ne prodaje
program. žak ni performanse ne prodaju program (normalno, ako je sve u
nekim granicama, katastrofalno loše performanse su svakako loša karakteristika
programa). Korisnički interfejs može da zainteresuje kupca i može da proda
program, ali ga ni on ne prodaje na duži rok. Ono što prodaje program je
sagledavanje problema koji se rešava i projektovanje rešenja koje će
omogućiti korisniku da racionalno primeni kompjuter. To je ono što je teško
i zapravo jedna od dve stvari od stvarnog značaja.
Druga stvar koja je od velikog značaja, naročito na duži rok, je pouzdanost
softvera. Meni se jednom desilo da sam gotovo izgubio jednu inače dobru
mušteriju zato što sam, k'o neki žutokljunac, kada je izašao Clipper 5.0 uzeo
programe koji su dobro radili i preveo ih njime i takve instalirao :( Posle
je sve počelo tako da puca da mi je izgledalo da me ni Sava i Dunav neće
oprati :((( Posle sam sa Clipper-om 5.01 nekom čoveku napravio maltene džabe
program s tim da ne odgovaram za pouzdanost, jer se kod njega taj program
zbilja vrteo po 24 sata dnevno a primena je bila takva da, sve i da totalno
pukne, nema štete koja se neće opraviti jednim kopiranjem sa diskete. Tek
kad se tamo 4 meseca program vrteo bez problema počeo sam da verujem u
Clipper 5.
Baš zbog te pouzdanosti skloniji sam "proverenim" i mnogo prodavanim jezicima
poput Clipper-a, MSC-a itd, nego raznim "super proizvodima" malih firmica.
cccc.445dejanr,
>> Modula-2 je nastala početkom '80tih, znači nekih 10-15
>> godina kasnije od gore nabrojanih. Ako ništa drugo, N. Wirth barem
>> nije kreten da ne uradi ništa pametno za ovo vreme.
Iskreno rečeno, meni se čini da se praktična upotrebljivost Virtovih
jezika kreće silaznom linijom - paskal, pa modula, pa najzad oberon
kao najmanje upotrebljiv.
Zapravo, kako neko reče, i paskal bi bio mnogo manje upotrebljiv da
nije raznih ekstenzija kao što su vax pascal ili turbo pascal. Mislim
da Virtu i nije cilj da projektuje "praktično upotrebljive" jezike,
njega više zanimaju neki teorijski i naučni aspekti programiranja. A
ako neko od nekog njegovog jezika napravi nešto upotrebljivo... nije
on kriv :)
cccc.446janko,
Ah, počela je polemika... :)
> Koristiću, kao i autor c-case, Modulu-2 kao primjer
> modernog jezika:).
> FOR a:=1 TO 10 DO
> trala;
> lala;
> END;
Već sam napisao u prethodnoj poruci, da smatram da bi idealno
bilo FOR ... ENDFOR, (tj. za svaki konstrukt odgovarajući kraj,
koji se uvek gradi na isti način) još sa mogućnošću da se iza
tog ENDFOR nalazi čak i opis početka petlje... Npr.
for a=1 to 10 step 0.1 (uvek sam mrzeo Paskal i slične što
trala; ( nema ovaj step ;)
for b=3 to 11
opaopa;
endfor b;
lala;
endfor a;
Priznajem, ovako opet imamo puno ključnih reči i dosta
"ključnog" teksta, a zaključili smo da C može da bude
čitljiviji baš zato što ih nema takve. Ali, kada bih mogao da
biram između različitih ne-C-lajk jezika, odabrao bih ovakav
(a nema ga!)
> ű> Međutim! Jednostavno dovođenje zagrada gde im je mesto
> (da ű> parovi budu u istoj koloni), daje C sors čitljiviji
> od ű> ekvivalentnog paskalskog ili modulskog jednostavno
> zato što ű> umesto silnih REžI BEGIN .. END imamo po jedan
> SIMBOL. (Nije ű> to
>
> Taj jedan simbol je onaj END jer za razliku od Pascala u
> Moduli-2 blokovi podrazumijevaju BEGIN. BEGINom samo
> počinju tijela procedura i samih MODULE-a. I nemaš jedan
> nego dva simbola, jednim počinješ, drugim završavaš. U
> Moduli 2 imaš JEDAN SIMBOL, tj END i njime završavaš.
END nikako nije JEDAN simbol. ;) Osim ako postoji neki font u
kome su ta tri slova spojena u jedan znak. ;)
> ű> Još jedan argument u korist C-a: zbog toga što se
> neumereno ű> koriste ključne reči, u paskaloidnim jezicima
> je uobičajeno da ű> Šstuff deleted:)Ć
> ű> programa. U C-u takav problem praktično ne postoji.
>
> Još jedan dokaz da, za razliku od autorâ s 'druge strane',
> ne poznaješ 'neprijatelja':). Modula-2 (kako rekoh primjer
> modernog jezika) je case sensitive.
1) Kakav neprijatelj, molim te! Programiraću ja na svakom
jeziku, za koji mi se plati! ;) Ako mi neko plati za Modulu,
dobiće Modulu.;)
2) Argument ti je skroz OFF. To što je Modula kejs senzitiv
nije pohvalno, čak! Zbog pomenutog problema nečitljivosti,
tvorci Module su, onda, propisali da se ključne reči moraju
pisati velikim slovima. Moje mišljenje je da je rezultat
grozan! Takav listing me asocira na kompjutersku
praistoriju, kada nisu ni postojala mala slova -- Fortran i
Kobol su tada tako izgledali. Moram li da kažem da na modernim
Kobol i Fortran kompajlerima mogu da pišem i malim slovima, a
na Moduli ne? ;)
> ű> BTW, po meni su lepše konstrukcije FOR .. ENDFOR, WHILE
> .. ű> ENDWHILE i slične, jer se tako najbolje, ipak,
> izbegavaju ű> traženja "od čega je ovo end" i "od čega je
> ovo zagrada" a u
>
> Vjerovatno, ali sam si rekao da pravilnom identacijom to
> može efikasno da se prevaziđe. Ja imam običaj da iza ENDa
> koji završava blok duži od ekrana stavim u (* *) i tip
> bloka.
I time ono što bi trebalo da proverava kompajler (ej, a Modula
se kao diči time da je striktnija ;) svodiš na čisto pisanje
običnog teksta koga kompajler ne vidi, te ne mora ni da bude
konzistentan! ;)
> ű> Da ne govorimo o tome da onda mora posebno da se pazi
> šta se ű> radi u onim višestrukim ifovima -- tj. uz šta će
> da dođe ELSE. ű> Zato ja, kao što u Paskalu pišem
> tačku-zarez i pred END-om, da ű> bi mi dodavanje
> eventualne sledeće naredbe bilo bezbolnije, ű> često
> smestim eksplicitne oznake bloka i oko jedne naredbe, ű>
> ako je ona u telu programske strukture... posle me manje
> boli ű> glava...
>
> Opet nepoznavanje 'neprijatelja'. Sintaksa Module-2 nije
> kao kod paskala već
>
> IF uslov THEN
> statements
> šELSIF uslov THEN
> statementsć
> ŠELSE
> statementsĆ
> END;
>
> Dalje, već sam rekao šta mislim o karakteru ';'. Što se
> tiče 'eksplicitne oznake bloka' i to spada u nepoznavanje
> a gore sam napisao šta je to u M2.
1) Ja i nisam pisao o Moduli 2, ako nisi primetio, te tvrdnja
da je ne poznajem ne stoji. Ovo je čisto podmetanje. Pisao sam
o klasičnom problemu kod C-a, pre svega, i da ga rešavam
suprotno rudimentnom C običaju da se ništa suvišno ne piše, na
isti način na koji pišem i suvišne tačke zareze, jer su
korisni, u Paskalu.
2) IF .. ELSIF .. konstrukcije su mi vrlo dobro poznate.
3) Nepoznavanje čega je "eksplicitna oznaka bloka?" Module 2?
Pa ja nisam ni pisao o njoj! Primeti da je ovo cccc tema. ;)
> ű> fali dibejz-lajk jezicima -- struktururanje zapisa --
> ű> proizvoljan broj polja, kada se strukturira, se može
> kopirati ű> odjednom. A na Kliperu moram da se patim --
> ili da navodim sva
>
> C i Clipper... Ti si stvarno nesretnik:)).
>
> Ljudi koje znam da pišu u Moduli-2, SVE završavaju u
> Moduli-2!
Zavisi šta rade. ;) I ja bih mogao da sve završavam u Moduli
dva, ako bih se bavio samo određenim akademskim radom... npr.
da radim u "Institutu za istraživanje ruda i Modulu dva" ;)
Ovako, ne gledam usko -- sve što mi završi posao ću da
upotrebim. Pa čak i Modulu 2. Do sada mi ona nije ponudila da
ijedan posao uradim lakše -- tj. da treba da uradim nešto i
pomislim "e, ovo bi sada najlakše realizovao u Moduli dva."
Za razliku od toga, "ovo je najlakše u C++-u," pomislim mnogo
češće. ;))
cccc.447janko,
> Nisam mogao da odolim, iako ne spada ni u temu ni u
> raspravu :
>
> PERFORM WITH TEST AFTER VARYING a FROM 1 BY 1 UNTIL a = 10
> trala
> lala
> END-PERFORM.
>
> Ovo je odgovarajuca COBOL sintaksa za isto.
>
> Jos jednom, sorry zbog upadanja u diskusiju
Nije striktno vezano za temu, ali spada u raspravu. :) Hvala.
Strogo gledano, čak ni celoj rapravi nije mesto u PC temi.
Lično bih bio srećniji da tema za svaki programski jezik ne
bude vezana za određeni operativni sistem! Npr. da je
konferencija samo PROGRAMIRANJE, a ne PC.PROG.
cccc.448janko,
> Ů for ... a(i)=b(i)+1
> Pa eno u moduli FOR, WHILE i ostale strukture automatski
> otvaraju blok, ali se on opet zatvara sa END. Možda
> ENDFOR, ENDWHILE, ENDIF i ostalo ne postoje jer bi to
> uvelo gomilu (nepotrebnih?) ključnih reči u jezik.
Jeste. I Modula je dizajnirana kada su memorije bile mnogo
manje -- i oni su se brinuli da će biti teže napraviti
kompajler sa pokojom ključnom reči više. Fortran nema ključne
reči, a opet, novije verzije jezika izlaze na kraj i sa takvim
konstrukcijama -- toliko o modernosti Module. ;)
> Ůako sors nije čitljivo pisan -- ne znaš
> Ůgde je počela nova procedura!
> Ů▄▄
>
> Zavisi od stila pisanja... kod mene su jedine zagrade koje
> su na samom početku reda baš te zagrade koje označavaju
> početak i kraj funkcije. Dobro, de... ima i onih koje
> označavaju početke i krajeve deklaracija struktura, ali te
> su uvek na samom početku fajla, a funkcije slede, pa se ne
> može pogrešiti.
Vidiš, nije baš...
Ostaje primer koji sam već naveo: napiši program koji nalazi
imena svih procedura u Paskal sorsu. Trivijalno. Napiši program
koji nalazi imena svih procedura u C sorsu. Treba ti pozamašan
deo gramatike C-a i LEX i YACC.
cccc.449janko,
> ű> preveliko insistiranje na formalizmu kakvo je
> svojstvano ű> Paskalu, Adi i Moduli definitivno nije od
> neke posebne ű> koristi. Odrađena sloboda u korišćenju
> pointera je praktično ű> neophodna.
>
> Aman, sloboda u korišćenju pointera... Znaš li možda za
> tipove ADDRESS BYTE WORD u Moduli-2? Znaš li za
> deklaraciju varijable na apsolutnim pozicijama koja je dio
> standarda u M2? SYSTEM modul, takođe dio standarda?
>
> NE, ne znaš!
Ton ti je takav da skoro ne zavređuje ni odgovor. Poslednji
put, molim te da čitaš ono na šta odgovaraš. Idući put ti neću
odgovoriti.
cccc.450janko,
> OK, da se ponekad spustimo
> na ASM, ali sa jednog na drugi viši jezik...
Zašto ne bismo koristili ono što najbolje odgovara problemu
koji rešavamo? Insistiranje na JEDNOM jeziku za SVE je glupo.
> ali sa jednog na drugi viši jezik... Argument da je u
> Clipperu nešto brže uraditi, ne stoji, ako iole dobro
> napišeš svoje module.
Nema nameru da IKAD pišem SVOJE module za B+ stabla, .DBF
kompatibilnost, i za interaktivnu obradu kakvu mi pružaju
Dibejz ili Foks. Kad bi to bilo lako, svi bi pisali Dibejzove i
Foksove.
cccc.451janko,
> ne pamtim kada sam poslednji put
> deklarisao bilo globalnu bilo static promenljivu... a
> nešto se ne sećam ni da sam deklarisao strukturu kao
> lokalnu promenljivu (mada je toga bilo). Sve strukture
> imaju svoje
Joj! Šta fali globalnim promenljivama? Šta fali strukturi kao
lokalnoj promenljivoj? žini mi se da stvarno preteruješ... S
druge strane, na osnovu izjave da te ne mrzi da sve
generalizuješ, verujem da bi mi bilo zadovoljstvo da radim u
istom timu s tobom. :)
cccc.452prvul,
Ů$ Podsetio si me na Srđana Janeva i njegovu čuvenu izjavu "Ja
Ů$ nisam čovek, ja sam programer!" :))
Ů Koliko mi se čini, on programira u Moduli-2 ;).
Ů▄▄
Jeste, izmeđuostalog i u M2. Kao što i ja između ostalog koristim
FORTH za ono za šta ga treba koristiti: za programiranje HP48SX (dobro,
nije baš FORTH ;) Koristiš jednostavno onaj jezik koji dobro znaš, a
koji omogućava lako rešavanje problema. Njegove probleme rešava M2,
moje ne rešava (nema operatore za rad sa bitovima, pa mi kod koji treba
da uradi aritmetičko kodiranje izgleda jaaako nepregledno i ružno).
Ů$ NOT_EQUAL operator pa ipak imamo tarabu (joooj što mi to fali
Ů Taraba, npr. strašno podseća na precrtan znak jednakosti
Ů▄▄
Pa znam... i baš nešto razmišljam... taraba se može ubaciti u C
standard bez problema, jer se inače koristi samo za pretprocesorske
direktive, pa bi se dvosmislenost lako dala razrešiti... hoću tarabuuuu.. ;)
cccc.453prvul,
Ů Ne znam koliko ceniš I.S. Petnicu, ali tamo se isključivo rade
Ůprojekti u JPI TopSpeed v3.02 radnoj okolini. I prilično su hvalili
ŮModulu-2.
Ů▄▄
Evo ja izuzetno cenim Petnicu, ali ona ima svoje razloge za prelazak
na TS okolinu, a koja obuhvata i C++ koji rado koristim. Naravno, jako
mi prija mogućnost da fragmente koda pišem u M2.
cccc.454prvul,
ŮModule će preuzeti i C++ kad tad ;)
Ů▄▄
I mislim da bi se to većini jako svidelo. Naročito ako se snađu
sa onim problemom sakrivanja privatnih delova klasa. Samo, verujem
da će, kao i sve ostalo u C-u, i sintaksa za "moduliranje" biti
mnogo sažetija nego ona u M2. U stvari, svi Wirth-ovi jezici su fini
kada u njima treba pisati male programčiće i primere baš zato što su
"opširni". Ali za malo duži kod počinje da ide na živce prevelika
strogost. Mislim da treba od svih jezika pokupiti najbolje osobine...
nije to ništa loše... čaksm jedno vreme razmišljao o mutabilnim jezicima,
kod kojih postoji metajezik, a strukture koje želite da imate definišete
sami. I onda neka svako napravi sebi jezik kakav mu odgovara, a sav kod
bio bi međusobno kompatibilan zbog svođenja na metajezik. Jedini problem
je što ako neko treba damenja tuđ kod ima da crkne...
cccc.455dusanp,
=> Kolika je sličnost između MS C i BC-a? Kada dobijaš
=> poseban make file za jedan i za drugi, a još rade na
=> istim mašinama pod istim OSom.
Da li te zanima kakva je slicnost na nivou make-a ili
na nivou sorsa? To su razlicite stvari. BC u verziji
3.1 potpuno podrzava MSC deklaracije (osim svojih),
pa mozes da kazes da je slicnost potpuna. I da ne
zaboravim, na oba mesta seint kaze bas tako, a ne
Int i INT.
cccc.456prvul,
ŮLepo i logično zvuči. Ali, kako je onda, primenjujući takvu logiku,
ŮLogitech nazvao funkciju sqrt a JPI istu funkciju Sqrt? Zašto se
Ů(JPI) kaže LONGREAL a ne LongReal?
Ů▄▄
Ma za sqrt manje-više, ali zašto se kod jednog zove InOut, WriteLn,
WriteString, a kod drugog IO, WrLn... Za LONGREAL je logično, naime
imena svih ugrađenih tipova se pišu velikim slovima (CARDINAL, LONGCARD).
cccc.457prvul,
Ů> ne pamtim kada sam poslednji put
Ů> deklarisao bilo globalnu bilo static promenljivu... a
Ů> nešto se ne sećam ni da sam deklarisao strukturu kao
ŮJoj! Šta fali globalnim promenljivama? Šta fali strukturi kao
Ůlokalnoj promenljivoj? žini mi se da stvarno preteruješ...
Ů▄▄
Heh... ali da si morao nekada da uopštavaš tuđi kod... brrrr...
Npr. imaš sors od ZMODEM-a, i kada ga izkompajliraš radi. Onda
rešiš da napraviš od toga biblioteku. E, ona mora biti reentrant.
Što znači nix globalne promenljive, a mora podržavati i više "instanci"
transfera odjednom. Onda nastaje ludnica... autor, naravno pravio
funkcije za transfer tako da podržavaju samo jedan u isto vreme...
Naravno, ZMODEM nisam prepravljao. Ali slične module čiji autor je
mislio da će samo jedna instanca da bude u igri jesam na svoju opštu ;)
žalost. E, da ne bih kada dođe vreme da svoje module tako krpim mislio
o sebi ono što sam tada mislio o njima, lepo uvek sve pišem da bude
reentrant, tj. sve je lokalno, sve na steku, sve može da ima proizvoljan
broj instanci. Navikneš se da tako razmišljaš i nemaš više problema...
cccc.458nbatocanin,
> I sećam se da sam u njegovoj dokumentaciji pročitao da su kompajler
> testirali tako što su ga pustili da kompajlira sam sebe. B)
> Interesantno, zar ne?
Jeste, interesantno je. To je klasika, bilo je reči u jednom od
starijih brojeva "Računara".
cccc.459stomic,
$ Baci ga ti, ako želiš, ja sam na njemu tako lepo zaradio (i
$ zarađujem) da ga mnooogo poštujem :) Clipper ima svoje mane i
$ svoja ograničenja, ali dobro radi posao za koji je namenjen.
$ Video sam svašta drugo, i Force,
Hvala na savetu, bacio sam ga odavno (posle par poslova koji su
mi se smučili). Stvar je što je kliper na višem nivou od viših
programskih jezika ;). Tj. na neki način skup rutina za rad sa
bazama. E to ne volim. To je lepo, rešava trenutan problem, ali ako
ja baš budem srećnik da naletim na neki bug u tim rutinama mogu
da se slikam. Volim da imam veću kontrolu nad onim što se dešava
u mom programu.
$ softvera. Meni se jednom desilo da sam gotovo izgubio jednu
$ inače dobru mušteriju zato što sam, k'o neki žutokljunac, kada
$ je izašao Clipper 5.0 uzeo programe koji su dobro radili i
$ preveo ih njime i takve instalirao :( Posle
Baš kao što sam rekao ;).
Pozdrav, stomic@hobbiton.
cccc.460stomic,
$ Zašto ne bismo koristili ono što najbolje odgovara problemu
$ koji rešavamo? Insistiranje na JEDNOM jeziku za SVE je glupo.
Postoje jezici opšte namene (general purpose languages, ako sam
dobro napisao), kao što su C, Modula-2, Pascal, ... Prelazak
među njima mi je glup (ok, možda grešim). Prelazak na neki jezik
koji se bavi specifičnim problemom mi je opravdan ako se ne isplati
(vreme/novac) pisanje baš tih specifičnih rutina.
$ Nema nameru da IKAD pišem SVOJE module za B+ stabla, .DBF
$ kompatibilnost, i za interaktivnu obradu kakvu mi pružaju
Zar nije lepše kada napišeš svoje module i posle tačno znaš kako
šta radi. BTW, ako te već interesuju B+ stabla (doduše u M2) javi
se :). Naravno ako je Dragisha razpoložen pošto ih je on napisao.
cccc.461stomic,
$ Eh, Nemci su poznati kao država u kojoj se mnogo koristio čak i
$ Atari ST, dakle skloni su raznim vrstama devijantnog ponašanja
$ ;)))))
Ako gledamo na tu stranu, i amerikance smatramo za prilično glupu
naciju, a oni sami forsiraju C/C++ ;))).
Pozdrav, stomic@hobbiton.
cccc.462stomic,
$ Iskreno rečeno, meni se čini da se praktična upotrebljivost
$ Virtovih jezika kreće silaznom linijom - paskal, pa modula, pa
$ najzad oberon kao najmanje upotrebljiv.
Toliko silaznom putanjom da je Borland uspeo da izvuče Pascal
baš novitetom iz Module-2 -- Unitima, tj. Modulima ;))). Što se
tiče Oberona-2, kažu da ima trenutno najjači OOP. Mada još ne
postoji dovoljno jaka implementacija ovog jezika.
Pozdrav, stomic@hobbiton.
cccc.463stomic,
$ Logitech nazvao funkciju sqrt a JPI istu funkciju Sqrt? Zašto
$ se (JPI) kaže LONGREAL a ne LongReal?
Zato što se standardni tipovi pišu velikim slovima.
$ velika/mala slova u smislu da ako dva kompajlera iste funkcije
$ različito zovu (po pitanju velika/mala slova), onda tu nešto sa
$ logikom davanja imena nije u redu.
Stvar navike. Modula-2 te kao jezik ne tera da tačno po nekim
pravilima daješ procedurama, tipovima, ... imena (velika/mala
slova). Već da ih koristiš baš onako kako si naveo, što je sasvim
logično i čini program mnogo preglednijim.
Za nekompatibilnost između Logitech i JPI, ne možemo kriviti ni
Wirtha niti jednu od ove dve firme. Kao ni Borland ni Microsoft zbog
BC i MSC.
Pozdrav, stomic@hobbiton.
cccc.464stomic,
$ nije pohvalno, čak! Zbog pomenutog problema nečitljivosti,
$ tvorci Module su, onda, propisali da se ključne reči moraju
$ pisati velikim slovima. Moje mišljenje je da je rezultat
$ grozan! Takav listing me asocira na kompjutersku
Moje lično mišljenje je da je rezultat odličan :). Na ovaj
način se ističnu neke granice npr.
BEGIN WHILE <uslov> DO REPEAT
... ... ...
... ... ...
... ... ...
END; END; UNTIL <uslov>;
Baš ono što nam treba. Kada se analizira program prvo ove oblasti
treba da se primete (jer su na neki način istaknute), pa tek onda ono
između. Odlično rešenje.
$ Zavisi šta rade. ;) I ja bih mogao da sve završavam u Moduli
$ dva, ako bih se bavio samo određenim akademskim radom... npr.
$ da radim u "Institutu za istraživanje ruda i Modulu dva" ;)
Pa ako tu spada i knjigovodstva ('korisna' primena M2 :) i gomila
drugih stvari (npr. ceo Hobbiton BBS je napisan u M2, ah, da... tek
sada shvatam zašto DejanR ne voli M2 ;>>>), onda stvarno ne znam šta
je korisno.
Ovde da zastanemo. Lično smatram da je M2 dobar jezik, ali ni
jedan jezik (mislim na ove jezike opšte namene) ti ne može drastično
pomoći, možda samo olakšati neke delove. Ako imaš (napišeš, nabaviš,
...) dobru biblioteku zaista nećeš imati potrebe za bilo čim drugim.
Pozdrav, stomic@hobbiton.
cccc.465stomic,
$ > neke posebne ű> koristi. Odrađena sloboda u korišćenju
$ > pointera je praktično ű> neophodna.
$ > Aman, sloboda u korišćenju pointera... Znaš li možda za
$ > tipove ADDRESS BYTE WORD u Moduli-2? Znaš li za
$ Ton ti je takav da skoro ne zavređuje ni odgovor. Poslednji
$ put, molim te da čitaš ono na šta odgovaraš. Idući put ti neću
$ odgovoriti.
Za ton vas dvojica raspravite ;). Što se tiče odgovora mislim
da je OK. Pričalo se o slobodi korišćenja pointera. ADDRESS ti
daje potpunu slobodu.
Pozdrav, stomic@hobbiton.
cccc.466ppekovic,
>> Toliko silaznom putanjom da je Borland uspeo da izvuče Pascal
>> baš novitetom iz Module-2 -- Unitima, tj. Modulima ;))).
Ali je i dalje pascal. Kad je M2 toliko dobar, zašto ne uzeše
sve?
>> Što se
>> tiče Oberona-2, kažu da ima trenutno najjači OOP.
Ko?
>> Mada još ne
>> postoji dovoljno jaka implementacija ovog jezika.
Kad bude bilo javi da probam. Nemam predrasude ni prema
jednom programskom jeziku.
Paya
cccc.467ppekovic,
>> To je lepo, rešava trenutan problem, ali ako
>> ja baš budem srećnik da naletim na neki bug u tim rutinama mogu
>> da se slikam. Volim da imam veću kontrolu nad onim što se dešava
>> u mom programu.
Šta ako naletiš na bug u tvom M2 komapjleru. Da li si
razmišljao da sve pišeš u assembler-u, mada, kad bolje razmislim,
šta ako naletiš na bug na mikroprocesoru, hm, najbolje je
napraviti svoj, ... :)
Kako si tako siguran da tvoje funkcije i procesure nemaju
bug-ova. Clipper programi se teraju na hiljadama računara u
najrazličitijim uslovima, te se sa velikim stepenom sigurnosti
može reći da pouzdano radi. Manji bug-ovi su poznati a samim tim
ih nije problem izbeći. Dakle, sigurnije je koristiti proverene
alate nego izmišljati rupu na saksiji.
Paya
cccc.468ppekovic,
>> Postoje jezici opšte namene (general purpose languages, ako sam
>> dobro napisao), kao što su C, Modula-2, Pascal, ... Prelazak
>> među njima mi je glup (ok, možda grešim).
Dobro i kažeš. Zato je najbolje koristiti onaj koji ima
najbolje implementacije, podršku u obliku knjiga, biblioteka,
gomile korisnika, zatim onaj koji je standard na operativnom
sistemu sadašnjosti i budućnosti, unix-u.
Paya
cccc.469dejanr,
>> > Nema nameru da IKAD pišem SVOJE module za B+ stabla, .DBF
>> > kompatibilnost, i za interaktivnu obradu kakvu mi pružaju
>>
>> Zar nije lepše kada napišeš svoje module i posle tačno znaš kako
>> šta radi.
A da napišeš i svoj kompajler, pa onda znaš tačno šta će kako prevesti?
Pa onda svoj operativni sistem, pa nema više nedokumentovanih poziva? ;))
Zašto da ja radim ono što su već drugi ljudi uradili, i to ulažući u to
i dosta rada i dosta para, tako da su te rutine verovatno bolje uradili
nego što bih ja mogao? Bolje da im platim sitnu lovu za te rutine, i da
ih ubuduće koristim.
cccc.470dejanr,
>> > Iskreno rečeno, meni se čini da se praktična upotrebljivost
>> > Virtovih jezika kreće silaznom linijom - paskal, pa modula, pa
>> > najzad oberon kao najmanje upotrebljiv.
>>
>> Toliko silaznom putanjom da je Borland uspeo da izvuče Pascal
>> baš novitetom iz Module-2 -- Unitima, tj. Modulima ;))).
Niko nije rekao da u sledećim jezicima nema i dobrih stvari. Zapravo,
u svakom jeziku ima dobrih ideja. Ali, jezik se ipak posmatra kao
celina. Da je Borland, recimo, smatrao da je Modula 2 dobra i praktična
kao jezik, ne bi pravio paskal nego bi pravio Turbo Modulu 2 (koja je,
doduše, kratko vreme i postojala pre nego što su videli da od toga
nema 'leba). Oni su uzeli dobre ideje iz Module i odbacili celinu,
koja je slaba.
A to za module... nije baš novitet Module 2, postojalo je još u
starom dobrom fortranu, jedino što je ovom prilikom izdvojen opis
funkcija u poseban modul, koji je kod Module 2 baš dibiduz poseban,
a kod Turbo Pascala je samo stavljeno na vrh unit-a, u INTERFACE
sekciju. Lično smatram da je Turbo Pascal rešenje praktičnije.
>> Što se tiče Oberona-2, kažu da ima trenutno najjači OOP. Mada još
>> ne postoji dovoljno jaka implementacija ovog jezika.
To je baš to što kažem - Virt se bavi teorijom programiranja i smišlja
jezike sa nekim novim elementima, a praktična realizacija toga mu nije
prvenstveni cilj. Drugi posle iz njegovih jezika crpe razne ideje i
ugrađuju ih u jezike koji idu na tržište. No imam utisak da Virt, kako
je slavniji, ulaže sve manje truda u to da jezici koje pravi uopšte i
mogu racionalno da se implementiraju. Što je, kad se bolje razmisli, i
logično.
cccc.471darone,
>> Ima i bolja priča. Svojevremeno je za QLa
>> postojao SuperBASIC prevodilac, koji je napisan,
>> verovali ili ne, u SuperBASICu a testiran je
>> tako što je preveo prvo sebe :)
žekaj, na koju foru? Pa morao je prvo da bude
iskompajliran (ili interpretiran, svejedno) na
nečem drugom... Ili na prethodnoj verziji samog
sebe... Ali od sorsa do izvršnog programa mora da
postoji još nešto.
darone
cccc.472bdm.,
## Lepo i logično zvuči. Ali, kako je onda, primenjujući takvu logiku,
## Logitech nazvao funkciju sqrt a JPI istu funkciju Sqrt? Zašto se
## (JPI) kaže LONGREAL a ne LongReal?
A zašto to treba da bude veliki problem, sigurno nećeš istovremeno
koristiti oba kompajlera?
## FORTRAN-a koja kaže "piši slova kako ti drago". Doduše, neki kažu da
Ovo mi se kosi sa preglednim programiranjem, i ti si to napomenuo
dalje u tvojoj poruci.
Meni je baš case sensitive velika prednost, čak i dok sam radio u TP-u
pisao sam rezervisane reči krupnim, WriteLn i ostale procedure upravo
onako kako su bile napisane u help-u i tek tada mi je kod delovao
koliko-toliko dobar na izgled...
Tebi je TP ok zbog svoje brzine i okoline, meni je JPI M2 sporija (mada
brzina i nije problem ako se dobro organizuju moduli) ali mi je zato
okolina jedno 5-6 puta bolja, jezik moćniji i još kad tu dodam Dragišinu
biblioteku teško da ću ponovo ozbiljno koristiti TP i Clipper ili vratiti
na učenje C-a. Ipak svi imamo neke lične sklonosti, navike i bubice... :)
BDM.
cccc.473bulaja,
│Toliko silaznom putanjom da je Borland uspeo da izvuce Pascal
│bas novitetom iz Module-2 -- Unitima, tj. Modulima ;))).
└───
Ti Turbo Pascal juniti su samo najgora moguca zakrpa da bi TP
bio upotrebljiv kompajler s obzirom da nema obj & lib.
cccc.474pusa,
> Ako gledamo na tu stranu, i amerikance smatramo za prilično glupu
> naciju, a oni sami forsiraju C/C++ ;))).
Pa to je bas dokaz da nisu glupa nacija, gledaju sta je
prakticno da se najbolje pasao uradi.
cccc.475pusa,
> npr. ceo Hobbiton BBS je napisan u M2
Eto, jos jedan dokaz koliko je Modula 2 inferiorna u
odnosu na C :>>
Da manem zezanje, kakva Modula 2, kakav Pascal, Pascal
je mozda dobar za ucenje programiranja a Modula 2 ni za to, C
je jedini jezik opste namene sa kojim se radi posao. Izuzimam
CLIPPER itd koji smatram za generator aplikacija a ne za pravi
jezik. Pitajte me u cemu su pisani cak i Turbo Pascal, Modula 2
i ostali slavni jezici? U c-u, naravno kad se cak i sam c pise
u c-u :)
Za C++ ne znam, meni se nekako u startu nije dopao, kao
ni celo OOP ali vidim da se mnogima svidja sve vise, moracu malo
da bunarim i po njemu.
cccc.476pusa,
> Ovo mi se kosi sa preglednim programiranjem, i ti si to napomenuo
> dalje u tvojoj poruci.
Cekaj, na Moduli moras da pises velika / mala slova a kod
nekog drugog kompajlera MOZES ali NE MORAS. Meni je bilje ovo
drugo, da mogu ako hocu a ako necu tj. ocu brze da kuckam, kompajler
me ne tera!
Kad bolje pogledam, ispade ovo argument i protiv "moga" c-a,
ali u c-u i jeste da se sve pise malim slovima osim ako nesto bas
hoces velikim imena promenljivih, pa mi nekako ne smeta. Ali bi
najbolje bilo da ima kao na vaxu svich kojim ukidas ili ukljucis
razlike velika./mala slova, pa teraj kako ti se svidja. Ima li to
JPI M2? Pre nije imala.
> ali mi je zato okolina jedno 5-6 puta bolja
Po cemu je bolja, Borland paskal ima sve sto ima i modula,
plus jos integrisani debager koji para vredi!
cccc.477pusa,
> Ti Turbo Pascal juniti su samo najgora moguca zakrpa da bi TP
> bio upotrebljiv kompajler s obzirom da nema obj & lib.
Slazem se, to za obj je zdravo glupo, zato i volim C :)
cccc.478madamov,
******
Zašto ne bismo koristili ono što najbolje odgovara problemu koji rešavamo?
Insistiranje na JEDNOM jeziku za SVE je glupo.
******
Welcome to the club! Ovo pričam od početka rasprave. B)
cccc.479drmarke,
> Ima i bolja priča. Svojevremeno je za QLa postojao
> SuperBASIC prevodilac, koji je napisan, verovali ili ne, u
> SuperBASICu a testiran je tako što je preveo prvo sebe :)
A Blejk na kraju dinastije izvršava samoubistvo saznavši da je
sam sebi otac. :)))))
Pozdrav DrMarke
cccc.480.obj,
> Pitajte me u cemu su pisani cak i Turbo Pascal, Modula 2
> i ostali slavni jezici? U c-u, naravno
Turbo Pascal (kompajler) je napisan u čistom asembleru. Inače, kôd je
urađen... maestralno. Tip koji je to radio je tako dobro napisao TPC da
mu stvarno skidam kapu (jes' da nikad ne nosim kapu, al ajd sad ;). On
je takođe napisao i prve verzije Turbo Linkera, a poznato je koliko je
bio brži od ostalih.
cccc.481stomic,
$ >> da se slikam. Volim da imam veću kontrolu nad onim što se
$ dešava >> u mom programu.
$ Šta ako naletiš na bug u tvom M2 komapjleru. Da li si
$ razmišljao da sve pišeš u assembler-u, mada, kad bolje
$ razmislim, šta ako naletiš na bug na mikroprocesoru, hm,
$ najbolje je napraviti svoj, ... :)
Rekao sam da volim da imam veću a ne absolutnu kontrolu nad programom.
Ipak je Clipper na višem novu od M2. Nivo višeg programskog jezika mi
je za sada dovoljan :).
$ Kako si tako siguran da tvoje funkcije i procesure nemaju
$ bug-ova. Clipper programi se teraju na hiljadama računara
$ u najrazličitijim uslovima, te se sa velikim stepenom
$ sigurnosti
Nisam ni rekao da sam siguran. Ali posle npr. dva dana debugiranja
imam opravdane razloge da posumnjam da je bug u compileru :).
Pozdrav, stomic@hobbiton.
cccc.482stomic,
$ Dobro i kažeš. Zato je najbolje koristiti onaj koji ima
$ najbolje implementacije, podršku u obliku knjiga,
$ biblioteka, gomile korisnika, zatim onaj koji je standard
$ na operativnom sistemu sadašnjosti i budućnosti, unix-u.
Dobro i ti kažeš :). To je jedan jedini razlog (unix) zašto bih
koristio C -- da 'preživim' dok se ne pojavi M2 :).
Pozdrav, stomic@hobbiton
cccc.483stomic,
$ A da napišeš i svoj kompajler, pa onda znaš tačno šta će kako
$ prevesti? Pa onda svoj operativni sistem, pa nema više
$ nedokumentovanih poziva? ;))
Ajde da se raspravljamo kao deca :). Nisam rekao NIGDE da želim
absolutnu kontrolu nad programom. Pročitaj repliku ppekovic-u.
Pozdrav, stomic@hobbiton.
cccc.484stomic,
$ Ali je i dalje pascal. Kad je M2 toliko dobar, zašto ne uzeše
$ sve?
Zato što bi nastala Turbo Modula-2, koja bi totalno preuzela
tržište Turbo Pascalu. Zašto sami sebi da prave konkurenciju,
kada se tada TP već dooobro prodavao.
Pozdrav, stomic@hobbiton.
$ Kad bude bilo javi da probam. Nemam predrasude ni prema
$ jednom programskom jeziku.
Postoji Oberon-2 sistem, koji je više za edukativne svrhe. Ako
te ovo interesuje -- Hobbiton i:\programm\oberon :).
Pozdrav, stomic@hobbiton.
cccc.485stomic,
$ celina. Da je Borland, recimo, smatrao da je Modula 2 dobra i
$ praktična kao jezik, ne bi pravio paskal nego bi pravio Turbo
$ Modulu 2 (koja je, doduše, kratko vreme i postojala pre nego
$ što su videli da od toga nema 'leba). Oni su uzeli dobre ideje
$ iz Module i odbacili celinu, koja je slaba.
Opet pročitaj repliku ppekovic-u. Sami bi sebi pravili konkurenciju.
To je ustvari i dobro što se desilo, jer tada je nastao i JPI i
napravio pravu stvar :).
Pozdrav, stomic@hobbiton.
cccc.486stomic,
$ Ti Turbo Pascal juniti su samo najgora moguca zakrpa da bi TP
$ bio upotrebljiv kompajler s obzirom da nema obj & lib.
Sasvim se slažem :). Ali to je, moraš priznati, i izvuklo TP,
inače bi ga pregazilo vreme :). Zamisli OOP u TP-u bez unit-a :).
Pozdrav, stomic@hobbiton.
cccc.487stomic,
$ Cekaj, na Moduli moras da pises velika / mala slova a kod
$ nekog drugog kompajlera MOZES ali NE MORAS. Meni je bilje ovo
Time što MORAŠ u M2 je pokušaj da se prekine haos u pisanju
programa. Npr. ako ja od X dobija Modula-2 sors a ti od Y
C source, šta misliš ko će pre razumeti tuđi sors (podrazumevajući
da nam je znanje isto i podrazumevajući da su X i Y potrošili
isti napor za pisanje čitljivog koda) :)).
$ razlike velika./mala slova, pa teraj kako ti se svidja. Ima li
$ to JPI M2? Pre nije imala.
Što bi imala kada to onda ne bi bila Modula-2.
$ Po cemu je bolja, Borland paskal ima sve sto ima i modula,
$ plus jos integrisani debager koji para vredi!
Probaj pa ćeš videti :). Isto sve kao i kod Borlanda (izuzimajući
napadnu šminku) i plus gomila integrisanih utility-a. Mada nema
integrisan debuger, ali on postoji kao eksterni program koji se
dobija za iste pare, znači nema doplaćivanja kao kod Borlanda za
TD (istina TD jeste bolji).
Pozdrav, stomic@hobbiton.
cccc.488stomic,
$ Da manem zezanje, kakva Modula 2, kakav Pascal, Pascal
$ je mozda dobar za ucenje programiranja a Modula 2 ni za to, C
$ je jedini jezik opste namene sa kojim se radi posao. Izuzimam
Super, ti si genije :).
$ CLIPPER itd koji smatram za generator aplikacija a ne za pravi
$ jezik. Pitajte me u cemu su pisani cak i Turbo Pascal, Modula 2
$ i ostali slavni jezici? U c-u, naravno kad se cak i sam c pise
$ u c-u :)
1. Oko Clipper-a se slažemo.
2. Turbo Pascal i Modula-2 NISU pisani u C-u.
3. Da se jezik piše na istom jeziku je standardna pojava.
Opet se uključuješ u diskusiju a da nisi pročitao prethodne poruke.
Ovo ti je već 2-3 put :).
Pozdrav, stomic@hobbiton.
cccc.489janko,
> Ovde da zastanemo. Lično smatram da je M2 dobar jezik, ali
> ni jedan jezik (mislim na ove jezike opšte namene) ti ne
> može drastično pomoći, možda samo olakšati neke delove.
Može, može... Dovoljno je jedno veliko slovo i dva plusića
pored... ;)
Ili, ako stvarno rešimo da budemo manje subjektivni, što smo
onda uopšte raspavljali ovoliko? ;) Što su neki zastupnici
Module bili tako ratoborni?
cccc.490janko,
> Ů> ne pamtim kada sam poslednji put
> Ů> deklarisao bilo globalnu bilo static promenljivu... a
> Npr. imaš sors od ZMODEM-a, i kada ga izkompajliraš radi.
> Onda rešiš da napraviš od toga biblioteku. E, ona mora
> biti reentrant. Što znači nix globalne promenljive, a mora
> podržavati i više "instanci"
> žalost. E, da ne bih kada dođe vreme da svoje module tako
> krpim mislio o sebi ono što sam tada mislio o njima, lepo
> uvek sve pišem da bude reentrant, tj. sve je lokalno, sve
> na steku, sve može da ima proizvoljan
Ma, okej, ali, jednostavno, ima stvari koje ZNAŠ kako ćeš
koristiti. I ne želiš da komplikuješ (valjda)? I kažeš "sada
radim ovoliko, a kada budem morao, radiću dalje." Pa valjda
imamo samo jedan život, a kada bismo krenuli da sve "isterujemo
do kraja," gde bismo stigli? Verujem da se u svemu može
preterati, pa i u generalizaciji. :) I ja se zaletim nekad pa
počnem da preterujem u tome, i obično me "prizemlji" jedan moj
drug, koji, po meni, čak preteruje sa "ignorisanjem suvišnog."
cccc.491janko,
> $ Ton ti je takav da skoro ne zavređuje ni odgovor.
> Poslednji
> Za ton vas dvojica raspravite ;). Što se tiče odgovora
> mislim da je OK. Pričalo se o slobodi korišćenja pointera.
Bogami, nije. Miro (je l' on autor poruke?) je hteo da se priča
o tome. I još je pričao "zoljom." ;) A mogao je da napravi, da
je umeo, lepu poruku u kojoj bi izložio osobine Module na koje
bi želeo da skrene pažnju...
Ja sam rečenicu pre pominjao TRI jezika, od toga jedan koji ima
izuzetno restriktivnu upotrebu pointera (Ada) i nak koga se
najviše odnosila sledeća rečenica, što je svakome ko dovoljno
zna jasno; u čitavom tekstu pominjao različite osobine
RAZLIžITIH jezika; NIGDE posebno nisam pominjao Modulu... Da ne
navodim dalje. Moja poruka je tu, pa je lepo pročitajte... Ni
ti nisi, namerno ili slučajno, citirao ceo moj pasus, pa se
smisao gubi...
No nemoj da misliš da sam mnogo pogođen zbog toga... takve
reakcije su uobičajene na Sezamu... Jednostavno, onog trenutka
kada nešto napišeš, moraš da budeš spreman da ti može svako
svašta napisati kao odgovor... Kao što kad daš oglas "prodajem
pianino" može da ti se javi i neko ko će da te pita "a jel' to
koncertni?" Sve ide u "rok službe," rekli bi neki...
cccc.492bdm.,
##> npr. ceo Hobbiton BBS je napisan u M2
##
## Eto, jos jedan dokaz koliko je Modula 2 inferiorna u
## odnosu na C :>>
:)))
Prvo upoznaj Hobbiton pa ga tek onda poredi sa Sezam-om, a da
si to uradio video bi koliko je Dragišin software (napravljen u M2)
moćniji od ovog pod kojim trči Sezam.
Sorry svima, morao sam replicirati na ovu "inferiornost" i dalju
raspravu (ne plašim se) možemo voditi, ali u nekoj drugoj konferenciji.
BDM.
cccc.493bdm.,
## nekog drugog kompajlera MOZES ali NE MORAS. Meni je bilje ovo
## drugo, da mogu ako hocu a ako necu tj. ocu brze da kuckam, kompajler
## me ne tera!
Ne znam meni baš odgovara to što mora, kad uzmem da pogledam tuđi
kod a ono sve mala slova, pa još loše nazubljeno... :(
A što se tiče brzine kucanja i taj problem se lako može rešiti sa
SHIFT-F7, dovoljno je samo jednom da otkucaš ispravno i posle... :)
## Po cemu je bolja, Borland paskal ima sve sto ima i modula,
## plus jos integrisani debager koji para vredi!
Pa sad editor je moćniji, integrisani GREP, redirekcija datoteka kroz
.RED (samo ovo mi je dovoljno:), pomoć oko ASCII kodova, lepši mi je na
izgled :), itd. U jednu okolinu su ti spojeni Pascal, C, Asembler svaku
rutinicu ko od šale povežeš.
A što se tiče VID-a nije integrisan ali jeste moćniji (Dejan bi ga sam
uporedio sa TD-om mada je meni to malo nepošteno)
BDM.
cccc.494miro,
ű>>> C i Clipper... Ti si stvarno nesretnik:)).
ű>
ű> Eh... od Clipper-a i C-a se živi :)
Kako da ne:), vidim po sebi:))
cccc.495miro,
ű> Piše da ostavljaju programeru preveliku slobodu, da je sistem
ű> podložan greškama u slučaju nepažnje, da je #include/prototipi
ű> mehanizam jednostavan i zastareo. Ništa od toga ne smatram
ű> manama C/C++ već odličnim rešenjima (nasuprot Moduli-2 gde se
ű> toliko preteralo u simetriji da je dobijen jezik koga,
Molim te pojasni mi o kakvom pretjerivanju u simetriji govoriš.
ű> objektivno, ljudi jednostavno ne žele da koriste).
Objektivno, nema šta. Tačno ko i ovo 'perfektno' ispod. Što se
tiče toga šta ko želi ili ne želi da koristi, ja isto tako mogu
da tresnem da niko ne koristi C i da mi se, naravno, pola ljudi
ovdje slatko nasmije, kao što smo se na ovo nasmijali mi koji
koristimo M2.
Inače, od ljudi koji ovdje zovu mogu da nabrojim desetak njih
koji ozbiljno koriste M2.
Mislim da je mnogo važnije pitanje produktivnosti koju
omogućava jedan ili drugi pristup. Da li ograničenja koja
postavlja M2 smanjuju vrijeme dibagiranja, kao što slobode koje
daje C to povećavaju? Između ostalih stvari.
Dalje, koliko ljudi ovdje je napisalo program od 10,000+
linija u Cu. I koliko je to trajalo? Excluding zz za koga svi
znamo, a znamo i koliko je trajalo.
ű>> ...pa reci kako to rješava ANSI C.
ű>
ű> Perfektno.
Kad ti kažeš... A čime bi to potkrijepio? Ajde daj jedan dobar
primjer kako tebi ti hederi pomažu, a zauzvrat dobijaš nekoliko
DEFINITION MODULE-ova:)
cccc.496miro,
ű> Imam utisak da ti je iz poruke u poruku postajalo sve manje
ű> zabavno...
Pa naravno kad ljudi pišu o stvarima koje ne poznaju.
ű> sažetiju sintaksu, operatore nad bitovima (uvek se lepim za
ű> njih ali šta
Da, ali to ima i Modula. Istini za volju, nije u standardu, ali
SVE implementacije koje sam vidio u zadnjih par godina to imaju.
Pošto si jedan od ljudi koji zna šta radi i piše, ajde ako ti
nije teško napiši koje su to prednosti C(++) koje ga toliko
izdvajaju.
cccc.497miro,
ű> nije kreten da ne uradi ništa pametno za ovo vreme. Module će
ű> preuzeti i C++ kad tad ;). U nekoj svojoj cfront x.y.z verziji
ű> ;).
Pa oni imaju nešto što liči na to. Doduše, samo liči. Uglavnom
nisu čuli za Abstract Data Type i slične stvari, a vidjeli su
klasu pa misle da je to esencija pameti.:))
cccc.498miro,
ű> Turbo Pascal (kompajler) je napisan u čistom asembleru. Inače,
ű> kôd je urađen... maestralno. Tip koji je to radio je tako
ű> dobro napisao TPC da mu stvarno skidam kapu (jes' da nikad ne
ű> nosim kapu, al ajd sad ;). On je takođe napisao i prve verzije
ű> Turbo Linkera, a poznato je koliko je bio brži od ostalih.
Ajde reci i njegovo ime ako ti nije teško...
cccc.499miro,
ű>> npr. ceo Hobbiton BBS je napisan u M2
ű>
ű> Eto, jos jedan dokaz koliko je Modula 2 inferiorna u
ű> odnosu na C :>>
ű> Da manem zezanje, kakva Modula 2, kakav Pascal, Pascal
ű> je mozda dobar za ucenje programiranja a Modula 2 ni za to, C
Radiš li ti šta u životu osim što repliciraš nama? I baš si se
uključio gdje treba, kad treba i kako treba? I gdje su tvoja
ostala remek djela od poruka da i njih vidim.
Šta ti dođe Ilija Matić?
cccc.500miro,
ű> Bogami, nije. Miro (je l' on autor poruke?) je hteo da se
ű> priča o tome. I još je pričao "zoljom." ;) A mogao je da
ű> napravi, da je umeo, lepu poruku u kojoj bi izložio osobine
ű> Module na koje bi želeo da skrene pažnju...
1. Piše dragisha
2. Na pričanje 'zoljom' se pobunio niko drugi nego janko. Treba
li da radim search kroz poruke od prije godinu dana kada si mi na
poruku u kojoj sam ti pokušao pomoći odgovorio 'dokle ćeš da se
blamiraš' i slično. Koliko ljudi si dočekao na nož, a sad ti
smeta takvo nešto?
3. Da li sam umio ili ne, manje je bitno. Smisao moje poruke i
nije dokazivanje prednosti Module 2, više skretanje pažnje na
nepoznavanje materije jednoga koji je pisao o 'prednostima' nekog
drugog jezika.
ű> RAZLIžITIH jezika; NIGDE posebno nisam pominjao Modulu... Da
ű> ne navodim dalje. Moja poruka je tu, pa je lepo pročitajte...
ű> Ni ti nisi, namerno ili slučajno, citirao ceo moj pasus, pa se
ű> smisao gubi...
Napravio si mesa za repliku u svakom slučaju. Nisi ni trebao da
spominješ nešto što ne poznaješ. Ja npr. nikada ne pišem o Adi
jer je moje poznavanje iste više nego površno. Pišem o onome što
znam, za razliku... jel...
cccc.501miro,
ű> u svakom jeziku ima dobrih ideja. Ali, jezik se ipak posmatra
ű> kao celina. Da je Borland, recimo, smatrao da je Modula 2
ű> dobra i praktična kao jezik, ne bi pravio paskal nego bi
ű> pravio Turbo Modulu 2 (koja je, doduše, kratko vreme i
ű> postojala pre nego što su videli da od toga nema 'leba). Oni
ű> su uzeli dobre ideje iz Module i odbacili celinu, koja je
ű> slaba.
Zaboravljaš da bi Modula-2 ubila više nego dobar proizvod Turbo
Pascal, a kojom bi logikom trebao ići Borland da to napravi.
JPI je napravio čovjek koji je otišao iz Borlanda između
ostalog zbog neslaganja oko dalje strategije firme.
ű> A to za module... nije baš novitet Module 2, postojalo je još
ű> u starom dobrom fortranu, jedino što je ovom prilikom izdvojen
ű> opis funkcija u poseban modul, koji je kod Module 2 baš
ű> dibiduz poseban, a kod Turbo Pascala je samo stavljeno na vrh
ű> unit-a, u INTERFACE sekciju. Lično smatram da je Turbo Pascal
ű> rešenje praktičnije.
Modul koji ima Modula-2 je koncept iz Simule koji je nešto
kasnije uzeo i C++. To što je imao Fortran ima i svaki asembler,
a ovo ipak nema svako. To što ti to dvoje porediš pokazuje da baš
ne shvataš o čemu se radi.
ű>>> Što se tiče Oberona-2, kažu da ima trenutno najjači OOP.
ű>>> Mada još ne postoji dovoljno jaka implementacija ovog
ű> jezika.
ű>
ű> To je baš to što kažem - Virt se bavi teorijom programiranja i
ű> smišlja jezike sa nekim novim elementima, a praktična
ű> realizacija toga mu nije
A najveći broj ljudi koji se bave Oberonom-2 sasvim slučajno
ima adresu koja završava na apple.com.
cccc.502miro,
ű> Zašto ne bismo koristili ono što najbolje odgovara problemu
ű> koji rešavamo? Insistiranje na JEDNOM jeziku za SVE je glupo.
ű>******
ű>
ű> Welcome to the club! Ovo pričam od početka rasprave. B)
ű>
Jes vala. I tu se srećemo kod tvog izbora Turbo Ca zbog toga
što je pružao više i tako to. A ja radim sa alatom koji mi
omogućava da C, C++, Pascal kod ulinkujem sa M2 dok si reko keks.
Znači, kad (bolje reći ako ikad) mi zatreba neki drugi jezik, tu
smo. Na tvom argumentu.
Do sada, a programiram desetak godina i za to vrijeme sam
napravio nekoliko stotina hiljada linija koda, nije mi zatrebalo
ništa drugo od onoga u čemu sam trenutno radio. Prvo je to BIO
UCSD Pascal, zatim Turbo Pascal da bi prije pet-šest godina
poslije malo zamajavanja sa Logitech Modulom-2 prešao na JPI.
BTW, Logitech dibageri su najbolji s kojima sam se ikad sreo.
cccc.503miro,
ű> $ Dobro i kažeš. Zato je najbolje koristiti onaj koji
ű> ima $ najbolje implementacije, podršku u obliku knjiga,
ű> $ biblioteka, gomile korisnika, zatim onaj koji je
ű> standard $ na operativnom sistemu sadašnjosti i budućnosti,
ű> unix-u.
ű>
ű> Dobro i ti kažeš :). To je jedan jedini razlog (unix) zašto
ű> bih koristio C -- da 'preživim' dok se ne pojavi M2 :).
Ne moraš više. Skinuo sam generički Modula to C kompajler.
Ima dvije verzije izvornog koda. Prva je asembler, pardon C, a
druga je M2.
cccc.504miro,
ű> najbolje bilo da ima kao na vaxu svich kojim ukidas ili
ű> ukljucis razlike velika./mala slova, pa teraj kako ti se
ű> svidja. Ima li to JPI M2? Pre nije imala.
Kao ti si probao?:))
Inače, okolina ima fazon za automatsko uperkasiranje:)). Kad to
uključiš onda ti samo kuckaš a on konta šta je rezervisana riječ
i uperkaseuje.
Ima i u editor ugrađen sintaksni analizator tako da kad pozoveš
kompilaciju on prije nego učita overlay provjeri sintaksu
(munjevito) pa te opomene i prije vremena. I još mnogo mnogo
toga.
ű> Po cemu je bolja, Borland paskal ima sve sto ima i modula,
ű> plus jos integrisani debager koji para vredi!
Borland okolina do dana današnjeg ne omogućava da edituješ
jedan file u dva prozora a da se ne zajebeš* pri tome. JPI to ima
par godina.
cccc.505dejanr,
>> Zaboravljaš da bi Modula-2 ubila više nego dobar proizvod Turbo
>> Pascal, a kojom bi logikom trebao ići Borland da to napravi.
Zamenila bi ga jednim takođe Borlandovim proizvodom koji bi, po tebi,
bio još bolji, dakle još konkurentniji. Ne verujem da bi im to bilo
baš toliko neprivlačno. Međutim, oni su uradili bukvalno najbolju
stvar, uzeli su ono što je valjalo iz Module, poboljšali paskal i
napravili jedan i dalje "više nego dobar" proizvod zvani TP 4.0.
>> JPI je napravio čovjek koji je otišao iz Borlanda između
>> ostalog zbog neslaganja oko dalje strategije firme.
Naravno, tako to obično biva, i dobro je što je tako :) žovek je
napravio JPI, par dobrih proizvoda, ali ne bih rekao da je uspeo
ozbiljnije da se približi Borlandu po bilo čemu.
>> > A to za module... nije baš novitet Module 2, postojalo je još
>> > u starom dobrom fortranu, jedino što je ovom prilikom izdvojen
>> > opis funkcija u poseban modul, koji je kod Module 2 baš
>> > dibiduz poseban, a kod Turbo Pascala je samo stavljeno na vrh
>> > unit-a, u INTERFACE sekciju. Lično smatram da je Turbo Pascal
>> > rešenje praktičnije.
>>
>> Modul koji ima Modula-2 je koncept iz Simule koji je nešto
>> kasnije uzeo i C++. To što je imao Fortran ima i svaki asembler,
>> a ovo ipak nema svako. To što ti to dvoje porediš pokazuje da baš
>> ne shvataš o čemu se radi.
Naprotiv, pokazuje da ja to poredim na nivou onoga što jeste, a ne
na nivou toga kako se zove. Mnogi su skloni tome da kad se pojavi neko
novo ime, odmah smatraju da je to neka nova stvar. A nove stvari se
retko pojave. Da li ćeš deklaraciju jedne procedure napisati na početku
procedure, na početku procedure i na početku modula, ili na početku
procedure i u drugom modulu, to i nisu tako krupne razlike da bi ih
nazvao tako bombastim rečima :) To su dodaci, da bude malo lakše, a od
nekih od njih onda ispadne i malo teže.
cccc.506dejanr,
>> Turbo Pascal (kompajler) je napisan u čistom asembleru.
Da li si siguran da se ovo odnosi na kasnije verzije TP-a (na
prve se sigurno odnosi, jer onda nije bilo alata da se piše
u nečem drugom ;) U jednom od propagandnih materijala koje sam
dobio uz beta verziju BP 7.0 je i lista nekakvih pitanja i
odgovora o BP-u, i jedno od pitanja (mrzi me sad da tražim,
ali otprilike) je "kada je već BP tako dobar, zašto ga Borland
ne koristi za razvoj softvera" a odgovor je "Borland za razvoj
kompajlera koristi Borland C, ali uskoro će predstaviti jedan
bitan proizvod razvijen na Borland Pascalu". Ne rekoše, naravno,
kad je to "uskoro" i koji je to proizvod ;)
cccc.507dejanr,
>> Dalje, koliko ljudi ovdje je napisalo program od 10,000+
>> linija u Cu. I koliko je to trajalo? Excluding zz za koga svi
>> znamo, a znamo i koliko je trajalo.
ZZ možda ima bolju statistiku, ali koliko mene sećanje služi,
prva verzija Sezama je puštena u pogon otprilike za 50 dana (u koje
vreme računam i evaluaciju postojećeg softvera, koncipiranje, pisanje
i testiranje (posle je nađeno začuđujuće malo bagova) kompletnog
programa i pripremu dokumentacije) i rezultirala aplikacijom od oko
9000 linija sorsa u C-u 5.1. U proseku, to je oko 180 linija dnevno.
Mene dosta zanima to pitanje koliko vremena je potrebno da bi se
napisao neki program, koliko linija se dnevno napiše, koliko je
vremena potrebno za debagovanje i tako to. Teorijski, kažu ljudi,
10-15 linija koda dnevno je jako dobar rezultat, međutim meni je
to uvek izgledalo dosta malo.
Nedavno je završen jedan ne baš previše praktično upotrebljiv ali
meni zanimljiv projekat "Simulator raspodele vršnih opterećenja u
elektroenergetskom sistemu Jugoslavije". Laički rečeno, radi se
o problemu šta se dešava kada neka elektrana neočekivano ispadne
iz pogona i kako bi se, u slučaju lančanog ispadanja termoelektrana
zbog promene frekvencije u mreži, mogao automatskom regulacijom
potrošnje sprečiti raspad energetskog sistema. Projekat je (to je,
valjda, obavezno da se kaže ;) delimično finansirao Republički fond
za razvoj nauke (ako u međuvremenu nije promenio ime, nekadašnja
Republička zajednica nauke).
Rezultat tog projekta je, formalno govoreći, jedan simulator pisan
na VAX11 C-u od oko 17,000 linija izvornog koda, baza podataka reda
4 megabajta (izgleda mnogo jer su polja fiksne dužine, u stvari je
to dosta manje podataka za kucanje, ne znam tačno koliko) i izveštaj
od oko 170 strana (ne računajući tu listing programa). Na projektu
su radila tri čoveka (Danko Matković, Igor Grubišić i moja malenkost)
plus jedna sekretarica (Maja Krunić) koja je "podnela" unos podataka,
kuvanje kafe (koju ja ne pijem ;) i donošenje coca cole (dok nije
počela da prelazi na koktu, fuj). Formalno govoreći, projekat je
trajao 9 meseci (i nešto više) ali u realnosti je trajao oko 3 meseca.
Pri tome sam se ja više bavio koncepcijom samog simulatora tako da
sam napisao najviše 2000 linija koda, dok su dvojica kolega napisala
otprilike podjednako, dakle po 7-8000 linija. Izveštaj smo pisali
"na ravne časti", po 50-tak strana. U to vreme od tri meseca računam
i testiranje simulatora, izvršavanje i tumačenje rezultata ("glede"
tumačenja, bolje da ne znate šta je protumačeno, praktično jedini
izvodljiv način da se spreči raspad sistema je da se Beogradu po
kratkom postupku secne struja, pošto je to jedino što se dovoljno
brzo može učiniti ;( ). Pri tome je, dakle, jedan programer radio
dnevno 80-tak linija, računajući tu i subote i nedelje kad se nije
radilo. A svi smo za to vreme radili i druge privatne poslove ;)
Evo i rezultata za jedan moj program na Clipper-u 5.01 koji je iz
raznih razloga pisan "od nule" (hteo sam da probam neke tehnike
različite od onih koje inače koristim, a prilika je bila zgodna i...)
Radi se o programu za izdavanje karata za auto vozove. Posao je trajao
od 9. februara do 18. marta (pri čemu za to vreme nisam samo to radio,
napisao sam i jedan umetak i još razne tekuće stvari, ali svejedno,
recimo da je samo to). Program ima 5850 linija na Clipper-u i 408
linija asemblera, sve skupa preko 160 linija na dan.
Bilo bi zanimljivo čuti i druge rezultate, ako neko vodi statistike.
cccc.508spantic,
> žekaj, na koju foru? Pa morao je prvo da bude
> iskompajliran (ili interpretiran, svejedno) na
> nečem drugom... Ili na prethodnoj verziji samog
> sebe... Ali od sorsa do izvršnog programa mora da
> postoji još nešto.
U QL si dobijao integrisan OS i SuperBASIC interpretator. Oni su na njemu
napisali prevodilac za isti i jednostavno prvo njega samog preveli. To je
uradila nezavisna programerska kuća, da me ubiješ ne znam tačno koja, davno
je to bilo.
cccc.509.obj,
> Molim te pojasni mi o kakvom pretjerivanju u simetriji govoriš.
Simetrijom sam nazvao Wirthovo čistunstvo koje, po meni, ide u ekstrem.
Ja bogami neću da se zajebavam sa FROM IMPORT bez obzira šta on pričao
o modulima i apstrakciji podataka.
> Što se tiče toga šta ko želi ili ne želi da koristi, ja isto tako mogu
> da tresnem da niko ne koristi C i da mi se, naravno, pola ljudi
> ovdje slatko nasmije, kao što smo se na ovo nasmijali mi koji
> koristimo M2.
Molim te da sniziš ton. Odavno nigde nisam pročitao tako agresivne
poruke kao što su tvoje. Pošto čujem da na Hobbiton prebacujete Usenet
grupe, možda ne bi bilo loše da sa vremena na vreme i pročitaš po koju
i malo se naučiš toleranciji (kao primer onoga kako ne treba da pišeš
možeš, na primer, da uzmeš "Nemate pojma", "NE, ne znaš!").
> Dalje, koliko ljudi ovdje je napisalo program od 10,000+
> linija u Cu. I koliko je to trajalo? Excluding zz za koga svi
> znamo, a znamo i koliko je trajalo.
Očigledno misliš da je 10000 linija puno. Ja ne mislim da je to toliki
broj da možeš da kažeš "koliko je ljudi ovde...?", čak šta više, ja
mislim da se ta cifra dosta brzo dostiže (u C-u pogotovo, a za asembler
10000 linija nije ništa).
> Inače, od ljudi koji ovdje zovu mogu da nabrojim desetak njih
> koji ozbiljno koriste M2.
Deset? U jeee... ;)
> Mislim da je mnogo važnije pitanje produktivnosti koju
> omogućava jedan ili drugi pristup. Da li ograničenja koja
> postavlja M2 smanjuju vrijeme dibagiranja, kao što slobode koje
> daje C to povećavaju?
To mi liči na ono "pare decu kvare". Mene nisu pokvarile ;)
> Kad ti kažeš... A čime bi to potkrijepio? Ajde daj jedan dobar
> primjer kako tebi ti hederi pomažu, a zauzvrat dobijaš nekoliko
> DEFINITION MODULE-ova:)
Hvala lepo. Hederi omogućavaju da (potencijalno vrlo velik) program
držim pod kontrolom bez mnogo gnjavaže i umora. Moj princip je dosta
sličan onome što je naveo C-CASE (nikako da mu zapamtim ime;) (tj.
svaki .C ima .H, mali modulčići itd.), sa tim što u tom načinu rada ne
vidim ništa "tricky" i strašno.
cccc.510.obj,
> Pa sad editor je moćniji, integrisani GREP,
Zar čika-C-CASE ne kaže da korištenje grep-a dobar znak da sa
strukturom programa nešto nije u redu? Kako li su samo smeli da dozvole
programeru da koristi grep, pa sve to još integrisano? Ccc... samo zbog
toga sam odustao od Module-2. Možda će u Moduli-6 biti zabranjeno
integrisanje grepa u editor?
Npr. u komandnoj liniji otkucaš grep, a kompajler (rezidentni, vreba
svaku tvoju akciju):
M2C: Fatal: Expected anything but grep. Shutdown by system request.
cccc.511.obj,
>>> Turbo Pascal (kompajler) je napisan u čistom asembleru.
>
> Da li si siguran da se ovo odnosi na kasnije verzije TP-a (na
> prve se sigurno odnosi, jer onda nije bilo alata da se piše
> u nečem drugom ;)
Pa piše gore :) da je *samo* kompajler (i integrisani linker) napisan u
asembleru. Za ostalo ne mogu da tvrdim, ali mi se čini da je barem deo
TP6 integrisane okoline napisan u TP6 Turboviziji.
cccc.512.obj,
> Ajde reci i njegovo ime ako ti nije teško...
To, na žalost, ne znam. Svojevremeno sam sourcerovao TPC.EXE. Na dosta
mesta u programu mogu se naći inicijali FB. Jedino takvo ime u vezi sa
Borlandom koje mi pada na pamet je Frank Borland. Međutim, njegovo ime
se ne nalazi u listi ljudi koji su napravili Turbo Pascal for Windows
(a kompajler je *veoma* sličan) tako da nisam siguran.
Ako ti ovo nešto znači, autori TPW su: Alex Shtaygrud, Anders
Hejlsberg, Bonnie Cohen, Bret Gillis, Charles Jazdzewski, Chopin Yen,
Christine Phan, Danny Thorpe, Dave Wilhelm, Eberhard Waiblinger, Eric
Swenson, Gary Whizin, Jon Howell, Jorrie Ciotti, K.A. McCord, Lars
Frid-Nielsen, Laura Grenyo, Linda Jeffries, Loan Pham, Meg Forgerson,
Michelle M. Manning, Mike Weisert, Nancy Wood, Paul Fussel, Peter Eden,
Richard Nelson, Rob Powell, S. JeyaRajan, Sidney Markowitz, Steve
Drake, Tamra Selfridge, Vikki Cacace, Zack Urlocker.
cccc.513dejanr,
>> Svojevremeno sam sourcerovao TPC.EXE. Na dosta mesta u programu mogu
>> se naći inicijali FB. Jedino takvo ime u vezi sa Borlandom koje mi
>> pada na pamet je Frank Borland.
Dobra asocijacija, samo je zanimljivo pitanje da li Frank Borland postoji.
Ja sam davno imao neki SideKick u kome je, u Read.Me fajlu, ispričana
nekakva bajka o Franku Borlandu koji je otišao u planinu i tamo u
nedirnutoj prirodi, bla, bla, napisao sidekick. Zvuči kao nekakva bajka,
a taj Frank Borland niti je vlasnik niti je neki viđeni "funkcioner"
firme Borland.
cccc.514dejanr,
Šta mislite da napravimo mali kolektivni test? Da smislimo neki problem i
rešimo ga na sličan način, na (recimo) MS i Borland C-u, Borland Pascalu, JPI
Moduli 2, QuickBasic-u i eventualno još nekom jeziku pa da uporedimo koliko
linija sorsa koji program ima, koliki je EXE fajl, koliko se dugo prevodi i
koliko se dugo izvrsava.
Trebalo bi da bude neki problem numericke prirode koji ce se, recimo na nekom
386/33 (jer to većina ima) izvršiti za 5-6 minuta, s tim što bi trebalo da ima
i nekog muljanja po disku i tako to. Ako ima ideja za problem, ja sam
raspoložen da učestvujem u eksperimentu. Mislim da bismo dobili zanimljive
rezultate kojima se, naravno, ne bi moglo utvrditi da li je neki jezik "bolji"
ili "gori" ali bi se osetilo kakva je koja implementacija itd. Mislim da nas
ima dovoljno da "pokrijemo" sve iole popularne jezike.
cccc.515peca.st,
!-> Lično smatram da je Turbo Pascal
!-> rešenje praktičnije.
Jedino što ne valja kod Turbo Pascalovih Unita je što pravi
.TPU a ne .OBJ :(
Peđa.
cccc.516paki,
> Prvo upoznaj Hobbiton pa ga tek onda poredi sa Sezam-om, a da
> si to uradio video bi koliko je Dragišin software (napravljen
> u M2) moćniji od ovog pod kojim trči Sezam.
> Sorry svima, morao sam replicirati na ovu "inferiornost" i
> dalju raspravu (ne plašim se) možemo voditi, ali u nekoj
> drugoj konferenciji.
Ajde bre više, gušite s tim "Hobiton je bolji"/"Nije, SEZAM je bolji".
cccc.517skerl,
│> Pitajte me u cemu su pisani cak i Turbo Pascal, Modula 2
│> i ostali slavni jezici? U c-u, naravno
│
│ Turbo Pascal (kompajler) je napisan u cistom asembleru. Inace, kôd
│ je uraden... maestralno. Tip koji je to radio je tako dobro napisao
│ TPC da
└────
Cak je i IDE napisan u asembleru, samo izgleda isto kao
Turbo Vision tako da vecina ljudi misli da je u njemu napravljen.
Provereno kod njihovih (Borlandovih) ljudi.
Pozdrav,
Skerl.
cccc.518beast,
>> linija sorsa koji program ima, koliki je EXE fajl, koliko se dugo
>> prevodi i koliko se dugo izvrsava.
Siguran sam da bi pobednik bio paskal (TP 6.0). Daleko je
brži od svih kompajlera koje znam, a EXE je 'tu negde' sa
C-om. U svakom slučaju, podržavam predlog.
cccc.519dejanr,
>> Jedino što ne valja kod Turbo Pascalovih Unita je što pravi .TPU a
>> ne .OBJ :(
Da... slažem se. Samo, Borland kaže da baš zato što je izmislio te
.TPU formate, paskal može da prevodi onoliko brzo koliko prevodi, tj.
višestruko brže od svega drugoga na tržištu. Sve mora da ima neku
cenu.
A ono što bi Borland minimalno mogao da uradi, to je da uniti budu
vertikalno kompatibilni od verzije do verzije. Ali, njima to ne pada
na pamet :(
cccc.520skerl,
│ Cak je i IDE napisan u asembleru,
└─────
Ispravljam sam sebe da ne ispadne posle da sirim
dezinformacije :) Evo kako je to zvucalo u originalu:
In pushing the new TurboVision library that comes with TP6,
Borland advertises that the "Integrated Development Environment",
or IDE, is written using TurboVision. Unluckily for them, the
Editors unit which is distributed with TP6 is very buggy; it was
quickly clear to people that the editor in the IDE and the
Editors unit are two different animals.
When this came out on Compuserve, Borland quickly "clarified"
their claims: only the "user interface" parts of the IDE are
actually written using TV; the Editors unit is a demonstration
only; it's not the actual IDE editor, which is written in
assembler.
Pozdrav,
Skerl.
cccc.521pusa,
> Jednostavno, onog trenutka kada nešto napišeš, moraš da
> budeš spreman da ti može svako svašta napisati kao
> odgovor... Kao što kad daš oglas "prodajem pianino" može
> da ti se javi i neko ko će da te pita "a jel' to koncertni?"
:)))) Ova je dobra! Trebalo bi staviti u upustvo
za sezam :)
cccc.522pusa,
> Ne znam meni baš odgovara to što mora, kad uzmem da pogledam tuđi
> kod a ono sve mala slova, pa još loše nazubljeno... :(
Vidi, ja uglavnom pisem programe da bi radili a ne da
bi ih neko gledao, tako da mi je u centru paznje koliko je meni
lako ili tesko da pisem, a ne kako ce to nekome posle da izgleda
kad ga gleda -ako budem lud pa nekome dam da gleda:))
>## Po cemu je bolja, Borland paskal ima sve sto ima i modula,
>## plus jos integrisani debager koji para vredi!
>
> Pa sad editor je moćniji, integrisani GREP, redirekcija datoteka kroz
> .RED (samo ovo mi je dovoljno:), pomoć oko ASCII kodova, lepši mi je na
> izgled :), itd. U jednu okolinu su ti spojeni Pascal, C, Asembler svaku
> rutinicu ko od šale povežeš.
Ti poredis editor u najnovijoj JPI moduli i neki stari paskal 5.
Jesi li video BP7.0 ili bar TP6.0? Mada bi ja sve to zajedno dao, i
doplatio preko toga, za MSC:))
cccc.523pusa,
Rezime cu da napisem cim stignem. Primecujem da si totalno
ostao bez argumenata pa si presao na insinuacije, ako dobro shvatam
sta si hteo da kazes
Ja sam samo odgovorio salom na tomicevu salu, i stavio
smajli, ti valjda mislis da je u redu kad ti pljuckas druge, ali
kad ti neko malo zakaci tebe i cedo ti, ti se mnogo nakostresis ;))
cccc.524zzivotic,
Kad me pomenuste, iako u exclude modu, da se ipak uključim ;).
>> Mislim da je mnogo važnije pitanje produktivnosti koju
>> omogućava jedan ili drugi pristup. Da li ograničenja koja
>> postavlja M2 smanjuju vrijeme dibagiranja, kao što slobode koje
>> daje C to povećavaju? Između ostalih stvari.
Pitanje produktivnosti je zaista zanimljivo, ali je veliko pitanje da li se
može postaviti na ovaj način. Iz tvog pitanja bi se dalo zaključiti da se
uvođenjem ograničenja programer "tera" da piše čistije i pravi manje grešaka.
To bi moglo da sugeriše i zaključak da programer ne zna baš najbolje šta radi
ili bar da je pisanje programa u C-u toliko teško da niko ne može da se
oslobodi slučajnih grešaka - sa oba zaključka ne bih mogao da se složim.
Pitanje produktivnosti bi moralo da se posmatra u odnosu na problem koji se
rešava a tu poređenje dva jezika opšte namene nema mnogo smisla. Nema
produktivnijeg alata od klipera za, recimo, edit datoteke. Naravno, ne treba
uzimati u obzir postojeće bilioteke jer bi onda došli na sasvim drugi teren -
koliko ih ima za koji jezik, koliko su dobro urađenje, kolika je podrška
proizvođača itd itd. a ta diskusija nema veze sa jezicima.
Meni se čini da pitanje izbora nekog jezika u najvećem broju slučajeva nema
mnogo veze sa "kvalitetom". Može se neobavezno (pa i obavezno :) pisati u
raznim jezicima, menjati proizvođač kompajlera ali profesionalno bavljenje ovim
poslom (mada mnogi pod ovom definicijom podrazumevaju razne stvari za mene ona
znači proizvesti+prodati*N+održavati, pri čemu naravno N teži beskonačnosti ;)
zahteva izuzetno poznavanje alata sa kojim se radi. Stići do tog stepena znanja
je vremenski dug proces i ako nema baš nekog *izuzetno* jakog razloga, ne
verujem da bi se iko usudio da u sred posla promeni jezik, pa čak i samo firmu
koja pravi kompajler.
Dakle, ili će te neko naterati (firma u kojoj se zaposliš) da radiš sa
određenim jezikom, ili ćes ostati na onome što si izabrao u nekom trenutku,
često i zbog tako banalnih razloga kao što su "bolje okruženje" ili "dobio sam
kompletnu dokumentaciju ;)". Za izbor jezika često je presudan i kvalitet firme
koja ga prodaje. Dovedeno do krajnosti - džaba najgenijalniji,
najproduktivniji, naj.. jezika ako je sve što imaš kompajler u verziji 1.0 od
firme "šlj" koja posle godinu dana propada.
Zato mi se čini nemogućim da praktičan programer proceni koliko je neki jezik
produktivniji od drugoga - za njega je, ukupno gledano, ono što koristi
najproduktivnije. Neko ovde pomenu asembler - imao sam prilike da vidim kako i
asembler u rukama čoveka koji ga zna i dugo koristi može da bude produktivan -
naravno opet gledano iz ugla problema koji se rešava.
Prvi jezik koji sam koristio na PC-u je bio TP 1.0 jer u to vreme sve ostalo
nije bilo vredno ni pogleda. Da su se kojim slučajem stvari vremenski drugačije
odvijale i da nisam imao jedan slobodan period da počnem sa C-om, danas bi i
dalje radio na pascalu. Sa njim sam dosta dugo radio, rešavao razne probleme i
mogu sa sigurnošću da tvrdim - *nikakve* razlike u spoljnom izgledu Sezama pa
ni u vremenu potrebnom za razvoj ne bi bile da je sve rađeno na njemu. Mislim
da je ipak preterano tvrditi da postoji relacija jezik->"moćnost programa".
>> Dalje, koliko ljudi ovdje je napisalo program od 10,000+
>> linija u Cu. I koliko je to trajalo? Excluding zz za koga svi
>> znamo, a znamo i koliko je trajalo.
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Baš me zanima koliko je trajalo i šta? ;)
Pozdrav, zz
cccc.525stomic,
$ Vidi, ja uglavnom pisem programe da bi radili a ne da
$ bi ih neko gledao, tako da mi je u centru paznje koliko je meni
$ lako ili tesko da pisem, a ne kako ce to nekome posle da
$ izgleda kad ga gleda -ako budem lud pa nekome dam da gleda:))
I nikada nećeš biti u prilici da radiš timski :)?
$ Ti poredis editor u najnovijoj JPI moduli i neki stari paskal
$ 5. Jesi li video BP7.0 ili bar TP6.0? Mada bi ja sve to zajedno
$ dao, i doplatio preko toga, za MSC:))
Puso obožavam te :). Opet isto... Jesi ti video JPI v3.02 ikada?
Ja jesam TP6.0. Ako si video, iznesi mi šta je to tako dobro u odnosu
na JPI. Izgleda, opet ne poznaješ ono o čemu pričaš (5ti put :).
Pozdrav, stomic@hobbiton.
cccc.526nenadp,
>> Trebalo bi da bude neki problem numericke prirode koji ce
>> se, recimo na nekom 386/33 (jer to vecina ima) izvrsiti
>> za 5-6 minuta, s tim sto bi trebalo da ima
Evo probajte da napisete program koji ce numericki resavati diferencijalne
jednacine. Jedno jednostavano resenje na jeziku Mathematica386 bi izgledalo
ovako :
(** Runge-Kutta Methods **)
BeginPackage["RungeKutta`"]
RungeKutta::usage = "RungeKutta[f, {x, y}, {x0, y0}, h, ntot] gives
ntot {x, y} pairs obtained by integrating the differential
equation y'==f by the fourth order Runge-Kutta method."
Begin["`Private`"]
RungeKutta[f_, {x_, y_}, {x0_, y0_}, h_, ntot_] :=
NestList[RKStep[f, {x, y}, #, h]&, {x0, y0}, ntot]
RKStep[f_, {x_, y_}, {xn_, yn_}, h_] :=
Block[{k1, k2, k3, k4},
k1 = h f /. {x->xn, y->yn} ;
k2 = h f /. {x->xn+h/3, y->yn+k1/3} ;
k3 = h f /. {x->xn+2h/3, y->yn-k1/3+k2} ;
k4 = h f /. {x->xn+h, y->yn+k1-k2+k3} ;
{ xn + h, yn + (k1 + 3k2 + 3k3 + k4)/8 }
]
End[]
EndPackage[ ]
>> linija sorsa koji program ima, koliki je EXE fajl, koliko
>> se dugo prevodi i koliko se dugo izvrsava.
E sada mogao bi da se opkladim da ni na Moduli ni na C - u ( i ako neznam
ni jedan od ta dva jezika :)) ili nekom drugom jeziku gornji program nebi mogao
da se napise bez stotinjak linija koda i ne samo to ako pogledate gornji
program videce, cak i ako neznate da programirate u Mathematici, da taj
program kao da je prepisan iz neke knjige za matematiku dakle nema nikakvog
programskog zongliranja.
E sada ako ocekujete da osnovu toga zakljucim da je Mathematica bolja od svih
programskih jezika toliko blesav nisam ;)) jednostavno jezik u kome se
programira je dobar onoliko koliko moze da sluzi svrsi a to je sto lakse i
sto brze napisati program koji zadovoljava potrebe programera. Dakle ja
sigurno necu pisati baze podataka u Mathematici ali isto tako nemam nameru
da pisem program za racunanje Beselovih funkcija u Clipper - u ili C - u.
Posto se vec duze vreme neckam da naucim C ++ ( mnogo me podseca na
Matehematic - u, inace i sama mata je napisana na C ++ ) zeleo bi da cujem
argumentovanu diskusiju o Moduli, C ++ ili C - u i njihovom medjusobnom odnosu
po brzini, lakoci programiranja, raspolozivim kompajlerima itd.
Zato i podrzavam ovaj Dejanov predlog da ljudi koji stvarno znaju jedan od
gornjih jezika ilustruju kako bi se neki problem resio na tom konkretnom
jeziku.
Jasno nemora biti gornji primer nego neki koji ce omoguciti da mane ili
prednosti nekog jezika dodju do punog izrazaja.
Pozdrav, Nenad
.P.S. Za one koji nisu na osnovu gornjeg primera skuzili ovde nenadp.
Inace da je Mathematica kompajler pisao bi ja i baze podataka u njoj ;>>>
cccc.527janko,
> 1. Piše dragisha
OK. A gde je Miro? I šta bi sa tvojim korisničkim imenom?
Stvarno nisam znao sa kim diskutujem.
> 2. Na pričanje 'zoljom' se pobunio niko drugi nego janko.
> (...)
> poruku u kojoj sam ti pokušao pomoći odgovorio 'dokle ćeš
> da se blamiraš' i slično. Koliko ljudi si dočekao na nož,
> a sad ti smeta takvo nešto?
:) Naravno, i ja umem da pređem tuđi "prag prijema." "Ko je
čist, neka se baci kamenom," što kažu. Zato se trudim da se ne
"bacam kamenjem" previše. Ali nekad mi skoro sam kamen padne u
ruku...
> nije dokazivanje prednosti Module 2, više skretanje pažnje
> na nepoznavanje materije jednoga koji je pisao o
> 'prednostima' nekog drugog jezika.
> ű> RAZLIžITIH jezika; NIGDE posebno nisam pominjao Modulu...
> spominješ nešto što ne poznaješ. Ja npr. nikada ne pišem o
> Adi jer je moje poznavanje iste više nego površno. Pišem o
> onome što znam, za razliku... jel...
Budi pošten, pročitaj ponovo moju poruku, pa svoju, i priznaj
da sam ja u tekstu pominjao TRI, grubo rečeno, paskal-lajk
jezika (jedan od njih je Ada) i još DVA druga jezika (C i C++).
Rečenicu pre one na koju si reagovao "svim sredstvima" pominjem
prva tri. U rečenici na koju si reagovao kažem "Određena
sloboda u pointerima je neophodna." Ti na osnovu toga
zaključuješ da ti ja time napadam milu ti i dragu Modulu...
a samo je moj stav o tome koliko slobode u korišćenju pointera
smatram da je potrebno jeziku...(*) Ti si, jednostavno, od
generalnih stavova zaključio ono što si najviše želeo da
zaključiš... ne kažem da je namerno... to radi podsvest...
možda te je šef nervirao, možda te je neko gazio u autobusu,
možda ti žena nije ispunila želje, itd. itd.
cccc.528janko,
> Jes vala. I tu se srećemo kod tvog izbora Turbo Ca zbog
> toga što je pružao više i tako to. A ja radim sa alatom
> koji mi omogućava da C, C++, Pascal kod ulinkujem sa M2
> dok si reko keks. Znači, kad (bolje reći ako ikad) mi
> zatreba neki drugi jezik, tu smo. Na tvom argumentu.
Neće tebi nikad zatrebati drugi jezik, jednostavno zato što si
previše isključiv. Gde su koreni te isključivosti, stvarno ne
znam. Kada bi imao dobar auto, da li bi odbijao da sedneš u
neki drugi model?
Kao što su učesnici u diskusiji već primetili -- SVE se može
napisati i na asembleru. Ali ja, jednostavno, nemam nameru...
cccc.529janko,
> Šta mislite da napravimo mali kolektivni test? Da smislimo
> neki problem i
> Moduli 2, QuickBasic-u i eventualno još nekom jeziku pa da
> uporedimo koliko linija sorsa koji program ima, koliki je
> EXE fajl, koliko se dugo prevodi i koliko se dugo
> izvrsava.
> Trebalo bi da bude neki problem numericke prirode koji ce
> se, recimo na nekom 386/33 (jer to većina ima) izvršiti za
> 5-6 minuta, s tim što bi trebalo da ima i nekog muljanja
> po disku i tako to. Ako ima ideja za problem, ja sam
> raspoložen da učestvujem u eksperimentu. Mislim da bismo
> dobili zanimljive
Ako poredimo brzine izvršavanja, intenzivan numerički problem
će daleko više da testira kvalitet FP emulatora (pogotovu na
386)... Npr. TP ima, između ostalog, format brojeva koji radi
brže, ali nije IEEE, pa poredeći TP sa njegovim 5-to bajtnim FP
i C sa IEEE formatima, nećemo zaključiti nešto pametno...
Ako se već reši da se realizuje numerički algoritam, onda
preporučujem da se koristi na SVIM kompajlerima isti (IEEE)
format u istoj preciznosti (preporučujem DOUBLE) i da se
merenja brzine izvršavanja rade isključivo na 486DX procesoru,
koji ima ugrađen FP koprocesor.
cccc.530ficus,
Hi jedno pitanjce (ako neko ima vremena pored ove zustre raspravice)
dali ja mogu normalno da koristim fprintf u binarnim fajlovima.
mislim da mi generise normalan izlaz za bin. fajlove 4 bajta za long int itd
u knjigama uglavnom nista ne pise (jer unix ne pravi razliku izmedju bin i text
fajlova) delovalo bi logicno da su fprintf napisali da obrati paznju na tip
fajla i prema tome se ponasa ali u praksi se pokazalo drukcije. Mislim znam da
moze i lepse sa write-om da mu smestim celu strukturu u fajl ali mene zanima
moze li ovo na neki nacin da proradi.
P.S. Negde gore procitah tvrdnju nekog zastupnika module 2 da on smatra da niko
ne koristi c pa sad donekle je u pravu niko ga ne koristi ljudi predju na c++
;))))
cccc.531bdm.,
## Zar čika-C-CASE ne kaže da korištenje grep-a dobar znak da sa
## strukturom programa nešto nije u redu? Kako li su samo smeli da dozvole
## programeru da koristi grep, pa sve to još integrisano? Ccc... samo zbog
Smanji i TI ton diskusije, zašta se kao zalažeš!
Odkud ti znaš zašto sam ja koristio Grep? Veruj mi ne za menjanje
ličnih programa, već kao najlakši način za učenje iz tuđih a ako
tebi tada Grep nije koristan ne znam šta da kažem.
BDM.
cccc.532bdm.,
## Vidi, ja uglavnom pisem programe da bi radili a ne da
## bi ih neko gledao, tako da mi je u centru paznje koliko je meni
## lako ili tesko da pisem, a ne kako ce to nekome posle da izgleda
## kad ga gleda -ako budem lud pa nekome dam da gleda:))
Pazi ja u principu ne volim da uzimam ništa tuđe ako znam to isto
da napišem. Tako da ja tuđi kod gledam skoro jedino u timskom radu
a to pitanje si zaboravio.
## Ti poredis editor u najnovijoj JPI moduli i neki stari paskal 5.
## Jesi li video BP7.0 ili bar TP6.0? Mada bi ja sve to zajedno dao, i
## doplatio preko toga, za MSC:))
Imam još uvek TP6 na disku, pogledao i razočarao se, i dalje su mi
mnoge stvari lakše u TS-u, još ono menjanje polja u maskama sa
(SHIFT) TAB, da poludim.
BDM.
cccc.533madamov,
******
Jes vala. I tu se srećemo kod tvog izbora Turbo Ca zbog toga što je pružao više
i tako to.
******
I u čemu je tu problem? Ako si iz mojih poruka shvatio da sam samo sa TC-om
radio na Atariju, onda izvini, mislio sam da je ostalo što sam pričao bilo
dovoljno jasno da se vidi da ne nisam radio samo u C-u. Sada radim samo u C-u,
jer na Meku nemam dobar kompajler za bilo šta drugo.
cccc.534dejanr,
Odgovor u temi JEZICI.
cccc.535ficus,
>> Dalje, koliko ljudi ovdje je napisalo program od 10,000+
>> linija u Cu. I koliko je to trajalo? Excluding zz za koga svi
>> znamo, a znamo i koliko je trajalo.
A zar nije poenta dobrog jezika da sa sto manje pisanja
napises sto bolji program????
Sto se same produktivnosti tice evo uzmimo primer asemblera
mada se ni meni bas ne svidja ideja da recimo baze podataka
radim u bilo cemu sto nije specijalizovan prog. jezik. Evo
ovako pretpostavimo da mi je 5 firmi narucilo programe i ja ih
pisem u asembleru. Problem nastaje kad zakljucim da nemam
indexne datoteke i slicne lepote (clipper-a????). Pa sednem
napisem jedno 20-tak funkcijica 100-tinak makroa i eto resen
problem indexnih datoteka. Sad bi bilo zgodno imati i lepsu
komunikaciju sa ekranom i opet se posao svodi na isto. Ovo
svee zajedno ce za prvu firmu trajati dosta dugo, za drugu ce
vec biti samo par doradica i ako je sve dobro osmisljeno vec
kod 4 ja cu lakse i brze komunicirati sa datotekama u
asembleru nego u clipperu. Naravno problem citkosti programa
ce i dalje da ostane ali... Pa ljudi nisu pisali c za dzaba i
opet se posao svodi na isto.
Dakle moj zakljucak:
-asembler je dobar najvise zbog toga sto su jedini uticajni
bagovi bagovi procesora (popad na 386dx) a sami kompajleri??
da rekoh kompajleri jer sadasnji masm je daleko od obicnog
asemblera su jos uvek dovoljno jednostavni da su mal sanse da
imaju bug-ove ako se doticni i pojave nece biti od tolikog
znacaja (bar se nadam). Sto se integrisane okoline tice PWB je
jos uvek suvise spor da bi se mogao nazvati integr. okolinom.
prednosti: otporniji na bugove kompajlera,lako se linkuje sa
svime.
mane : nepregledan, lako se prave greske koje se tesko otkrivaju
- C Ovo je asembler sa nesto lepsom sintaksom i dodatim
korisnickim bibliotekama. Mana je sto ljudi koji su do juce
radili u paskalu i na c nisu obracali paznju misle da je
nepregledan i kad ga uzmu onda i programe pisu na paskalovski
nacin i naravno stvarno napisu nepregledan program. Inace sa
malo programerske kulture pregledniji je od vecine drugih
programskih jezika. ajd nek mi neko napise na paskalu nesto
slicno ovom i da bude pregledno i da to kompajler prevodi kao
brz program:
for (i=1;i<=128;i*=2)
{
...
}
toliko o nepreglednosti c-a e sad sto se tice ostalog lose je
uradjen ulaz i izlaz ipak je trebalo to da bude sastavni deo
kompajlera bar na najnizem nivou mada nesto nao write(ln) u
paskalu nebi bilo na odmet jer se prilikom poziva printf-a
gubi vreme na citanje format stringa i njegovu interpretaciju
sa druge strane ja smatram da je printf sa svojim format
stringom ipak pregledniji nego writeln cist primer:
printf("matrica [ %d , %d ] = %d /n",i,j,matrica[i][j]);
writeln( 'matrica [ ',i,' , ',j,' ] = ',matrica[i,j]);
pa sad se vi snalazite u gomili navodnika a o onome ''' i da
ne pricam. Naravno cena je sporije izvrsavanje programa ali
i/o operacije su inace spore zar ne? Druga mana je ocajno
spora kompilacija mada ne verujem da je nije moguce ubrzati
uvodjenjem pandana tpu fajlu koj bi naravno bio opcionalan
(obj ili "tpu") mislim da je tako nesto uradjeno u bp 7.0 sto
se povezivanja sa drugim programskim jezicima tice tu nebi
trebalo da bude problema ali nisam siguran jedino sto sam
probao su c i clipper koji se linkuju super ali bez floating
point emulacije.
p.s. jos jedna mana su duzi exe fajlovi posto je printf
kilometarska funkcija.
c++ (moj omiljeni) odma da se ogradim nisam bas mnogo veliki
pristalica oop-a ja c++ gledam kao poboljsanje sa druge strane.
Sad bar postoji zamena za printf koja bi trebalo da radi
otprilike istom brzinom kao writeln. Ja sam ostao pristalica
printf-a zbog toga sto smatram da je pregledniji a sto se
brzine tice ko ce da misli o brzini kad je u pitanju
preglednost. Sto se preglednosti tice povecana je samim
uvodjenjem objekata (napisete jednostavan objekat koji ne radi
skoro nista pa onda kad ste sigurni da nema bugove nasledite
ga i poboljsate.....) i posle mesec dana imate neki papiric sa
uputstvom za koriscenje i ne razmisljate kako to uopste radi.
naravno postoji problem pri povezivanju zato sto se recimo
funkcija f(int) ne zove f nego nesto kao f@qi ili tako nesto
zbog overloadinga koj je opet na svoj nacin carska stvar.
Prednost BC a je i to sto je toliko opskrbljen headerima sa
svim mogucim funkcijama da je to vec pomalo i preterivanje ali
uvek se nadje korisno imati kompleksne brojeve na primer. a
ajd nek mi neko u paskalu napise ptogramce za prevodjenje iz
jednog u drugi brojni sistem na primer. ako to programce bude
krace od mog u c-u ima oma da pojedem papir sa mojim programom
(nece mi tesko pasti posto ima nekih 5 linija sa sve
include-om i main()-om dakle.... mislim ovo se odnosi i na
standardni c koj ima iste funkcije. Naravno ko sto rekoh
povecana je preglednost upotrebom klasa i owerl. operatora i
jos gomila slicnih gluposti koje mogu para da vrede.
pascal ok on je jos podnoslijiv moji komentari su :
mora mnogo da se kuca za postizanje nekog cilja i cesto su
potrebna uvodjenja temp promenljivih koje u c-u nevi moro da
uvedem. Ostala diskusija se moze zakljuciti iz predhodnog.
clipper i slicni: Odlicni za baze podataka ali smatram da su
ipak prelazno resenje dok ne napisem klasu koja ce da podrzava
indexe i c++-u
prolog i slicni: ipak bi se na njima zadrzao kao na lepim
teoretskim jezicima. mislim da recimo na takmicenjima i u
slicnim situacijama u kojima treba obraditi neki ulazni
podatak i dati ga na izlazu mogu biti spasonosni jer 90% brige
programera preuzmu na sebe ali za bilo kakvu programsku
primenu bas i nebih koristio tako nesto.
Zakljucak: Treba raditi u onome sto najbolje poznajes i da
budes sto sigurniji kako ce to kompajler prevesti. (asembler,c
pa i pascal) clipper je dobar za baze podataka u nedostatku
dobrih biblioteka koje bi ga zamenile (on i jeste neka vrsta
biblioteke) ali mu je mana fiksna duzina slogova i jako spor
pack. Moje prakticno iskustvo: dam vam dd (360kb) disketu sa programom
i bazom podataka program je u clipperu i naravno sve je
zipovano pa se sve to lepo raspakuje na nekih 5-6 mb?????
podataka. Konkretno radi se o recniku (nemacko-srpski 30000
reci) stim da za neke reci postoji prevod od 70-tak slovnih
mesta paaaa a jos dodajte indexe i nastade katastrofa.
p.s. programirao sam u clipper-u -15 poena
cccc.536paki,
> Puso obožavam te :). Opet isto... Jesi ti video JPI v3.02
> ikada? Ja jesam TP6.0. Ako si video, iznesi mi šta je to tako
> dobro u odnosu na JPI. Izgleda, opet ne poznaješ ono o čemu
> pričaš (5ti put :).
Hvala Bogu da čovek nikad nije video JPI. A zato svi znamo kaki
izgleda TP. Govori li ti to nešto?
cccc.537.obj,
>## Zar čika-C-CASE ne kaže da korištenje grep-a dobar znak da sa
>
> Smanji i TI ton diskusije, zašta se kao zalažeš!
I TI SMANJI!!! Šalim se. Ne radi se o vikanju ni pljuvanju ;) već je
ono bila samo mala ironična šala. OK? :)
> Odkud ti znaš zašto sam ja koristio Grep?
Pretpostavljam da ga nisi koristio za, recimo, formatiranje disketa
nego za pretraživanje datoteka.
Bilo mi je simpatično kada sam pročitao da "nikad ne treba koristiti
grep, već se svaka funkcija mora nalaziti tamo gde je najlogičnije, bez
preturanja po modulima" a posle toga neko kaže kako je grep integrisan
u M2 IDE.
Nemam ništa protiv grepa, taman posla. Koristim ga svakodnevno. Jedino
mi fali neki fazon za replace posle pronalaska.
cccc.538dejanr,
Odgovor u temi jezici, mislim da bi bilo dobro da polako selimo
diskusiju tamo.
cccc.539mihajl,
$ Evo i rezultata za jedan moj program na Clipper-u 5.01 koji je
$ .......
$ samo to). Program ima 5850 linija na Clipper-u i 408 linija
$ asemblera, sve skupa preko 160 linija na dan.
Mislim da je mnogo puta naglasavano da broj linija koda nekog
programa u mnogome zavisi od samog programskog jezika odnosno od
biblioteka koje se koriste u tom programskom jeziku.
Svojevremeno sam na Clipperu 5.01 odnosno summer '87 mogao dne-
vno da ispisem i do 600 linija ( u naletima naravno ), a maksimum
za aplikaciju , skoro od pocetka napisanu ( ako se tako nesto moze
postici ), je oko 300 linija koda, pisano 16 dana, program od cis-
tih 5000 linija koda. Inace takve gigantske programe sam pisao u
prvim godinama programiranja.Sada sam uglavnom napravio svoje bib-
lioteke od kojih 6000-7000 linija koda,pa mi sada programi ne pre-
laze 1000 linija. Sada mi je naglo pala produktivnost na svega par
desetina linija dnevno ( u najboljem slucaju ).
Smatram da naleti linija koda mogu da budu kratkotrajni i samo
u slucaju kada se cela programska filozofija menja.
cccc.540todorp,
> lako ili tesko da pisem, a ne kako ce to nekome posle da izgleda
> kad ga gleda -ako budem lud pa nekome dam da gleda:))
A sta je toliko strasno ako objavis svoj sors??? Pa ne mislis valjda da si
otkrio novu atomsku bombu ili nesto epohalno pa da budes lud da nekome
pokazes. Mislim da bi ljudi trebali vise da objavljuju sorseve uz svoje
programe (razume se ako program nije preveliki i ako nije pravljen da se
zaradi vec kao neki utility). Ja skoro svaki program koji uradim hocu da dam
sors ili u najgorem slucaju spreman sam da ga dam svakom na uvid (razume se
ako me nije blam sto je mnogo ruzno napisan :))) Koliko si ti i tebi slicni
ucio iz tudjeg sorsa? Mnoga imena ostavljaju cele jezike kao free.
Pozdrav od Todora.
cccc.541todorp,
> dali ja mogu normalno da koristim fprintf u binarnim fajlovima.
Mozes koliko ja znam. fprintf pravi razliku izmedju bin i txt fajla (inace
nebi bio upotrebljiv ;) Evo ti primer. Pogledaj '\n' u fajlovima I_fajl i
II_fajl i videces da je u jednom slucaju 13+10 a u drugom samo 10.
/* Test da li postoji razlika izmedju fprintf u bin i u txt fajlu */
#include <stdio.h>
#include <stdlib.h>
FILE *f;
main ()
{
f=fopen("I_fajl.txt","wb"); /* fajl otvoren kao bin */
if (f==NULL)
printf("File je nemoguce otvoriti!\n");
fprintf(f,"Todorovic Predrag\n");
fclose (f);
f=fopen("II_fajl.txt","wt"); /* fajl otvoren kao txt */
if (f==NULL) printf("File ne je nemoguce otvoriti!\n");
fprintf(f,"Todorovic Predrag\n");
fclose (f);
}
Pozdrav od Todora.
ps. Ako ti toliko smeta sporost i duzina fprintf koristi write koja je na
nizem nivou.
cccc.542ficus,
:) Mozes koliko ja znam. fprintf pravi razliku izmedju bin i txt fajla (inace
:) nebi bio upotrebljiv ;) Evo ti primer. Pogledaj '\n' u fajlovima I_fajl i
:) II_fajl i videces da je u jednom slucaju 13+10 a u drugom samo 10.
Pa on jeste veoma upotrebljiv i bez tog razlikovanja a sto se
razlike tice probaj sa brojevima ja sam sve zivo probao nebi
li nekako brojeve ubacio u binarnu daroteku sto se texta tice
on je veoma slican u oba slucaja tako da ga ne smatram za
toliko merodavan test.
:) ps. Ako ti toliko smeta sporost i duzina fprintf koristi write koja je na
:) nizem nivou.
Pa ja ne rekoh da to meni smeta i/o operacije su inace veoma
spore. Problem sam na kraju i resio sa fread i fwrite ali neke
stvari mi cisto interesuju naprimer fprintf bi trebao da radi
sa binarnim fajlovima zasto meni ne radi. Sto se brzine tice
ona je napomenuta da mi nebi neko prebacivao kako precutkujem
mane a i cilj mi je bio da izlozim i mane.
Mislim bez uvrede za ono sa merodavnoscu ali broj 15 u bin
fajlu treba da izgleda kao 0fh 00h a ne kao 31h 35h zar ne?
Evo probao sam i tvoj program napise broj kao u text fajl tako
jednostavno pogledaj ovo:
#include <stdio.h>
#include <stdlib.h>
FILE *f;
void main ()
{
f=fopen("I_fajl.txt","wb"); /* fajl otvoren kao bin */
if (f==NULL)
printf("File je nemoguce otvoriti!\n");
fprintf(f,"%d Todorovic Predrag\n",15);
fclose (f);
f=fopen("II_fajl.txt","wt"); /* fajl otvoren kao txt */
if (f==NULL) printf("File ne je nemoguce otvoriti!\n");
fprintf(f,"%d Todorovic Predrag\n",15);
fclose (f);
}
dakle ako mi izlazni bin fajl izgleda ovako (a tako izgleda) :
15 Todorovic Predrag
Izem ti binarni fajl :(((( Dakle ili ja negde kruuuuuupno
gresim ili fprintf nije za binarne fajlove sto donekle i
deluje logicno. So imal jos koja ideja? Ni meni se nesvidja da
kazem ali fprintf mi je definitivno sumnjiv
cccc.543pedjak,
> Šta mislite da napravimo mali kolektivni test? Da smislimo neki
> problem i rešimo ga na sličan način, na (recimo) MS i Borland C-u,
> Borland Pascalu, JPI Moduli 2, QuickBasic-u i eventualno još nekom
> jeziku pa da uporedimo koliko linija sorsa koji program ima, koliki
> je EXE fajl, koliko se dugo prevodi i koliko se dugo izvrsava.
Može !
cccc.544todorp,
> Pa on jeste veoma upotrebljiv i bez tog razlikovanja a sto se
> razlike tice probaj sa brojevima ja sam sve zivo probao nebi
> li nekako brojeve ubacio u binarnu daroteku sto se texta tice
> on je veoma slican u oba slucaja tako da ga ne smatram za
> toliko merodavan test.
Pa sta ocekujes od fprintfa. Priznajem da si me zbunio. Kad otvoris fajl kao
bin to se svodi na ono sto sam ti napisao za '\n' i nista vise. fprintf to
prepoznaje. To sto ti hoces ne podrzava ni fwrite nego mu ti kazes sta da
pise. Ako ti nesto znaci mozes da koristis fprintf(u,"%2x",15); ali ti to
stavlja spejsove i opet pise drugacije od onoga sta tebi treba. Drugim recima
koristi fwrite ;))
> Pa ja ne rekoh da to meni smeta i/o operacije su inace veoma
> spore. Problem sam na kraju i resio sa fread i fwrite ali neke
> stvari mi cisto interesuju naprimer fprintf bi trebao da radi
> sa binarnim fajlovima zasto meni ne radi. Sto se brzine tice
Onda sam pogresno razumeo.
Pozdrav od Todora.
cccc.545bdm.,
## ono bila samo mala ironična šala. OK? :)
OK, malo sa naelektrisan... :)
BDM.
cccc.546ficus,
:) Pa sta ocekujes od fprintfa. Priznajem da si me zbunio. Kad otvoris fajl kao
:) pise. Ako ti nesto znaci mozes da koristis fprintf(u,"%2x",15); ali ti to
Pazi opet si ti mene izgleda pogresno shvatio gledaj binarni fajl je fajl u
koji kad upises broj broj se upisuje u onom formatu u kom je u memoriji dakle
ako u memoriji imas neku konstantu 0a23h to ti se u fajl upisuje kao 23h 0ah
dakle kao 2 bajta ili da posmatramo jos jednostavnije jedan bajt neka bude
inkriminisani 15 decimalno (0fh) pa sad ako ga u fajl upises u text formatu
dobices "15" ali kao string ili dve cifre ili kako vec oces uglavnom hex zapis
bi ti bio 31h sto predstavlja 1 i 35h sto predstavlja 5 a ako ga upises kao u
binarni fajl dovbices 0fh i eventualno 00h iza ako je dvobajtni zapis.
Ocigledno ne shvatamo na isti nacin binarni fajl a ja sam vrlo ubedjen da ga ja
ne shvatam pogresno ako ima neko ko misli drukcije molio bih ga da me ispravi
da ne zivim u zabludi a dotle... cak i ovo drugo sto si predlozio nece uraditi
pravu stvar jer ce formad %2x napisati za konkretan slucaj f ili ako vise volis
ascii kod karaktera f mislim da je 60. dakle opet nece upisati 0fh ili 15
dekadno sto meni treba
cccc.547kale,
>> Pa on jeste veoma upotrebljiv i bez tog razlikovanja a sto se
>> razlike tice probaj sa brojevima ja sam sve zivo probao nebi
>> li nekako brojeve ubacio u binarnu daroteku sto se texta tice
Probaj ovo (kad baš insistiraš:) :
short i;
char *p;
/* i = nešto */
p=(char *)&i;
fprinf(f,"%c%c",*p,p[1]);
Pozdrav!
cccc.548robert,
>> Pazi opet si ti mene izgleda pogresno shvatio gledaj binarni fajl
>> je fajl u koji kad upises broj broj se upisuje u onom formatu u kom
>> je u memoriji dakle
Eh pa fprintf(...) ti je funkcija koja služi za *formatizovano*
pisanje u fajl i vrlo je srodna sa printf(...), sprintf(...),
cprintf(...), vprintf(...) i vsprintf(...). Znači da ćeš teško postiši
sa fprintf ono što hoćeš. U svakom slučaju ti je lakše da uzmeš
funkciju koja to lepo radi po difoltu :).
Ili, pređi na C++ pa koristi stream.h!
cccc.549ndragan,
/ tj. delovi liče na rečenice :). Šta bi rekao za IMPLEMENTATION
/ MODULE ;).
Back to cobol. Epska poezija ili programski jezik. Mislim da mi se
najlepše sviđa skraćivanje reči do četiri znaka - još uvek je dovoljno
jasno, a nema mnogo da se qca.
cccc.550ndragan,
/ PERFORM ...
/ trala
/ lala
/ END-PERFORM.
I foks:
For a=1 to 10
do trala with dirigent
=lala(refren,pratnj(a)) <-- foksovo 'void' pozivanje funkcija
Endfor
Ne razlikuje velika i mala slova, a koga mrzi da sam uzupčava tekst,
propusti ga kroz FoxDoc (prerađani SNAP!) pa dobije to isto.
cccc.551ficus,
:) Probaj ovo (kad bas insistiras:) :
Pa ok je to ali na kraju sam problem resio cik pogodi kako
(fwrite) ali pitanje je bilo imal nade za fprintf a ovo je
ipak vec malo preterivanje. So zakljucak fprintf ne podrzava
binarne fajlove. Zar ne?
U svakom slucaju puno hvala na predlogu (inace problem je bio
sto me je mtzelo da kucam jer sam morao vise da kucam sa
fprintf jer mi podaci nisu bili u strukturi.)
cccc.552ficus,
:) Eh pa fprintf(...) ti je funkcija koja sluzi za *formatizovano*
Ok ali ako cemo tako sta je znacenje reci formatizovano (mogu
ja da formatizujem i za binarni fajl) iliti treba u knjigama
ipak napomenuti da fprintf ne radi sa bin fajlovima.
:) sa fprintf ono sto hoces. U svakom slucaju ti je lakse da uzmes
:) funkciju koja to lepo radi po difoltu :).
Pa i uzeo sam je na kraju. Ali ostalo je pitanje....
:) Ili, predi na C++ pa koristi stream.h!
Pa ja i radim sa c++-om ali mi se stream.h ne svidja puno
(mnogo komplikovano se postizu neke jednostavne stvari a i
nije prigledan ni upola koliko fprintf. Istina trebalo bi da
je znatno brzi zbog nacina na koji funkcionise.
cccc.553miro,
ű> uvođenjem ograničenja programer "tera" da piše čistije i pravi
ű> manje grešaka. To bi moglo da sugeriše i zaključak da
ű> programer ne zna baš najbolje šta radi ili bar da je pisanje
ű> programa u C-u toliko teško da niko ne može da se oslobodi
ű> slučajnih grešaka - sa oba zaključka ne bih mogao da se
ű> složim.
Uvođenjem ograničenja smanjuje se rizik da slaba karika u
lancu, iliti slabiji programer u timu, zabrlja stvar.
ű> zahteva izuzetno poznavanje alata sa kojim se radi. Stići do
ű> tog stepena znanja je vremenski dug proces i ako nema baš
ű> nekog *izuzetno* jakog razloga, ne verujem da bi se iko usudio
ű> da u sred posla promeni jezik, pa čak i samo firmu koja pravi
ű> kompajler.
Tačno, otprilike to sam i ja rekao u replici madamov-u. Radim
godinama, sve završavam što mi treba i teško da u fazi
projektovanja mogu da se odlučim zbog bilo čega na nešto drugo.
Drugo, ovo osporava Jozu Dujmovića:)), i ono što je on naučio
svoje studente, da svaki projekat nosi u sebi obaveznu tačku u
kojoj se bira jezik, tj alat.
ű> najproduktivniji, naj.. jezika ako je sve što imaš kompajler u
ű> verziji 1.0 od firme "šlj" koja posle godinu dana propada.
Tačno, ali to nije slučaj. I Pascal i C i C++ i, naravno,
Modula-2 imaju odlične implementacije koje proizvode i stalno
unapređuju stabilne firme. JPI je, npr., trenutno 'pod okriljem'
Clarion-a.
ű>>> linija u Cu. I koliko je to trajalo? Excluding zz za koga
ű>>> svi znamo, a znamo i koliko je trajalo.
ű> ^^^^^^^^^^^^^^^^^^^^^^^^^^^
ű> Baš me zanima koliko je trajalo i šta? ;)
Pa mislio sam na trajanje razvoja Sezam softvera i sve silne
faze kroz koje je to prolazilo. Ja sam počeo da koristim Sezam
čini mi se 89 godine, i do dana današnjeg sam tu sa manjim
preskocima. Zatim sam i sam počeo da razvijam BBS softver i
prošao sam mnoge faze u kojima sam prepoznao neke 'probleme' s
kojima si se ti sretao i još se sigurno srećeš.
Pozdrav, dragisha
cccc.554miro,
ű> :) To radi i GNU C pri instalciji. Pošto dolazi u source-u,
ű> prvo ga iskompajliraš sa postojećim C komapjlerom, a zatim
ű> tako dobijeni kompajler iskompajlira ponovo ceo source u
ű> finalnu verziju.
Skinuo sam juče Modula To C kompajler. Napravljen je pomoću
toolbox-a za kompajlere (takođe skinut i biće uskoro u dir-u,
samo da ga deskriptujem i skontam šta je šta:) i to u Moduli i
Cu. Počinješ tako što C verziju prevedeš i napraviš
executable, zatim njime prevedeš Modula verziju:).
cccc.555miro,
ű> Ma za sqrt manje-više, ali zašto se kod jednog zove InOut,
ű> WriteLn, WriteString, a kod drugog IO, WrLn... Za LONGREAL je
ű> logično, naime imena svih ugrađenih tipova se pišu velikim
ű> slovima (CARDINAL, LONGCARD).
Standardizacija biblioteke je još budućnost za većinu jezika.
Upravo C je taj za koji svi tvrde da je najportabilniji i tako
to, a potreban je posao da bi se preveslao sa jednog na drugi
kompajler na istoj mašini.
cccc.556miro,
ű> Jeste. I Modula je dizajnirana kada su memorije bile mnogo
ű> manje -- i oni su se brinuli da će biti teže napraviti
ű> kompajler sa pokojom ključnom reči više. Fortran nema ključne
ű> reči, a opet, novije verzije jezika izlaze na kraj i sa takvim
ű> konstrukcijama -- toliko o modernosti Module. ;)
Modula 2 nije pravljena sa malo ključnih riječi da bi joj
trebalo manje memorije.
Potencijalno najveći 'potrošač' memorije pri kompilaciji je
simbol tabela, a na to možeš uticati samo uvođenjem ograničenja
tipa '10 procedura po jedinici kompilacije sa max 20 varijabli
svaka' i slično. To, srećom, još nisam sreo ni u jednom
kompajleru za PC, bar ne nekom komercijalnom.
Malo ključnih riječi je nešto što je nekada isticano kao jedna
od prednosti C-a. Mali, kompaktan jezik, a opet dovoljno moćan da
se napravi sve što treba. E, Modula-2 ima manje rezervisanih
riječi nego C, a sintaksa joj staje na A4 format. Ja to smatram
kvalitetom.
cccc.557miro,
ű> da će, kao i sve ostalo u C-u, i sintaksa za "moduliranje"
ű> biti mnogo sažetija nego ona u M2. U stvari, svi Wirth-ovi
ű> jezici su fini kada u njima treba pisati male programčiće i
ű> primere baš zato što su "opširni".
Ako je C dva puta koncizniji nego Modula-2, znači na dva puta
većem projektu ja ću da izgubim prednost koju sam imao u početku
zbog toga što sam izabrao C. A 'poor readability' mi je dva puta
više poor. To će reći da argumentacija baš ne stoji.
Problem 'velikih projekata' nećeš riješiti tako što izabereš
jezik u kome je kraće pisati, prije ćeš ga riješiti jezikom u
kome ćeš lakše da svoj veliki projekat razbiješ u manje dijelove,
iliti module.
ű> nije to ništa loše... čaksm jedno vreme razmišljao o
ű> mutabilnim jezicima, kod kojih postoji metajezik, a strukture
ű> koje želite da imate definišete
Nisi jedini:). Svojevremeno na faksu malo je falilo da moj drug
Anes Sadiković i ja započnemo sličan projekat:).
Pozdrav, dragisha
cccc.558miro,
ű> pa mozes da kazes da je slicnost potpuna. I da ne
ű> zaboravim, na oba mesta seint kaze bas tako, a ne
ű> Int i INT.
A u kom se to jeziku na jednom mjestu kaže Int a na drugom INT?
Što se tiče sličnosti, šta je _AH u Turbo C, a šta u MSC i kako
se radi portovanje programa koji je sav od poziva DOS-a?
cccc.559miro,
ű>>> Dalje, koliko ljudi ovdje je napisalo program od 10,000+
ű> 9000 linija sorsa u C-u 5.1. U proseku, to je oko 180 linija
ű> dnevno.
'Poluvezano'... [To: .obj]
Ovo ide u prilog mom limitu od 10,000 koji je ovdje čak i
pretjeran. Ako je prvi Sezam imao 9,000 linija a znamo da je bio
daleko od trivijalnog programa, otkud je 10,000 malo?
cccc.560miro,
ű> Ti poredis editor u najnovijoj JPI moduli i neki stari paskal
ű> 5. Jesi li video BP7.0 ili bar TP6.0? Mada bi ja sve to
ű> zajedno dao, i doplatio preko toga, za MSC:))
Gospodine 'pusa', kad je već C 'tvoj', otkud to da ga već nemaš
nego bi davao za njega BP i TP. Ajde da bar daješ BC ili TC, pa da
kažemo da nešto C-a imaš. Ovako, sam sebi skačeš u usta.
cccc.561miro,
ű> Molim te da sniziš ton. Odavno nigde nisam pročitao tako
ű> agresivne
Eh, to bi svako rado drugome pripisao. Ostavljam drugima da
procijene poruke, a ti sigurno nisi neko ko je na primjeru
pokazao kako treba da bih ga smatrao kompetentnim da ocjenjuje
moje pisanje.
A za agresivne poruke pogledaj malo 'pusine', pa nam onda nešto
reci. Ako smo 'mi' agresivniji od njega...
ű> grupe, možda ne bi bilo loše da sa vremena na vreme i pročitaš
ű> po koju i malo se naučiš toleranciji (kao primer onoga kako ne
Šta bi tebi bilo dobro, pustiću tebi i da odlučiš. Inače, baš
volim ovo preko-preče-naokolo-bliže. Hobbiton si spomenuo za
svaki slučaj, da malo pojačaš utisak, zar ne? Jak diskutant.
ű> treba da pišeš možeš, na primer, da uzmeš "Nemate pojma", "NE,
ű> ne znaš!").
KADA?! sam ja rekao 'Nemate pojma'??
cccc.562miro,
ű> Očigledno misliš da je 10000 linija puno. Ja ne mislim da je
ű> to toliki broj da možeš da kažeš "koliko je ljudi ovde...?",
ű> čak šta više, ja mislim da se ta cifra dosta brzo dostiže (u
ű> C-u pogotovo, a za asembler 10000 linija nije ništa).
Mislim da je to donji prag od koga se program može smatrati
netrivijalnim. Ima izuzetaka. Srećna okolnost za Sezam je da
ovdje ima dovoljno ljudi koji su taj prag prešli, a nesretna
okolnost za ovu diskusiju je što u njoj učestvuju i oni koji ga
nisu omirisali.
BTW, to što za C nije puno 10000 linija govori o njegovoj
konciznosti:).
cccc.563miro,
[To: .obj]
ű>> Molim te pojasni mi o kakvom pretjerivanju u simetriji
ű> govoriš.
ű>
ű> Simetrijom sam nazvao Wirthovo čistunstvo koje, po meni, ide u
ű> ekstrem. Ja bogami neću da se zajebavam sa FROM IMPORT bez
ű> obzira šta on pričao o modulima i apstrakciji podataka.
ű>> Inače, od ljudi koji ovdje zovu mogu da nabrojim desetak njih
ű>> koji ozbiljno koriste M2.
ű>
ű> Deset? U jeee... ;)
ű> Hvala lepo. Hederi omogućavaju da
Vrlo si se dobro snašao u diskusiji s 'nama' agresivcima. Dobro
ti stoji!
Pozdrav, dragisha
cccc.564miro,
ű> Neće tebi nikad zatrebati drugi jezik, jednostavno zato što si
ű> previše isključiv. Gde su koreni te isključivosti, stvarno ne
ű> znam. Kada bi imao dobar auto, da li bi odbijao da sedneš u
ű> neki drugi model?
Kad ti kažeš da sam isključiv i to još na ovakav način, meni
ostaje samo da se povinujem:)).
Šta bi to ti upotrijebio osim C++? A ja svaki put kad dobijem
neki C sors fino uđem u to i ako je dovoljno malo prevedem u M2,
inače portujem na TopSpeed C(++) i koristim.
Nemoj samo da, radi očuvanja tona diskusije:), kažeš da nemaš
potrebu za ičim osim C++:)).
cccc.565miro,
ű> Rezime cu da napisem cim stignem. Primecujem da si totalno
ű> ostao bez argumenata pa si presao na insinuacije, ako dobro
ű> shvatam sta si hteo da kazes
Da sam ja jedini koji je posmislio na to, pomislio bih da sam
paranoičan. Ali, nisam. Juče sam slično mišljenje čuo od još tri
korisnika.
Malo je nelogično da korisnik iz Dec 91 počinje da koristi
conf povodom Hobbitona, zatim kad se ta rasprava ušuti njega
nestane, i pojavi se ponovo kad se pojavi 'kompatibilna'
rasprava. Onda se kao fol uključi u još par konferencija, da se
Vlasi ne dosjete.
Za sve koji smatraju da pretjerujem preporučujem jedan clist *
pusa. Takođe, nek malo pogleda ko ima neki stariji output od
users da vidi kada je to pusa zvao ranije. Ja je imam, s kraja
1992 i u njoj je pusin zadnji poziv dan učlanjenja iz Dec 1991.
ű> Ja sam samo odgovorio salom na tomicevu salu, i stavio
ű> smajli, ti valjda mislis da je u redu kad ti pljuckas druge,
ű> ali kad ti neko malo zakaci tebe i cedo ti, ti se mnogo
ű> nakostresis ;))
Ja sve radim otvoreno, kolega. Zna se ko sam i šta sam. Za
razliku, jelte... Za svoje postupke i pisanje odogovaram svojim a
ne tuđim obrazom.
Pozdrav, Dragiša Durić
cccc.566miro,
ű> Ili, ako stvarno rešimo da budemo manje subjektivni, što smo
ű> onda uopšte raspavljali ovoliko? ;) Što su neki zastupnici
ű> Module bili tako ratoborni?
Biće zato što su dočekani ratoborno od nekih drugih korisnika.
Ovdje ne ubrajam ni tebe ni madamov-a ni prvul-a ni još mnogo
drugih, ali da ih ima, ima ih.
Ako si još zainteresovan za razumnu diskusiju, možemo da
nastavimo:).
Moje izvinjenje tebi za ono 'NE, ne znaš!'.
Šta sad?:)
Pozdrav, Dragiša Durić
cccc.567miro,
ű> Postojanje PRIVATE dela tako izloženog jeste malo nedosledno,
ű> ali, izgleda, prilično potrebno kompajlerima -- ni u Adi nisu
ű> mogli to da izbegnu.
To je izbjegnuto u Moduli-2:), postojanjem opaque tipova. Jeste
da takvi tipovi osim private nemaju ni public varijable, ali
ionako se preporučuje da se polja samo čitaju a ne i pišu. Znači,
ako to poštuješ dolaziš do istog što ima i Modula-2 a to su
procedure za čitanje potrebnih polja a ostalo te ionako ne
zanima.
U Adi su zbog toga stvar dodatno zakomplikovali, tj otežali
život piscima kompajlera, uvođenjem read-only varijabli, a to je
uradio i Oberon-2.
cccc.568miro,
ű> nije programeru potrebno da zna o klasi, zašto to ne izvesti
ű> do kraja nego stati na pola puta? Jeste da je za kompajler
ű> jednostavnije, ali mogli su da se izvuku... uostalom,
ű> kompajler treba da služi onome ko programira, a ne obratno ;)
Za kompajler je jednostavnije jer se zna velicina objekta, tj
sizeof, ali rješenje je i podrazumijena veličina za takvu
strukturu, tj SIZE(taki tip)==SIZE(pointer).
cccc.569todorp,
> :) pise. Ako ti nesto znaci mozes da koristis fprintf(u,"%2x",15); ali ti
> Pazi opet si ti mene izgleda pogresno shvatio gledaj binarni fajl je fajl
Ma jesam te shvatio u prosloj poruci ali se nisam dobro izrazio. Zato sam i
napisao 'ako ti nesto znaci' mada sad kad citam poruku vidim da je to bilo
nepotrebno (a i poruku sam pisao umoran). Elem, nisam mislio da je fprintf
drugo resenje za fwrite (to sam valjda vec napisao) vec sam napisao ovo zato
sto je meni u jednom trenutku ranije trebao fprintf koji ostavlja prazno ne
popunjeno mesto (al' ga slozih ;) nesto kao fprintf("%2d... gde nece da se
upisuje 0x20 ispred nego 0x0, pa sam mislio kako da iskoristis fprintf ako ti
je oglavu mada neznam koji problem resavas (ne znam zasto moras da pises u
binarni fajl).
Pozdrav od Todora.
cccc.570todorp,
> short i;
> char *p;
> /* i = nesto */
> p=(char *)&i;
> fprinf(f,"%c%c",*p,p[1]);
Ako dobro vidim ovo ce da radi samo sa short (2 bajta). A sta sa long itd?
Inace je resenje lepo za short (bas mi se svidja).
Pozdrav od Todora.
cccc.571peca.st,
!-> program kao da je prepisan iz neke knjige
!-> za matematiku dakle nema nikakvog
!-> programskog zongliranja.
Tačno. Nema programskog žongliranja, a zašto?
Pa i ti si rekao u ostatku poruke, samo ću ja to reći malo grublje.
Mathematica, ipak, (po meni) ne bi mogla da se svrsta u programske jezike.
Zato je i tako lako napisati ovo gore što si ti uradio.
A kada je DejanR predložio ono, mislim da je ipak mislio na klasičnije
programske jezike. žak mislim da ni Assembler ne bi trebalo uzeti u obzir,
nego "više" jezike.
Peđa.
cccc.572robert,
**********************************************************************
* *
* AMAN LJUDI, MIžITE OVE VAŠE SVAĐE IZ :CCCC U :JEZICI!!! *
* *
**********************************************************************
Zak, moooolim te ko boga, seli ove momke u temu :jezici!!!
cccc.573robert,
>> ipak napomenuti da fprintf ne radi sa bin fajlovima.
Pa on faktički radi i sa bin fajlovima ali ne onako kako bi ti
očekivao već onako kako je napravljen da radi, tj. formatizovano
ispisuje u fajl kao što bi ispisao i na ekran a ne bi voleo da na
ekranu gledaš heks brojeve umesto normalnih cifara, zar ne? Meni, na
primer, nikad nije palo na pamet da pišem po bin fajlu sa fprintf :).
cccc.574.obj,
> Ovo ide u prilog mom limitu od 10,000 koji je ovdje čak i
> pretjeran. Ako je prvi Sezam imao 9,000 linija a znamo da je bio
> daleko od trivijalnog programa, otkud je 10,000 malo?
Jao... :) Pa nisam ni rekao da je malo. Rekao sam da se brzo dostigne,
što nikako ne znači da su programi sa manje od 10000 linija mali. Eto,
recimo, ako pišeš 100 linija na dan, to je (samo) 3 meseca posla.
cccc.575.obj,
> volim ovo preko-preče-naokolo-bliže. Hobbiton si spomenuo za
> svaki slučaj, da malo pojačaš utisak, zar ne?
Ne. Ni slučajno. Ako misliš da Hobbiton spominjem u uvredljivom
kontekstu, varaš se. Hobbiton držim najozbiljnijim BBS-om posle Sezama,
i o njemu imam visoko mišljenje. Tek toliko da se zna. A Hobbiton sam
pomenuo zato što znam da si napisao njegov softver. I ti si, na primer,
pomenuo ZZ-a, pa se čovek nije uvredio zato što se pominje Sezamov
softver...
> KADA?! sam ja rekao 'Nemate pojma'??
PC.PROG.2:7.496:
> Pa naravno kad ljudi pišu o stvarima koje ne poznaju.
Nisi baš rekao 'nemate pojma' (nisam tražio tačno frazu, to mi je ostalo u
ušima), ali svejedno, utisak ostaje.
Ne vredi da se sad preganjamo ko zašto diže ton u diskusiji, ali hoću
da ti se izvinim ako si se osetio uvređenim u vezi sa bilo čime što sam
napisao.
cccc.576.obj,
> Vrlo si se dobro snašao u diskusiji s 'nama' agresivcima. Dobro
> ti stoji!
Hvala na komplimentu ;)
Koliko me pamćenje služi (a dobro me služi;) ti si onaj koji je prvi počeo
da na poruke odgovara arogantno.
Evo, ja sam spreman da pređem preko tvoje arogancije ;) Nadam se da
više neću imati prilike da se dobro snalazim u agresivnim diskusijama.
cccc.577prvul,
Ůkoji kad upises broj broj se upisuje u onom formatu u kom je u memoriji
Ůdakle ako u memoriji imas neku konstantu 0a23h to ti se u fajl upisuje kao
Ů▄▄
I za takve stvari imaš fwrite i fread, a fprintf i fscanf služe za isto
to, samo ono "f" na kraju znači da je ispis FORMATIRAN, a što znači da se
ispisuje baš onako kako se ispisuje. U binarni fajl se može pisati I sa
fprintf, tj. formatirano, i fprintf se tada ponaša BAŠ onako kako treba, tj.
ne radi translaciju kraja reda.
Zašto je zgodan formatirani ispis u binarni fajl? Zato da ako ti treba da
upišeš npr. broj u ASCII obliku u fajl (u nekim formatim za baze podataka se
čak svi brojevi u bazu upisuju tako, cifru po cifru umesto onako kako pišu
u memoriji) lepo upišeš to sa fprinf i gotovo. Inače bi morao da ispisuješ
formatirano u string sa sprintf, pa da tražiš dužinu stringa, pa pa
poravnavaš i pad-uješ (jer su polja u bazi fiksne dužine) i onda upišeš sa
fwrite.
cccc.578ficus,
odgovor u conf jezici
cccc.579ficus,
>:) > p=(char *)&i;
>:) > fprinf(f,"%c%c",*p,p[1]);
>:) Ako dobro vidim ovo ce da radi samo sa short (2 bajta). A sta sa long itd?
>:) Inace je resenje lepo za short (bas mi se svidja).
pa u tom slucaju jednostavnije je fwrite(&i,sizeof(i),1,f); ili jos bolje
#define fwr(x,f) fwrite(&(x),sizeof(x),1,f) i dalje samo fwr (i,f) ovo radi
i sa drugim tipovima i lepse je a jos bolje lupiti templateove u c++-u ali
nazalost cisto da kazem u cemu je bio problem pa da prekinemo sa diskusijom
koja nikud ne vodi. Ja sam inace do skoro radio sa pascalom i sad skoro sam
presao na c (skoro citaj ko pre 8 meseci). Dosad mi fajlovi nisu trebali sk-
oro uopste bar ne binarni a sa textom sam se snalazio. Inace sad zavrsavam
neku igricu i treba mi za fajlove sa nivoima. Inace sad radim u c++-u ali
jos nisam probo nista od njegovih predefinisanih klasa i objekata izuzev
cin i cout a i to ne koristim jer mi se iskreno receno vise svidja printf.
U svakom slucaju hvala puno. Ja sam se u medjuvremenu snasao iskoristio
fwrite i za sad posao polako napreduje.
cccc.580mstanic,
Može li neko da mi kaže čemu služe ova dva fajl u PROGRAM
direktorijumu na Sezamu ?
byacc zip 103040 Berkley YACC for MS-DOS (parser generator)
flex_exe zip 86615 Lex compiler - generator programa za skaniranje teksta
Mislim da li su u nekoj vezi sa C-om ?
cccc.581ficus,
yacc ti sluzi za generisanje sintax checkera (proverava sintaksu tvog programa)
bar koliko sam ja ukapiro a flex pojma nemam ali pretpostavljam da je nesto
slicno
cccc.582dejanr,
>> > i ako nema baš nekog *izuzetno* jakog razloga, ne verujem
>> > da bi se iko usudio da u sred posla promeni jezik, pa čak
>> > i samo firmu koja pravi kompajler.
>>
>> Tačno, otprilike to sam i ja rekao u replici madamov-u...
>>
>> Drugo, ovo osporava Jozu Dujmovića:)), i ono što je on naučio
>> svoje studente, da svaki projekat nosi u sebi obaveznu tačku u
>> kojoj se bira jezik, tj alat.
Pa, ne vidim baš po čemu osporava, nije on rekao da se U SRED posla
menja alat nego da u toku planiranja projekta, dakle pre nego što
se pristupi programiranju, treba razmotriti i taj aspekt problema.
Naravno, to je primenjivije za veće softverske firme (kakvih kod
nas nema) i veće projekte, kad čovek sam radi, verovatno mu je još
teže da menja jezike. Ali ja recimo nikad nisam osećao ni "obavezu"
(tj. potrebu) a ni želju da sve što radim, radim na istom jeziku.
cccc.583stomic,
$ U Adi su zbog toga stvar dodatno zakomplikovali, tj otežali
$ život piscima kompajlera, uvođenjem read-only varijabli, a to
$ je uradio i Oberon-2.
žini mi se da su read-only vajibale postojele i u Oberonu.
Pozdrav, stomic@hobbiton.
cccc.584kale,
>> Ako dobro vidim ovo ce da radi samo sa short (2 bajta). A sta sa long itd?
Malo više %c i malo više p[i]. :)
cccc.585pusa,
> Problem 'velikih projekata' nećeš riješiti tako što izabereš
> jezik u kome je kraće pisati, prije ćeš ga riješiti jezikom u
> kome ćeš lakše da svoj veliki projekat razbiješ u manje dijelove,
> iliti module.
Lepo je covek pre neki dan dao program pisan u internom
jeziku MATHEMATICA paketa i vidi se da je taj program vise puta
kraci u odnosu na nesto napisano u C-u ili Moduli ili Pascalu.
Ja sam nekada pisao programe u APL jeziku za neke transformacije,
tu sa tri operatora uradis sta ti u fortranu treba tri strane.
I vrlo se pregledno i brzo pise, jedino treba da imas tastaturu
sa svim tim operatorima ili da ih pises kao reci samo sto to tad
odma je manje pregledno. Dakle, izaberes odgovarajuci jezik i
sve se lako i brzo napise. Ako ima takav jezik. Ako nema... uzmes
C :)
Inace ta tolika teznja da se sve razbija na male malecke
delove me ne impresionira - ima svojih dobrih strana ali se tera
u krajnosti i rezultuje ogromnim programima koji su uz to mnogo
spori. Mogli bi biti mnogo brzi i mnogo manji, kada bi se racionalnije
pisali a ne samo seckao kod po modulima i kada treba i kada ne treba
cccc.586pusa,
> Gospodine 'pusa', kad je već C 'tvoj', otkud to da ga već nemaš
> nego bi davao za njega BP i TP. Ajde da bar daješ BC ili TC, pa da
> kažemo da nešto C-a imaš. Ovako, sam sebi skačeš u usta.
Ja sad ne znam da li se to ti pravis blesav ili sta,
smajli stavio nisi, znaci kao treba ozbiljno da te shvatam. Fala
Bogu da imam sve te pakete koje pominjes (sem BC) i nisam hteo
nista da razmenjujem, nego sam se izrazio figurativno da sve to
zajedno meni ne vredi koliko MICROSOFT C 7.0. Ako to nisi mogao
da shvatis onda svaka ti cast ;)
cccc.587pusa,
> Za svoje postupke i pisanje odogovaram svojim a
> ne tuđim obrazom.
Tako sto radis pod tudjim imenom. Ne osecam potrebu da
se tebi ispovedam ni da ti objasnjavam od kada do kada sam bio
na SEZAMu a kada sam bio odsutan i gde sam za to vreme bio. Ako
hoces da me vidis, skoro svake subote sam u klubu pa izvoli.
Ne bojim se suocenja sa osobom kao sto si ti, iako si samome
sebi postavio lepu dijagnozu:
> pomislio bih da sam paranoičan.
cccc.588pusa,
> I nikada nećeš biti u prilici da radiš timski :)?
Kad mi bude trebalo da radim timski ima da mislim i o tome.
Sad mi ne treba pa me bas briga. A svakako ne bi radio timski
sa nekim pacerima, nego bi se dogovorili kako sta da radimo i
tako bi radili. Naravski na C-u.
> Puso obožavam te :).
A sida vreba... ;(
> Opet isto... Jesi ti video JPI v3.02 ikada? Ja jesam TP6.0. Ako si
> video, iznesi mi šta je to tako dobro u odnosu na JPI. Izgleda, opet
> ne poznaješ ono o čemu pričaš (5ti put :).
To ti kazes jer nemas argumenata za diskusiju, pa mislis ako
100 puta ponovis da ja ne citam poruke na koje odgovorim i ne znam
o cemu pricam, neko ce pomisliti da je stvarn tako. Brze se radi,
manje sparta po disku i ucitava, nema stalno da se na nesto ceka,
manje se sareni po prozorima, ima debager ugradjen, biras oces li u
DOSU ili DPMI podrsku (ovo samo borland p.), svasta lepo ima. JPI
Modula ima malo bolje resen rad sa prozorima za tekst.
Inace posto pricamo o C-u, nekako se nisam navikao da koristim
WORKBENCH jer mi radi nesto kao spomenuta modula, stalno nesto sparta
i trazi po disku. Zato kuckam u BRIEF-u pa prevedem samostalnim
kompajlerom.
cccc.589pusa,
> A sta je toliko strasno ako objavis svoj sors??? Pa ne mislis valjda
> da si otkrio novu atomsku bombu ili nesto epohalno pa da budes lud da
> nekome pokazes.
Nije rec o tajni nego o tome da mislim da kada bi pisao
program ciji cu sors da delim uz njega, bio bi puno opterecen
time da to bude lepo, da se ne vide neke sitne i malo bitne ali
ipak ruzni stosovi, da mi neko ne kaze ovo i ono... Ja bi dao
sors ako to treba, ali s tim da sam od pocetka pisao program
tako da ga delim. A ako sam pisao program misleci da cu da delim
samo EXE a pose treba i sors da dam, ne bih to rado bas... Osim
ako bi se dobro platilo ;))
I ti si postavio dobru dijagnozu kad kazes
> (razume se ako me nije blam sto je mnogo ruzno napisan :)))
:)
> Koliko si ti i tebi slicni ucio iz tudjeg sorsa?
Ja dosta malo, ako ne racunas u sors ono sto je u nekoj
knjizi.
> Mnoga imena ostavljaju cele jezike kao free.
Ali to je zgodno za one koji ce recimo to na faksu da oce
po pola godine ili godinu, za to vreme se to prostudira. A meni
da da neko sors celog jezika, ja bi rekao lepo, samo nema vremena
da citam i lupam glavu. Zato bi kad bi birao rado video sors
manjih programa kojima nesto dobro radi, npr kako scan onako brzo
trazi signaturu u fajlu ili kako norton backup onako pise na
disketu i slicne.
cccc.590prvul,
Ů Ako je C dva puta koncizniji nego Modula-2, znači na dva puta
Ůvećem projektu ja ću da izgubim prednost koju sam imao u početku
Ůzbog toga što sam izabrao C. A 'poor readability' mi je dva puta
Ůviše poor. To će reći da argumentacija baš ne stoji.
Ů▄▄
Mislim da argumentacija stoji. Naime, to što je C dva puta koncizniji
nikako ne znači da je i dva puta nečitljiviji. Naprotiv. Izgleda da je
najbolje da o čitljivosti programa više ne diskutujemo, pošto ja mislim
da je C čitljiviji od paskaloidnih jezika (čitaj: module) a ti obratno.
Očigledno se radi o ukusu, a o njima ne bih raspravljao... :)
Ůkome ćeš lakše da svoj veliki projekat razbiješ u manje dijelove,
Ůiliti module.
Ů▄▄
I zato ću izabrati C(++) u kome lepo napišem manje delove i gotovo...
ono što kod module zovemo modul kod C-a nema baš neko pompezno ime ali
vrši isti posao jednako dobro. Jedino što mislim da nedostaje to je
uvoženje samo pojedinih identifikatora iz modula, jer ponekad mi smeta
to što npr. zajedno sa strcmp iz string.h ujedno uvozim i memcpy i sijaset
drugih funkcija... no, ako se pažljivo planiraju moduli, onda je uvoženje
svih identifikatora neophodno... npr. ako je u modulu implementirana samo
jedna klasa, onda uvoženjem klase logično uvozimo i sve njene funkcije
članice i nema potrebe za uvoženjem samo nekih.
cccc.591miro,
ű> Bilo mi je simpatično kada sam pročitao da "nikad ne treba
ű> koristiti grep, već se svaka funkcija mora nalaziti tamo gde
ű> je najlogičnije, bez preturanja po modulima" a posle toga neko
ű> kaže kako je grep integrisan u M2 IDE.
Pa nije baš da tako piše, al' da sad ne kopamo...
Što se tiče M2 IDE, to je istovremeno i C, C++ i Pascal IDE pa
eto i razloga zbog koga je morao biti tamo:).
ű> Nemam ništa protiv grepa, taman posla. Koristim ga
ű> svakodnevno. Jedino mi fali neki fazon za replace posle
ű> pronalaska.
Ni ja:). I ja koristim taj famozni Alt-F4 (interni GREP) skoro
stalno. Replace poslije pronalaska se rješava vrlo lako, on u
traženje kreira spisak fajlova koji su matchovali, i kad uđeš u
file (sličan sistem pick listi) onda možeš Ctrl-Q A i u fajlovima
koji dolaze samo Ctrl-L.
cccc.592miro,
ű>> Puso obožavam te :). Opet isto... Jesi ti video JPI v3.02
ű>> ikada? Ja jesam TP6.0. Ako si video, iznesi mi šta je to
ű>> tako dobro u odnosu na JPI. Izgleda, opet ne poznaješ ono o
ű>> čemu pričaš (5ti put :).
ű>
ű> Hvala Bogu da čovek nikad nije video JPI. A zato svi znamo
ű> kaki izgleda TP. Govori li ti to nešto?
Vidi nešto, Zortech C++ je vrhunski proizvod. Koliko nas ga je
vidjelo??
Borland je vidjelo više ljudi, mnogo lakše se širi. A JPIja je
kupila Petnica, Mladost i još par firmi i pojedinaca. Neuporedivo
sa desetinama koje su kupile Borland. Bio je prije JPI, bio je
glasniji od JPI i eto razloga. JPI je evropska firma, i to je
jedan razlog. Reklamira se po Comm of the ACM i sličnim,
proizvodi samo kompajlere, ne svaštari. I to je jedan razlog.
I tako dalje...
cccc.593miro,
ű> Tako sto radis pod tudjim imenom. Ne osecam potrebu da
Da, radim pod prijateljevim imenom koji je kupio uslugu koju NE
KORISTI. Nije mi prvi put pa već svi i znaju za to, često se
potpisujem onako reda radi, a i moja ijekavica je prepoznatljiva.
Da ne govorim o čovječuljku kojega miro koristi:)). Znači, nisam
anoniman.
ű> se tebi ispovedam ni da ti objasnjavam od kada do kada sam bio
ű> na SEZAMu a kada sam bio odsutan i gde sam za to vreme bio.
Mora da si bio odsutan i za vrijeme od postanka Sezama pa do
1991 kad si postao član. Onda cijele 1991 i to sve do aprila ove
godine kad te je odjednom iznervirala naša najava. Cuclao si sa
ZgBBS a nisi se prijavio na Sezam čak ni kada je bio besplatan.
ű> Ako hoces da me vidis, skoro svake subote sam u klubu pa
ű> izvoli.
Haha, skoro svake subote u klubu, a jedna od persona koja je
tamo više nego često je prva izjavila 'Taj ne postoji!'.
Osim toga, svi ćute, meni bi prijatelji bar priskočili da mi
potvrde identitet. Gdje su kolege sa faksa i ostala raja. Možda
te ne znaju kao pusu?:)
ű> Ne bojim se suocenja sa osobom kao sto si ti, iako si
Odlično, pošto sam ja u Loznici i nije neka hrabrost suočenje
sa mnom. Sigurno neću dati 10-20 DEM da bih tebe sreo. Ali,
srećom, moj dobar drug bdm. je u BG pa ako si još uvijek spreman,
ponesi ličnu kartu i dogovori se sa čovjekom.
Ako ti je ponižavajuće da te legitimišemo, samo mi navedi
deset Sezamovaca koje lično poznaješ i oni poznaju tebe. Biće
dovoljno pa da počnem da se izvinjavam jednom sedmično sljedećih
pola godine na svim sistemima koje izabereš.
cccc.594miro,
ű>> KADA?! sam ja rekao 'Nemate pojma'??
ű>
ű> PC.PROG.2:7.496:
ű>
ű>> Pa naravno kad ljudi pišu o stvarima koje ne poznaju.
ű>
ű> Nisi baš rekao 'nemate pojma' (nisam tražio tačno frazu, to mi
ű> je ostalo u ušima), ali svejedno, utisak ostaje.
Ehhhh, od pojma nepoznavanja do pojma POJMA je duuuug put. A ta
razlika se nije vidjela u poruci kojom si opaučio po mom pisanju.
Utisak je ostao.
A ostaje činjenica, o njoj u jezici, da su ljudi pisali o M2 sa
očitim pokazivanjem nepoznavanja iste.
ű> Ne vredi da se sad preganjamo ko zašto diže ton u diskusiji,
ű> ali hoću da ti se izvinim ako si se osetio uvređenim u vezi sa
ű> bilo čime što sam napisao.
Ovo je najljepše u svakoj svađi sa normalnim narodom. Ruke
šire, u lice se ljube:).
Slažem se s tobom, i uzvratno se izvinjavam (opšte pomirenje:) i
ako želiš da nastavimo o (po) sabdžektu, ajmo u jezici.
cccc.595janko,
> Standardizacija biblioteke je još budućnost za većinu
> jezika. Upravo C je taj za koji svi tvrde da je
> najportabilniji i tako to, a potreban je posao da bi se
> preveslao sa jednog na drugi kompajler na istoj mašini.
ANSI biblioteke su standardne, ako su kompajleri ANSI C.
Dodaci specifični za jednu mašinu su, naravno, nestandardni.
Ipak, što se tiče MSC i BC, Borland se trudi da njegovi novi
kompajleri mogu da prevedu i MSC konstrukcije. Ipak, puno
"mašinski" (čitaj -- MSC) zavisan MSC tekst BC i dalje neće
uspeti da prevede.
cccc.596janko,
> od prednosti C-a. Mali, kompaktan jezik, a opet dovoljno
> moćan da se napravi sve što treba. E, Modula-2 ima manje
> rezervisanih riječi nego C, a sintaksa joj staje na A4
> format. Ja to smatram kvalitetom.
Jeste. Potpuno se slažem.
C je daleko od toga da ima jednostavnu gramatiku. To je zato,
što su dizajneri počeli, prvo, da razvijaju interpreter. (!) :)
C ima konstrukcije koje su tipične za LL i konstrukcije koje su
tipične za LR gramatike.
cccc.597janko,
> Šta bi to ti upotrijebio osim C++? A ja svaki put kad
> dobijem neki C sors fino uđem u to i ako je dovoljno malo
> prevedem u M2, inače portujem na TopSpeed C(++) i
> koristim.
>
> Nemoj samo da, radi očuvanja tona diskusije:), kažeš da
> nemaš potrebu za ičim osim C++:)).
Ne razumem pitanje, ako ga je bilo?
cccc.598miro,
ű> Za sve koji smatraju da pretjerujem preporučujem jedan clist *
ű> pusa. Takođe, nek malo pogleda ko ima neki stariji output od
ű> users da vidi kada je to pusa zvao ranije. Ja je imam, s kraja
ű> 1992 i u njoj je pusin zadnji poziv dan učlanjenja iz Dec
ű> 1991.
Whow! Stvari dobijaju čudan tok...
Moja lista je filtrirana na 1992 (to sam uradio jer mi je
trebalo da je skratim) i u njoj ga nema. Odatle sam pretpostavio da
je ostao među onima koje sam isjekao. Skidanje sam napravio
krajem avgusta kada mi je zbog prijave novih korisnika na BBS
trebalo da na osnovu username-a (većini je isti kao na Sezamu) i
zahtjeva koji su tada išli Sezam mailom kreiram korisnika.
Međutim, nije to JEDINA lista! U jednoj koju sam jutros vidio,
pusa prosto NE POSTOJI!
Može li neko nadležan da objasni 'misteriju'?
cccc.599dejanr,
>> Može li neko nadležan da objasni 'misteriju'?
Nema nikakve misterije, čovek se pojavljuje na user listi onoga momenta
kada plati pretplatu. Dok nije platio pretplatu nema ga ni na kakvoj
listi, ali stoji u bazi. Baza nije čišćena još od sredine 1991 godine
ili tako nešto.
Osim toga, korisnik može da bude anoniman, na sopstveni zahtev.
cccc.600miro,
> Nema nikakve misterije, čovek se pojavljuje na user listi onoga momenta
> kada plati pretplatu. Dok nije platio pretplatu nema ga ni na kakvoj
> listi, ali stoji u bazi. Baza nije čišćena još od sredine 1991 godine
> ili tako nešto.
>
> Osim toga, korisnik može da bude anoniman, na sopstveni zahtev.
Rekao bih da je to od ove godine, jer u listi imamo i korisnika qwer koji je
uclanjen na dan zadnjeg poziva, znaci tada nije bilo ovoga sistema. Moze da
provjeri, a qwer je iz decembra kao i ovaj 'pusa'.
A sto se tice flega, suhveli mi je da se pojavi sada. Zar nije i tebi? Kao sad
se nesto mijenja.
Sto se tice flega, ima ga setovanog i na 988...
cccc.601dejanr,
>> Rekao bih da je to od ove godine, jer u listi imamo i korisnika qwer koji
>> je uclanjen na dan zadnjeg poziva, znaci tada nije bilo ovoga sistema.
>> Moze da provjeri, a qwer je iz decembra kao i ovaj 'pusa'.
Tako je oduvek, a korisnik koga pominješ je platio pretplatu ali nije zvao
nikada posle. Dešava se povremeno.
cccc.602kenza,
(;> Vidi nesto, Zortech C++ je vrhunski proizvod. Koliko nas ga
(;> je vidjelo??
Ja sam ga video ;)
p.s. Cemu ovo sluzi, a uz to i ne radi?!
cccc.603bojt,
>> ...samo mi navedi deset Sezamovaca koje lično poznaješ i oni
>> poznaju tebe.
Evo ja ga znam (a i on mene).
cccc.604stomic,
$ Tako sto radis pod tudjim imenom. Ne osecam potrebu da
$ se tebi ispovedam ni da ti objasnjavam od kada do kada sam bio
$ na SEZAMu a kada sam bio odsutan i gde sam za to vreme bio. Ako
$ hoces da me vidis, skoro svake subote sam u klubu pa izvoli.
Evo ja radim pod svojim imenom. Jel možeš meni da objasniš te
sitnice. Može i na mail ako te je blam ovde pred svima.
$ Ne bojim se suocenja sa osobom kao sto si ti, iako si samome
$ sebi postavio lepu dijagnozu:
$
$ > pomislio bih da sam paranoičan.
I ja sam paranoik i Dragisha i još nekoliko ljudi?
Pozdrav, stomic@hobbiton.
cccc.605squsovac,
> Ako ti je ponizavajuce da te legitimisemo, samo mi navedi
> deset Sezamovaca koje licno poznajes i oni poznaju tebe. Bice
> dovoljno pa da pocnem da se izvinjavam jednom sedmicno sljedecih
> pola godine na svim sistemima koje izaberes.
Poznajem coveka. Javi ako treba da posaljem i podatke o njemu
(one koje znam) ili da ga opisem (ali na mail jer ne pratim conf u poslednje
vreme posto nisam u Bgd-u).
Pozdrav SQ
cccc.606ndragan,
/ i uperkaseuje.
Nešto se čudno izgovara 'uprskati' u poslednje vreme :)
cccc.607ndragan,
/ sa onim problemom sakrivanja privatnih delova klasa. Samo, verujem
'Hiding private parts' liči na cenzuru...
cccc.608ganta,
--> listi, ali stoji u bazi. Baza nije čišćena još od sredine 1991 godine
--> ili tako nešto.
Sad mi je jasno zašto tako dugo pretražuje bazu korisnika. Kako bi bilo da se
stari korisnici obrišu?
G.
cccc.609dejanr,
>> Sad mi je jasno zašto tako dugo pretražuje bazu korisnika. Kako bi bilo
>> da se stari korisnici obrišu?
Sve se nešto očekuje nova verzija softvera zbog koje će se format korisničke
baze dosta promeniti pa... ;)
cccc.610bulaja,
**** new file ****
R:\IBMPC\C\*.*
----------------------
ctask22 arj 155754 CTask v2.2, multitasking kernel za C (source) (#1/2)
ctask22 a01 154500 CTask v2.2, multitasking kernel za C (source) (#2/2)
CTask is a Multitasking Kernel for C, which allows preemptive
multitasking in C programs. Includes full sources for the Kernel, a
full duplex interrupt driven serial I/O driver, a DOS access
multiplexer, printer and keyboard interfaces. CTask programs can
spawn other programs and go TSR. Version 2.2 fixes a number of known
bugs. Mainly C, some ASM, for use with Turbo C or Microsoft C.
--------
Preuzeto sa FFS-a.
cccc.611bulaja,
**** new file ****
R:\IBMPC\C\*.*
----------------------
cephes-2 zip 154460 Cephes v2.2, razne matematicke C funkcije (source) #2
cephes-1 zip 154991 Cephes v2.2, razne matematicke C funkcije (source) #1
This computer software library is a collection of more than
400 high quality mathematical routines for scientific and
engineering applications. All are written entirely in C
language. Many of the functions are supplied in six different
arithmetic precisions: 32 bit single (24-bit significand), 64 bit
IEEE double (53-bit), 64 bit DEC (56-bit), 80 or 96 bit IEEE long
double (64-bit), and extended precision formats having 144-bit
and 336-bit significands. The extended precision arithmetic is
included with the function library.
The library treats about 180 different mathematical
functions. In addition to the elementary arithmetic and
transcendental routines, the library includes a substantial
collection of probability integrals, Bessel functions, and higher
transcendental functions.
There are complex variable routines covering complex
arithmetic, complex logarithm and exponential, and complex
trigonometric functions.
cccc.612zorans,
Ako se neko seca, ili vec koristi PCL4C async comm lib,
evo i dodatka tome: PPL4C - protocol lib.
HHps: Ovo SKERL vec sigurno ima ( ili mozda ne )
ppl4c11.zipcccc.613zorans,
Da li neko zna ( ima negde po sezamu ) gde se moze pronaci util koji
sredjuje neuredno pisane C programe.
Hvala unapred
pozdrav zorans
cccc.614spantic,
> Da li neko zna ( ima negde po sezamu ) gde se moze pronaci
> util koji sredjuje neuredno pisane C programe.
Imaš ga na Hobbitonu. Reč je o GNU
cccc.615zorans,
Zahvaljujem.
cccc.616durut,
Ako bi se neka dobra dusa nasla da mi kaze sta ovom programu
stvarno hvali (zasto neradi) bio bih mu zahvalan.
Evo sta nevalja :
- Ovaj program bi trebalo da preuzme INT 9h i da veliko i malo 'A'
zameni. Sve je lepo radilo... , ali onda sam pritisao fatalan
taster CAPS LOCK lampica se nije upalila i sve je zablokiralo. :(((
#include<dos.h>
.
.
.
void interrupt handler(unsigned bp,unsigned di,
unsigned si,unsigned ds,
unsigned es,unsigned dx,
unsigned cx,unsigned bx,
unsigned ax,unsigned ip,
unsigned cs,unsigned flags)
{
union REGS r;
char far *pp;
unsigned int offs;
char ch1;
int86(INTRR,&r,&r);
offs=*((char *) MK_FP(0x40,0x1a+2));
if(offs==30) /* ZBOG KRUZNOG BAFERA */
offs=62;
pp=MK_FP(0x40,offs); /* POINTER NA BAFER TASTATURE */
ch1=*((char*)MK_FP(0x0040,0x0017)); /* STATUS BAJT */
if(*(pp-2)=='a') /* MALO U VELIKO I KONTRA (SA BAFERA) */
*(pp-2)='A';
else if(*(pp-2)=='A')
*(pp-2)='a';
return;
}
Prilazem pride source,exe i config fajl za TC 2.0 u komeje inace
cela stvar kompajlirana .
int9.zipcccc.617vitez.koja,
Kuku i lele ;) Imam problem : kad je kursor u poslednjem redu, pa sa
cprintf ispisem string koji se zavrsava sa '\n' on ubaci jedan red na
dno ekrana, ali ne prazan nego dupliran pretposlednji :( tj. ako je
kusor u poslednjem redu a ja napisem cprintf("tralala\n") dobicu dva
"tralala" na dnu ekrana ?!
cccc.618vitez.koja,
Kakva su iskustva sa 'compile via assembly' u borlandovom Cu ?
cccc.619nkbog,
> Kuku i lele ;) Imam problem : kad je kursor u poslednjem redu, pa
> sa cprintf ispisem string koji se zavrsava sa '\n' on ubaci jedan
> red na
Borland C++, I presume. Dokumentovano kao BUG. Mislim da postoji update
koji to ispravlja. Ima valjda i ovde na Sezamu.
NB.
cccc.620mjova,
> kusor u poslednjem redu a ja napisem cprintf("tralala\n")
> dobicu dva "tralala" na dnu ekrana ?!
slični zbrljevi se dešavaju ako se otvori prozor koji je veći od
80x25. sad, ne sećam se baš da li je problem oko otvaranja prozora te
veličine ili korišćenja, ali ima nešto ;)
najbolje rešenje je pucati u video memoriju.
cccc.621mjova,
> Kakva su iskustva sa 'compile via assembly' u borlandovom
> Cu ?
kakva bi trebalo da budu? super, mada ih koristim samo kad mora.
cccc.622dcolak,
│ najbolje rešenje je pucati u video memoriju.
BTW, da li je ikako moguće koristiti pucanje po video ramu bez
_far deklaracija?
Sledge DAMMIR!
cccc.623vitez.koja,
#=> Borland C++, I presume. Dokumentovano kao BUG. Mislim da
#=> postoji update koji to ispravlja. Ima valjda i ovde na
#=> Sezamu.
Zahvaljujem :)
cccc.624vitez.koja,
#=> najbolje rešenje je pucati u video memoriju.
Kako-kad. Na kraju krajeva, da uzmem da strogo kontrolisem gde ce poruka
da se pojavi (a to bih morao kad bih gadjao video memoriju) nikad ne bih
dosao u situaciju kursor_u_poslednjem_redu + \n. Koristio sam cprintf za
ispis bezvezne "do vidjenja" poruke na kraju programa, kad me bas mnog
ne zanima gde ce da se ispise.
cccc.625vitez.koja,
#=> kakva bi trebalo da budu? super, mada ih koristim samo
#=> kad mora.
E, to me zanima :) Kad mora, kako stoje brzina i duzina programa u odnosu
na standarno kopajliranje, zasto koristis samo kad mora ? Ako te ne mrzi :)
cccc.626mjova,
> E, to me zanima :) Kad mora, kako stoje brzina i duzina
> programa u odnosu na standarno kopajliranje, zasto
> koristis samo kad mora ? Ako te ne mrzi :)
u principu, nisam još ˙morao˙ da koristim #pragma inline, ali znam ko
jeste ;). ortak sa posla ima 286 i na njoj BC++ 2.0. e, on kaže da
mora da koristi komp. preko asm-a. zašto? - nisam ga pitao, ali
pretpostavljam da je kompajler malo slabiji pa ne prepoznaje baš sve
što treba.
e, da, sad se setih, morao sam da koristim ovaj način prevođenja kad
sam iz svojih rutina (u .c modulu, pisane u asm-u) hteo direktno da
pristupim nekoj globalnoj promenljivoj. znam da sam joj pristupao
preko deklaracija koje gotivi asm jer nisam znao kako to da uradim iz
C-a (šta mogu kad nemam literature ;).
verovatno da postoje još neke prednosti (brzina?) ali sumnjam da je
kod drugačiji i da se razlikuje u dužini i/ili brzini.
sad, pošto sam savladao deklaraciju C funkcija u asm-u onda ih obično
i napišem u čistom asmebleru, pa ih kasnije povežem. glavna fora je
što je ovakvo pisanje mnogo lakše nego pre. nema onih deklaracija
segmenata i ko zna čega. paramteri se navedu u jednoj liniji (mada se
rad sa pointerima razlikuje nego u c-u ;) sve ostalo je isto.
cccc.627dcolak,
Evo moram da se požalim i da pitam jel neko rešio problem
ne saradnje PWB iz MSC6.0 i CV sa bilo kojim CACHE koji
ima uključen staged write. Uvek se ukoči čim poželim da
pređem iz PWB u CV.. So.. Ima li rešenja?
Sledge DAMMIR!
cccc.628mjova,
da li neko ima rešenje za sledeći problem:
izvesna funkcija pisana u asm-u treba da pristupa članovima neke
strukture, ali tako da tokom pisanja programa ne moram da pazima na
redosled i količinu memorije koju zauzimaju članovi pre one kojoj se
obraćam. ovo me posebno zanima za slučaj ubacivanja novih članova.
ako postoji
struct pera {
int a;
int b;
}A;
onda članu b mogu da pristupim iz asm-a na ovakav način:
void fn(pera *w) {
asm { les bx, DWORD ptr w;
mov al, BYTE ptr es:[bx+2];
}
}
tu bih nekako voleo da zamenim onu dvojčicu nekim simbolom koji će se
pri prevođenju zameniti pravom vrednošću. ne znam da li postoji neki
lakši način nego da pravim #define i sl.
cccc.629djelovic,
> onda članu b mogu da pristupim iz asm-a na ovakav način:
>
> void fn(pera *w) š
>
> asm š les bx, DWORD ptr w;
> mov al, BYTE ptr es:Šbx+2Ć;
> ć
> ć
>
> tu bih nekako voleo da zamenim onu dvojčicu nekim simbolom koji će se
> pri prevođenju zameniti pravom vrednošću.
To tvoje dva zapravo predstavlja:
(char*)w->b - (char*)w
što je konstantan izraz i kompajler će ga kao takvog tretirati.
E sad, probaj da ovaj izraz zameniš direktno u asm blok (što bi trebalo
da radi), pa ako ti ne uspe, onda uradi sledeće:
void fn (pera *w) š
const boffset = (char*)w->b - (char*)w;
asm š les bx, DWORD ptr w;
mov al, BYTE ptr es:Šbx+bĆ;
ć
ć
P.S. Identacija ti je užasna - jedva ga pročitah :)
cccc.630mjova,
> const boffset = (char*)w->b - (char*)w;
> asm š les bx, DWORD ptr w;
> mov al, BYTE ptr es:Šbx+bĆ;
> ć
upravo si uradio nešto što se ne može uraditi ;) i ono od čega sam
hteo da pobegnem.
osnovni razlog za pitanje je to što mi izvesna funkcija treba u čistom
asm-u (dakle, *.asm) i tamo nema (char*) (mada se rešava sa ˙byte ptr˙).
ovo i nije problem, veći je problem što se linija
mov al, BYTE ptr es:[bx+b];
prevodi nešto kao
mov al, BYTE ptr es:[bx+ [bp-10]]
što naravno ne prolazi kroz tasm.
u suštini, problem se može rešiti na nekoliko načina, ali ni jedan, za
sada, ne odgovara onome što meni treba. umesto one instrukcije sa [bx+??]
može se napraviti:
add bx, boffset
mov al, BYTE ptr es:[bx]
ali to nije ono pravo jer je boffset promenljiva (jes da je konstantna, ali
se njena vrednost može promeniti indirektno) što znači da to nije "samo
vrednost" već se određena memorijska lokacija popunjava njom.
može se staviti:
les bx, DWORD ptr w;
mov al, BYTE ptr es:[w.b];
a to ispadne kao:
les bx, DWORD ptr [bp+6]
mov al, BYTE ptr es:[[bp+6]+22]
e, sad, kako je [bp+6] SEGMENT onda ni to nije ok, već treba da stoji
[bp+8]. sad, pošto je o bx registru već [bp+8], onda meni treba samo ona
vrednost +22. bljak.
cccc.631djelovic,
> ali to nije ono pravo jer je boffset promenljiva (jes da je konstantna,
> ali se njena vrednost može promeniti indirektno) što znači da to nije
> "samo vrednost" već se određena memorijska lokacija popunjava njom.
Mislim da ovo nije tačno. Kada bi boffset bilo deklarisano kao recimo
const int boffset = ...
onda bi to bila promenljiva. Ovako mislim da je│
constů boffset = ...
manje-više ekvivalentno sa
#define boffset = ...
Probaj.
cccc.632mjova,
prvo, sad sam pogledao svoju poruku i primetih da pitanje nije baš
formulisano kako treba, pa da pokušam ponovo.
činjenica je da se struktura formira prilikom prevođenja i da svi
članovi te strukture uzimaju stalna mesta (ofset u odnosu na prvi član
je uvek isti, jel da ;). e, sad, nameće se pitanje zašto to računati
uvek tokom izvršavanja ako je to već nešto konstantno? samo se time
gubi vreme pri izvršavanju.
drugo, provalio sam kako se radi ;)
color= w->brdcol;
gde je w pointer na izvesnu strukturu, je zapravo:
les bx, dword ptr [bp+6]
mov al, byte ptr es:[bx+22]
mov byte ptr color, al
problem kako dobiti broj +22 je sasvim jednostavan, (iz ovog ugla ;).
dovoljno je u asm-u pisati:
; les bx, DWORD ptr w;
les bx, DWORD ptr [bp+6]
; mov al, BYTE ptr es:[(w PTR bx).brdcol];
mov al, BYTE ptr es:[([bp+6] PTR bx)+22]
; mov BYTE ptr color, al;
mov BYTE ptr DGROUP:color, al
red:
mov al, BYTE ptr es:[([bp+6] PTR bx)+22]
se prevodi kao:
mov al, BYTE ptr es:[bx+22]
što je u osnovi kraj posla. ako se ˙(w PTR bx).brdcol˙ napiše samo
kao ˙w.brdcol˙, onda dolazi do greške:
; mov al, BYTE ptr es:[w.brdcol];
mov al, BYTE ptr es:[[bp+6]+22]
što je pogrešno jer se to svede na
mov al, BYTE ptr es:[bp+28]
dakle, (w PTR bx).brdcol je glavna šema!
cccc.633zzivotic,
> da li neko ima rešenje za sledeći problem:
Jesi li probao:
mov al, byte ptr es:[bx]pera.b
Ako ne radi, vreme je da promeniš kompajler. Recimo MSC 6.0/7.0 ovako nešto
savršeno razume ;)
Pozdrav, zz
cccc.634vitez.koja,
Da li je neko uspeo da ulinkuje neki "nezavisni" .chr font u BC program?
Ja lepo napravim .obj sa bgiobj, ali linker kaze "fixup error at bla:bla"
:((( Upomoc ?!
cccc.635dcolak,
Ok ljudi pomagajte...
Pisah moj CAT.com (obojeni dir) i naiđoh na problem sortiranja
po extenziji. Podatke čitam na sl. način:
void files(struct find_t *buffer, char *dir, int *num)
{
struct find_t fileinfo;
if ((_dos_findfirst(dir, FILE_ATTR, &fileinfo)) != 0)
{
*num = -1;
}
else
{
*buffer=fileinfo;
while (_dos_findnext(&fileinfo) == 0)
{
++(*num);
++buffer;
*buffer = fileinfo;
}
}
}
Kad želim da sortiram po veličini fajlova to radim na sl. način:
int comps(struct find_t *buffer1, struct find_t *buffer2)
{
return((int)buffer1->size - buffer2->size);
}
A QSORT pozivam sa:
qsort(buffer, num, sizeof(struct find_t), comps);
E ovde nastaje problem, ako ima manje fajlova u diru onda je sve ok.
No ako ih ima više (preko 15) onda su fajlovi sortirani na sl. način:
5 6 7 8 9 10 1 2 3 4 11 12 13 itd.. (ovo su veličine fajlova npr.)
No, ako ima još više fajlova od neke granice onda počne toliko dugo
da sortira da nikad i ne izađe (možda i završi sort, al ja nemam
nerava da čekam)..
So, u čemu je problem? BUFFER je definisan sa STRUCT FIND_T *BUFFER;
U ZZIVOTIC-evoj skoli C-a je bio primer no BUFFER je definisan sa npr.
struct find_t buffer[maxnum]; a to mi ne odgovara, jer ako imam
1000 fajlova onda compiler prijavi grešku tipa niz duži od 64k, no neću
ni da probam sa huge modelom..
So, koji je savet, šta da radim da mi lepo sortira?
Sledge DAMMIR!
cccc.636mjova,
> constů boffset = ...
> manje-više ekvivalentno sa
> #define boffset = ...
> Probaj.
probah prvo da pogledam help. tamo kaže ovako:
In the first version, the const modifier enables you to assign an
initial value to a variable that cannot later be changed by the
program. For example,
const my_age = 39;
Any assignments to my_age will result in a compiler error.
■ NOTE: C++ extends const to include classes and member functions.
■ WARNING: A const variable can be indirectly modified by a pointer,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
as in the following:
*(int *)&my_age = 35;
znam da bi ti voleo da ono const znači (kao u paskalu), ali po svoj
prilici u C-u nije takav slučaj :(.
cccc.637bbizic,
> izvesna funkcija pisana u asm-u treba da pristupa clanovima neke
> strukture, ali tako da tokom pisanja programa ne moram da pazima na
> redosled i kolicinu memorije koju zauzimaju clanovi pre one kojoj se
> obracam. ovo me posebno zanima za slucaj ubacivanja novih clanova.
Ovako?
---- aproba.asm ----
pera struc
a dw ?
b dw ?
ends
aproba segment word "CODE"
;
; int fn(struct pera* w)
;
fn proc C far
public C fn
arg w: dword
les bx,w
mov ax,es:bx.b ; Ovo te zanima, zar ne?
ret
fn endp
aproba ends
end
---- cproba.c ----
#include <stdio.h>
struct pera {
int a,b;
};
int fn(struct pera* w);
void main()
{
struct pera p;
p.a = 1; p.b = 2;
printf("%d\n", fn(&p));
}
cccc.638mjova,
> Jesi li probao:
> mov al, byte ptr es:[bx]pera.b
probao ;) i napravi ovo:
mov al, BYTE ptr es:[bx][bp+6]+2
kakva samrma, sačuvaj me Bože - to izazove tasm-zbrlj ;).
ne menjam kompajler ;)
cccc.639dcolak,
Evo pitam po 2. put:
Pisah moj CAT.com (obojeni dir) i naiđoh na problem sortiranja
po extenziji. Podatke čitam na sl. način:
void files(struct find_t *buffer, char *dir, int *num)
{
struct find_t fileinfo;
if ((_dos_findfirst(dir, FILE_ATTR, &fileinfo)) != 0)
{
*num = -1;
}
else
{
*buffer=fileinfo;
while (_dos_findnext(&fileinfo) == 0)
{
++(*num);
++buffer;
*buffer = fileinfo;
}
}
}
Kad želim da sortiram po veličini fajlova to radim na sl. način:
int comps(struct find_t *buffer1, struct find_t *buffer2)
{
return((int)buffer1->size - buffer2->size);
}
A QSORT pozivam sa:
qsort(buffer, num, sizeof(struct find_t), comps);
E ovde nastaje problem, ako ima manje fajlova u diru onda je sve ok.
No ako ih ima više (preko 15) onda su fajlovi sortirani na sl. način:
5 6 7 8 9 10 1 2 3 4 11 12 13 itd.. (ovo su veličine fajlova npr.)
No, ako ima još više fajlova od neke granice onda počne toliko dugo
da sortira da nikad i ne izađe (možda i završi sort, al ja nemam
nerava da čekam)..
So, u čemu je problem? BUFFER je definisan sa STRUCT FIND_T *BUFFER;
U ZZIVOTIC-evoj skoli C-a je bio primer no BUFFER je definisan sa npr.
struct find_t buffer[maxnum]; a to mi ne odgovara, jer ako imam
1000 fajlova onda compiler prijavi grešku tipa niz duži od 64k, no neću
ni da probam sa huge modelom..
So, koji je savet, šta da radim da mi lepo sortira?
Sledge DAMMIR!
cccc.640janko,
> Pisah moj CAT.com (obojeni dir) i naiđoh na problem
> sortiranja po extenziji. Podatke čitam na sl. način:
> int comps(struct find_t *buffer1, struct find_t *buffer2)
> return((int)buffer1->size - buffer2->size);
> E ovde nastaje problem, ako ima manje fajlova u diru onda
> je sve ok. No ako ih ima više (preko 15) onda su fajlovi
> sortirani na sl. način: 5 6 7 8 9 10 1 2 3 4 11 12 13
> itd.. (ovo su veličine fajlova npr.)
> So, koji je savet, šta da radim da mi lepo sortira?
Za početak, promeni funkciju poređenja.
Veličine fajlova su longovi. Ti pročitaš samo int od prvog
longa, a drugi long ceo, i onda od proširenog inta u long
oduzimaš long pa rezultujući long pretvaraš u int. To se svodi
na oduzimanje dva inta.
Moram da priznam, to je najčudnija funkcija poređenja koju sam
ikada video. NHF?
PS. Jesi li čitao neku pravu knjigu o C-u, do sada? Zanima me,
jer mi se uklapa u neku raspravicu koju je neko načeo u konf.
Računari, ako se ne varam...
cccc.641dcolak,
│ PS. Jesi li čitao neku pravu knjigu o C-u, do sada? Zanima me,
│ jer mi se uklapa u neku raspravicu koju je neko načeo u konf.
│ Računari, ako se ne varam...
BRIAN W. KERNINGHAN & DENNIS M. RITCHIE Programski jezik C
The Waite Group's Quick C Bible
Milan Kukrika Programski jezik C
DejRanov i još nečiji umetak...
ZZivoticeva škola C-a (BTW kupujem računare redovno od 7. broja)
Što se tiče funkcije poređenja, bitno mi je samo da li je znak
minus ili plus ili 0 :)
BTW, Nikad ne bi primetio da mi fajle zagrade :)))
znači jedno prosto
RETURN ((INT)(BUFFER1->SIZE - BUFFER2->SIZE));
:))
Hvala, tako nešto je stvarno bilo teško primetiti, eeee
Marfi ne spava :))
Sledge DAMMIR!
cccc.642janko,
> Što se tiče funkcije poređenja, bitno mi je samo da li je
> znak minus ili plus ili 0 :)
>
> BTW, Nikad ne bi primetio da mi fajle zagrade :)))
> znači jedno prosto
> RETURN ((INT)(BUFFER1->SIZE - BUFFER2->SIZE));
> :))
:)))) Mogu da ti zamislim iznenađenje kada otkriješ da i ta
tvoja ispravka ne radi. ;)
Sada oduzimaš jedan long od drugog, onda od rezultujućeg longa
vraćaš donjih šesnaest bita. Kompajler to opet shvata kao int
oduzimanje.
cccc.643mjova,
> Evo pitam po 2. put:
mislim da nije potrebno postavljati pitanje dva puta i maltretirati one
kojima nije žao što se patiš ;). naročito ako je isto ;). ljudi su dosta
zauzeti i mnogi se ne javljaju često. mnogi čak i ne znaju da tebi treba
pomoć pa su u idle stanju ;).
nulto, koji će ti listanje u boji kad to već ima 4dos interno, a bolje
ne može da se napravi?
prvo, ovo ovako ne može:
return((int)buffer1->size - buffer2->size);
em fale zagrade, em to ne radi ;). kastovanjem celog izraza ćeš odseći i
po neku bitnu informaciju - kastovanjem se zapravo odseca viša reč, a to
znači da se sign bit gubi, odlazi nekud u provaliju ;).
ako je taj long ustvari 0x7fffffff onda to (posle kastovanja) nikako neće
biti pozitivna vrednost. pa moraš da odsečeš prva dva bajta i da ih oruješ
sa druga dva, ali tako da znak ostane samo onaj iz prvog.
kad bi ovako uradio, onda u slučaju da je razlika 1000.0000.1000.0000b
dobio bi pogrešnu veličinu, tj bilo bi isto da je 1000.0000.0000.0000b.
no, ovo i nije neki razlog za muku, već ako je to 0000.0000.1000.0000b
eee, to je bleaj koji se po verovatnoći (gotovo) sigurno neće javiti, ali
kad pominješ marfija... dodaš jedan mali test pa se to sredi ;).
int comps(struct find_t *b1, struct find_t *b2) {
asm { les bx, dword ptr b1;
mov ax, word ptr es:[bx].size+2;
mov dx, word ptr es:[bx].size;
les bx, dword ptr b2;
sub dx, word ptr es:[bx].size;
sbb ax, word ptr es:[bx].size+2;
test dx, 0x8000;
jz _comps1;
shr dx, 1; }
_comps1:;
asm or ax, dx;
}
> No, ako ima još više fajlova od neke granice onda počne toliko dugo
> da sortira da nikad i ne izađe (možda i završi sort, al ja nemam
> nerava da čekam)..
drugo, ono što ja vidim odavde je da se vrednost num ne inicijalizuje.
možda je inicijalizuješ pre ulaska u files, ali to nije ok jer se (u
ovom slučaju) ona mora kompletno popuniti iz te funkcije. dakle, dodaj
*num= 0;
i sve će da proradi kako treba. mene je zapravo čudilo kako ti je u
nekim situacijama ovo i radilo (možda je num globalno definisan ili je
static?).
treće, da ti prevodilac ne javi pretnje, možeš staviti:
typedef int (*cmp)(const void *, const void *);
a qsort pozivati sa:
qsort(buffer, num, sizeof(struct find_t), (cmp)comps);
(i to me čudi kako je prošlo bez patnji, no nema veze ;).
četvrto,
> U ZZIVOTIC-evoj skoli C-a je bio primer no BUFFER je definisan sa npr.
> struct find_t buffer[maxnum]; a to mi ne odgovara, jer ako imam
> 1000 fajlova onda compiler prijavi grešku tipa niz duži od 64k, no neću
> ni da probam sa huge modelom..
ne znam šta misliš, ali kako ćeš napraviti mesto za te podatke, ako ne
alociraš memoriju onda? struktura find_t je dugačka (valjda ;) 43 bajtića.
znači da možeš komotno imati 1500 opisa fajlova u memoriji. međutim, ima
tu više rešenja, a to je da iz strukture find_t koristiš samo ono što ti
treba i time je sa 43 skratiš za bar 21 znak (jer ne znaš čemu služe), pa
tako možeš imati skoro 3000 opisa (valjda je dosta?).
peto, kad pozivaš findfirst(), onda navedi kao atribut 0xffff da bi bio
siguran da će se svi fajlovi pojaviti u listi. (tek da ne pitaš kasnije
što mi ne radi ovo ;).
šesto, da mene pitaš, koncepcija je pogrešna u ovom programu. sortiranje
se obavlja tako što sadržaji dve lokacije zamene mesta. ovo može da
potreje (mada ne preterano) ako su kvantovi veći. iz ovih razloga ti
predlažem još neku ne prospavanu noć i da imaš 64k pointera na find_t, a
da mesto za sam sadržaj alociraš preko farmalloc(). ovo će ti malo
promeniti rutinu za upoređivanje i pristup, ali ćeš time dobiti dve
stvari:
- broj mogućih fajlova će porasti na 16k (64k/4)
- qsort će da vrši samo zamenu pointera, a sadržaj struktura će ostati
tamo gde je i bio. mesto za sam sadržaj možeš alocirati iz petlje za
pravljenje spiska.
ovo je još jedan dokaz da sam genije. ;) (koji danas odlazi u learn & page
off mod zbog radi više sile. so, so long 2 int ;).
cat.ccccc.644dcolak,
│ Sada oduzimaš jedan long od drugog, onda od rezultujućeg longa
│ vraćaš donjih šesnaest bita. Kompajler to opet shvata kao int
│ oduzimanje.
Ma možda se nisam dobro odrazio, no meni je potreban samo znak
i ništa više!!!
Znači -, 0, +...
Uopšte mi nije bitna veličina..
BTW, sad radi QSORT no toliko je spor kad ima više fajlova
da se vraćam na "ručno" sortiranje :(
Sledge DAMMIR!
cccc.645dcolak,
│ drugo, ono što ja vidim odavde je da se vrednost num ne inicijalizuje.
│ možda je inicijalizuješ pre ulaska u files, ali to nije ok jer se (u
│ ovom slučaju) ona mora kompletno popuniti iz te funkcije. dakle, dodaj
Sa num je sve ok. Sa njim i files funkcijom nisam imao nikakvih
problema, samo sam naveo da bi znali način učitavanja.
│ predlažem još neku ne prospavanu noć i da imaš 64k pointera na find_t, a
│ da mesto za sam sadržaj alociraš preko farmalloc(). ovo će ti malo
│ promeniti rutinu za upoređivanje i pristup, ali ćeš time dobiti dve
Podatke sam alocirao sa malloc..
A što se tiče zagrada, ex, nisam ni primetio :)
Što se tiče sortiranja, ideja je stvarno prosta i nikad je
se ne bi setio, so thanx! :)
Sledge DAMMIR!
cccc.646janko,
Turbo Help 3.0 (THELP.COM) koji dolazi uz BC++ 3.0 se nekada
čudno ponaša... Pritisnete hot ki, a on ćuti i neće da se
pop-apuje.
Do rešenja sam došao najčistim hakerisanjem -- disasembliranjem
koda koji je zadužen za pop-ap. Taj kod, između ostalog,
pogrešno, proverava trenutno stanje INSERT bita!
Kada vam se to dogodi, dakle, samo jedan pritisak na taster
INSERT će učiniti da pop-ap proradi.
Inače, trajno rešenje se postiže sa
POKE thelp.com 00b6 0f
cccc.647janko,
> Ma možda se nisam dobro odrazio, no meni je potreban samo
> znak i ništa više!!!
> Znači -, 0, +...
> Uopšte mi nije bitna veličina..
> BTW, sad radi QSORT no toliko je spor kad ima više fajlova
> da se vraćam na "ručno" sortiranje :(
Ma, ne radi. Samo si imao sreće da je grupa fajlova sa kojom si
probao imala pogodne veličine!
Poslušaj savete, inače, što si ih uopšte tražio?
Pogledaj Mjovin kod. On daje UVEK ispravan rezultat -- jer i on
radi sa SVIH 32 bita oba broja.
Ako ti je nejasan, evo ti razumljivijeg, sporijeg, i ISPRAVNOG:
int comps(struct find_t *b1, struct find_t *b2)
š
if (b1->size > b2->size) return +1;
else if (b1->size < b2->size) return -1;
else return 0;
ć
A evo ti i C ekvivalenta Mjovinog koda, ako ne govoriš
asemblerski:
int comps(struct find_t *b1, struct find_t *b2)
š
long temp;
unsigned hi, lo;
temp=b1->size-b2->size;
lo = temp;
hi = temp >> 16;
if (lo & 0x8000) lo >>=1;
return hi đ lo;
ć
Naravno, mjovina konstatacija da je je "jeftinije" pomerati
samo pointere, a ne alocirane podatke, takođe stoji.
cccc.648mjova,
> A što se tiče zagrada, ex, nisam ni primetio :)
pazi, zagrade *uopšte nisu bitne*, to je pogrešno urađeno od početka.
> BTW, sad radi QSORT no toliko je spor kad ima više fajlova
> da se vraćam na "ručno" sortiranje :(
ma qsort je super brz. proveri ti šta sortiraš i koliko ga ima. ja sam
sortirao direktorijum u kome ima 280 fajlova za siću od 0.0208
sekundi. uostalom, evo izveštaja iz profilera:
Execution Profile
Total time: 3.1909 sec
% of total: 99 %
Run: 1 of 1
Filter: All
Show: Time and counts
Sort: Frequency Pass count: +++ Time: ***
_main 1 <1% |
2.8497 sec 89% |***************************
_files 1 <1% |
0.3082 sec 9% |**
_sort 1 <1% |
0.0208 sec <1% |
_comps 7182 99%
|++++++++++++++++++++++++++++++
0.0079 sec <1% |
i to, moram priznati da sam prvo sortirao fajlove u opadajućem redu, a
zatim pozvao qsort. pretpostavljam da je to najgora varijanta, a onda je
trajala smešno vreme i ako je to tako, onda će se 1500 fajlova sortirati
za 0.1114 sec, što je izpod svakog kriterijuma.
najduže se izvršava 'skupljanje' fajlova sa diska, a bojim se da to
legalno nije lako ubrzati. e, da, ovo je sve rađeno sa keširanim diskom
(mada to ne utiče na brzinu sortiranja).
cccc.649dcolak,
│ Ako ti je nejasan, evo ti razumljivijeg, sporijeg, i ISPRAVNOG:
Hej, savete sam tražio da bih usporedio i odabrao neki,
ne da bi ih poslušao tek tako...
Što se tiče sporije varijante, naravno da sam se toga setio,
no možda je za sve kriva ZZivoticev-a škola koju sam ja slepo
pratio, što će reći ZZivotic je pogrešio, btw, evo njegovog
comp-a: ────┬───
│
typedef struct direntry š └─ ne smem da tvrdim :)
char filename[14];
long size; <-- Long!?
time_t ftim;
};
struct direntry dent[MAX_DIRENTRIES];
int lastdent = 0;
int compf(struct direntry *d1, struct direntry *d2)
{
return(int)(d1->size-d2->size);
}
Ko je kriv? Zanima me.
Sledge DAMMIR!
cccc.650dcolak,
│ ma qsort je super brz. proveri ti šta sortiraš i koliko ga ima. ja sam
│ sortirao direktorijum u kome ima 280 fajlova za siću od 0.0208
│ sekundi. uostalom, evo izveštaja iz profilera:
Verovatno je brz no kad sortira same pointere a ne i sadržaj,
so, daj mu da sortira sadržaj, a ako jesi, onda pojma nemam
što je toliko spor... :(
Sledge DAMMIR!
cccc.651mjova,
> Kada vam se to dogodi, dakle, samo jedan pritisak na
> taster INSERT će učiniti da pop-ap proradi.
e, svašta ;), nego ja se nešto mislim da nađem zakrpu kako bi radio u
rezoluciji koja meni treba. ne znam da li ima šanse da se umontira
tako nešto ili je ta širina ekrana ukodirana na više mesta.
kad već pominješ thelp (u verziji 3.1 radi sasvim dobro), da li možda
znaš kako se može ona njegova help datoteka prevesti u običan text?
cccc.652dekiper,
T>> Chr 2 Obj
tako napravljene OBJ-ove moraš sa TLIB ubaciti u GRAPHICS.LIB, pa ih tek onda
možeš pozivati!!! (barem tako piše u dokumentaciji koju nemam...)
cccc.653janko,
> e, svašta ;), nego ja se nešto mislim da nađem zakrpu kako
> bi radio u rezoluciji koja meni treba. ne znam da li ima
> šanse da se umontira tako nešto ili je ta širina ekrana
> ukodirana na više mesta.
>
> kad već pominješ thelp (u verziji 3.1 radi sasvim dobro),
> da li možda znaš kako se može ona njegova help datoteka
> prevesti u običan text?
Vidiš, da bih ovo iščačkao nije mi trebalo puno vremena -- samo
sam instalirao THELP, disasemblirao ono što je zakačeno na
onaj int, valjda, 9 i čas posla.
Međutim, za ove druge dve stvari, očigledno je da je potrebno
znatno više čačkanja. :(
Meni je THELP radio sa drugim visinama ekrana, ali nikad
nisam probao sa drugim širinama. A što kažeš da ti ne radi, kad
ti je u .cfg fajlu 90? (ne mogu da probam, nisam pri kartici)
Problem formata THELP datoteke i mene zanima -- ali iz
malo drugačijih razloga od tvojih. Ti bi hteo, koliko ja znam
;) da prekonvertuješ THELP u onog naslednika NG, a ja bih voleo
da napravim od onog glomaznog help fajla u kome ima i Njindonjs
čuda, lepu i slatku DOS-onli verziju. Takođe, voleo bih da
napravim i hipertekst verziju JARGON fajla. NG ne radi posao,
jer on NIJE hipertekst vjuver. HELPPC jeste, ali ima izuzetno
ograničen broj stavki. Treba mi neki bolji.
IMA LI NEKO neki HIPERTEKST vjuver i kompajler za njega (ako je
potreban), koji može da se izbori sa bar dve hiljade stavki? I,
drugo,
KO ZNA NEŠTO O THELP FORMATU? Postoje li programi za THELP
kompajliranje i THELP dekompajliranje? Molim one koji su
dolazili u dodir sa Borlandovim BBS-om (ili, već, bilo čime gde
se Borland oglašava) da, ako se sete, malo bace pogled.
cccc.654janko,
> pratio, što će reći ZZivotic je pogrešio, btw, evo
> njegovog comp-a: ────┬───
> typedef struct direntry š └─ ne smem da tvrdim :)
> char filenameŠ14Ć;
> long size; <-- Long!?
> time_t ftim;
> ć;
>
> int compf(struct direntry *d1, struct direntry *d2)
> š
> return(int)(d1->size-d2->size);
> ć
>
> Ko je kriv? Zanima me.
Eto novog momenta. ;)
I mene zanima. Koliko je ZZ kriv, toliko si i ti -- što
bezrezervno veruješ, a ne razmišljaš. Naveo si toliko knjiga,
koje si pročitao, da mi nije jasno da, u trenutku kad si kucao,
već nisi posumnjao u to što kucaš! A i posle, kada sam ti
skrenuo pažnju, opet nisi bio shvatio.
(Dakle, na pogrešnom mestu si primenio ovo:
> Hej, savete sam tražio da bih usporedio i odabrao neki,
> ne da bi ih poslušao tek tako...)
I dalje sam siguran da gornji kod ne radi. Bar ne na C-u koji
nije čist 32-bitni ;) tj. ovo radi samo ako je int
četvorobajtni, što nije slučaj ni u MSC-u ni u BC-u. Ali, na
takovom C-u, nema potrebe ni deklarisati long, u ovakvoj
primeni.
Druga mogućnost je da pri punjenju size podatka program NE
ubacuje veličinu u bajtovima (koju daje findfirst), već je puni
nekom vrednošću tako da broj nikad ne prelazi int. Takvim
metodom sortiranje postaje "netačno." Ali, onda, čemu
deklarisanje long?
- * -
Za utehu, evo ilustracije kako i Borlandovi programeri
brljaju. ;) Tek pošto sam rešio problem sa svojim Thelpom,
blagodareći Marfiju, i, posebno, Mjovi, video sam i ispravku baga
u verziji BC++ 3.1.
Prvo, evo koda sa bagom, u BC++ 3.0:
mov ah,byte ptr bios_kbd_flags
and ah,8Fh
cmp ax,word ptr saved_state
jne L_exit
Ovde je greška u masci -- šta će programu informacija o Insert
stanju, koje je nepredvidljivo, a koju dobija preko najtežeg bita
u masci? Samo da ne može da se pop-apuje, pa da muči korisnike. ;)
Dok ga nisam disasemblirao, nisam nikako uspevao da zaključim od
čega zavisi taj pop-ap. Meni je izgledalo, od mesečeve mene. A i
sad mislim, ko, uopšte, ima pojma koje je stanje insert bita?
Nijedan program koga ja znam (osim ovog) ga ne koristi!
Evo i ispravke baga, u sledećoj verziji:
mov ah,byte ptr bios_kbd_flags
and ah,7Fh
and ah,8Fh
cmp ax,word ptr saved_state
jne L_exit
Ona DVA and imaju isti efekat kao i JEDAN: and ah, 0Fh, (na šta
se svodi POKE kog sam dao ;) ) ali je ispravka ipak upravo ovakava!
Dva puta brlj za Borland.
cccc.655janko,
> so, daj mu da sortira sadržaj, a ako jesi, onda pojma
> nemam što je toliko spor... :(
Zato što je radio sa pogrešnim podacima, sto mu muka!
Izgleda, još nisi shvatio šta si mu radio, sa tim skraćivanjem
brojeva? Evo jedne ilustracije, šta se, između ostalog, tada
događalo:
Npr., imaš brojeve A i B. I ti, sa onim zeznutim poređenjem
dobiješ jednom A>B.
U idućem prolazu porediš B i A. I dobijaš B>A. ;)
Dovoljno da ti se Qsort namuči, žešće.
Kapito?
PS. Ovo me podseti na jedan program, koji je izašao, možda,
još u Računarima 1. Zvao se nešto kao "Jive turkey," ako se
sećam. Program zamisli broj, ti treba da ga pogodiš,
a on ti govori da li je broji koji je zamislio veći ili manji
od onog koji otkucaš. Problem je bio, što je program, u tom
trenutku, nekada, namerno, LAGAO. E, vidiš, tebi je Qsort igrao
"Jive turkey" sa podacima koje si mu pripremio. ;)))
cccc.656bbizic,
> asm { les bx, dword ptr b1;
...
> shr dx, 1; }
> _comps1:;
> asm or ax, dx;
Znači li ovo da ni u BC 3.1 još nisu sredili tu glupost sa labelama u
asm {} bloku???? E, to nisu deca, to su ...
cccc.657vitez.koja,
#=> tako napravljene OBJ-ove moraš sa TLIB ubaciti u
#=> GRAPHICS.LIB, pa ih tek onda možeš pozivati!!! (barem
#=> tako piše u dokumentaciji koju nemam...)
Jos bih ti i poverovao, ali za ona 4 standardna fonta nije potrebno
ubacivanje u graphics.lib - linker ih "sažvaće" ;) bez problema.
Daklem, jos jednom :(, ko zna kako se linkuju drugi .chr fontovi u .exe
(Borland C) ?
cccc.658dcolak,
│ I mene zanima. Koliko je ZZ kriv, toliko si i ti -- što
│ bezrezervno veruješ, a ne razmišljaš. Naveo si toliko knjiga,
│ koje si pročitao, da mi nije jasno da, u trenutku kad si kucao,
│ već nisi posumnjao u to što kucaš! A i posle, kada sam ti
│ skrenuo pažnju, opet nisi bio shvatio.
Shvatio sam poentu i sve sredio jednim prostim if :)
A što se tiče prekucavanja, nisam ni hteo da pomislim
da je ZZivotic wrong, no od sada ;)
BTW, za sve je kriv moj drug koji se drznuo da uradi brži
DIR od mene, pa se onda ja kao zainatio pa reko da isprobam
QSort, sada sve radi kako valja i leti ko ludo :))
│ Dva puta brlj za Borland.
BTW, koliko je potrebno da se iskompajlira source od 30K,
linkuje sa graphics.lib i sa 5-6 include fajlova, u TC
naravno ;) ?
Sledge DAMMIR!
cccc.659dcolak,
│ Zato što je radio sa pogrešnim podacima, sto mu muka!
:))))))))))
│ Izgleda, još nisi shvatio šta si mu radio, sa tim skraćivanjem
│ brojeva? Evo jedne ilustracije, šta se, između ostalog, tada
│ događalo:
Ma tada sam bio izbacio long->int itd.. Pa mi je i dalje
išlo spooro, naravno zato što sam ja bio glup!!!
Imao sam običan sort tipa:
for (i=0; i<num; i++)
for (j=i+1; j<=num; j++)
{
switch(order)
{
case SIZE:
// poredi i sortiraj
QSORT(...
}
}
.. i u NJEGA SAM UBACIO QSORT!!!! Koja sam ja DILEJA!!!
Mora da je zbog škole, totalno me zeznula :))
BTW, hvala na savetima :)
Sledge DAMMIR!
cccc.660mjova,
> Meni je THELP radio sa drugim visinama ekrana, ali nikad
> nisam probao sa drugim širinama. A što kažeš da ti ne
> radi, kad ti je u .cfg fajlu 90? (ne mogu da probam, nisam
> pri kartici)
pa on radi za sve visine, ali ne i širine. jednostavno, kad računa
sledeći red on se ponaša kao da je na ofsetu 80 od početka tekućeg.
tako da se čitanje obično svede na dešifrovanje kineskog pisma.
90 sam u cfg stavio radi probe i tako ostade - nekako mi bilo logično
da može, ali on to ignoriše jer je to veća cifra od 80 koliko smatra
da je širok ekran.
> malo drugačijih razloga od tvojih. Ti bi hteo, koliko ja
> znam ;) da prekonvertuješ THELP u onog naslednika NG, a ja
> bih voleo da napravim od onog glomaznog help fajla u kome
> ima i Njindonjs
ma jok, ja bi hteo da neke stvari popravim u originalnom helpu,
eventualno raširim tekst (koji je pisan po nekoj levoj margini) i da
razdvojim c++ od običnog C-a.
što se tiče EH-a, to je moćna stvar, ali nije hyper-text fazon, tako
da mi se to ne sviđa. generalno, to rešava mnoge probleme, ali hyper
text je mnogo logičniji i bolji. ipak, prebacio sam tekst iz HelpPC-a
u .NG, i to radi, ali dok se tu snađeš za neke stvari...
cccc.661mjova,
> Daklem, jos jednom :(, ko zna kako se linkuju drugi .chr
> fontovi u .exe (Borland C) ?
vrlo jednostavno. treba da uradiš sledeće: kroz bgiobj preteraš sve
fontove i time dobiješ .obj, zatim ih sve tlib-om dodaš u graphics.lib
i oni su spremni za upotrebu.
možeš ih i direktno ulinkovati u exe pri linkovanju ostalih modula,
ali ono sa lib je po meni najbolje rešnje. takođe, ja sam dodao i .bgi
u lib i sve je ok.
e, sad, tu ima malih problema: u graphics.h nisu definisani svi
fontovi koji postoje u verziji 3.1, pa treba izvesti mali zahvat nad
tom datotekom. treba dodati nekoliko redova:
─────────────────────────────────────────────────────────────
/* !! These "functions" are NOT user-callable, !! */
/* !! they are there just so you can link in fonts !! */
void _Cdecl triplex_font(void);
void _Cdecl small_font(void);
void _Cdecl sansserif_font(void);
void _Cdecl gothic_font(void);
void _Cdecl bold_font(void);
void _Cdecl euro_font(void);
void _Cdecl complex_font(void);
void _Cdecl script_font(void);
void _Cdecl simplex_font(void); <─────────────────┐
void _Cdecl triplex_scr_font(void); │
│
extern int far _Cdecl triplex_font_far[]; │
extern int far _Cdecl small_font_far[]; │
extern int far _Cdecl sansserif_font_far[]; │
extern int far _Cdecl gothic_font_far[]; │
extern int far _Cdecl bold_font_far[]; │
extern int far _Cdecl euro_font_far[]; │
extern int far _Cdecl complex_font_far[]; │
extern int far _Cdecl script_font_far[]; │
extern int far _Cdecl simplex_font_far[]; │
extern int far _Cdecl triplex_scr_font_far[]; │
───────────────────────────────────────────────────────────── │
│
potraži u graphics.h i vidi šta fali pa to dodaj. ja sam ovu izmenu │
napravio pre nekog vremena i sad se ne sećam šta sam tačno radio. │
│
dalje, kad treba da taj font koristiš iz .exe, onda moraš │
'registrovati' i veznik i font. nekako ovako: │
│
˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ │
Error(registerbgidriver(EGAVGA_driver)<0); │
│
InputFont= registerbgifont(simplex_font); >─────────────────────┘
Error(InputFont<0);
˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙
kasnije, ovaj font upotrebljavaš tako što navodiš ˙InputFont˙ kao tip
fonta.
pazi, ovo ˙RADI˙ 100% ;)
cccc.662mjova,
> Znači li ovo da ni u BC 3.1 još nisu sredili tu glupost sa
> labelama u asm {} bloku???? E, to nisu deca, to su ...
da :((
to je bila prva stvar koju sam pokušao na novoj verziji.
cccc.663janko,
> BTW, koliko je potrebno da se iskompajlira source od 30K,
> linkuje sa graphics.lib i sa 5-6 include fajlova, u TC
> naravno ;) ?
Moram da te obavestim da se include fajlovi NE linkuju.
Sve manje verujem da si ti sve ono pročitao. ;>
Inače, ne razumem pitanje. Zašto koliko? Jako malo.
cccc.664janko,
> Jos bih ti i poverovao, ali za ona 4 standardna fonta nije
> potrebno ubacivanje u graphics.lib - linker ih "sažvaće"
> ;) bez problema. Daklem, jos jednom :(, ko zna kako se
> linkuju drugi .chr fontovi u .exe (Borland C) ?
Isto kao ona četiri standardna. Ako si njih uspeo da ulinkuješ,
i ostali se SKORO isto tako linkuju. Pogledaj malo help fajl --
tamo sve piše, (registerbgifont) osim ako imaš BC stariji
od 2.0. Drugo mesto koje treba da gledaš je GRAPHICS.H. Tamo bi
bilo korisno da dodaš par redova sa tim fontovima koji nisu
"ona četiri," onako kako je urađeno za "ona četiri," ako već
nemaš verziju koja ionako podržava ne "ona četiri" već "onih
devet."
BTW, tačno je da ne moraju da se trpaju u .LIB. Mogu da se samo
pretvore u .OBJ.
cccc.665dcolak,
│> BTW, koliko je potrebno da se iskompajlira source od 30K,
│> linkuje sa graphics.lib i sa 5-6 include fajlova, u TC
│> naravno ;) ?
│
│ Moram da te obavestim da se include fajlovi NE linkuju.
│
│ Sve manje verujem da si ti sve ono pročitao. ;>
Sto mu đavola pa ti si BAŠ preterao!!!! Da sam pročitao, pročitao
sam! A to što sam zaboravio da navedem '5-6 include fajlova' pre
reči linkuje to se može nazvati lapsusom kucanja u toku
smišljanja onoga što oću da napišem. Tek nakon reči graphics.lib
sam se setio i da navedem broj #include-a, a ne volim da
prepravljam već otkucano....
Odakle sva ta negativna energija??? :((((((
│ Inače, ne razumem pitanje. Zašto koliko? Jako malo.
Kad pitam koliko je potrebno, očekujem da mi odgovore bar u
sekundama, no hvala, ni ne očekujem odgovor. A pitao sam
jer mi drugar reče da TC brže kompajlira od MSC...
Uh bre, baš si me iznervirao :(((
Sledge DAMMIR!
cccc.666vitez.koja,
#=> Isto kao ona četiri standardna. Ako si njih uspeo da
#=> ulinkuješ, i ostali se SKORO isto tako linkuju. Pogledaj
#=> malo help fajl -- tamo sve piše, (registerbgifont) osim
Aman ljudi :( ovako je bilo : sve ide lepo do linka, onda izjavi
"fixup error at xx:xx" i gotovo... Nisam jos probao ovo sto predlazete
mjova i ti (probacu cim izadjem iz sora:) al' mi nekako ne lici :)
cccc.667bulaja,
│KO ZNA NESTO O THELP FORMATU? Postoje li programi za THELP
│kompajliranje i THELP dekompajliranje? Molim one koji su
│dolazili u dodir sa Borlandovim BBS-om (ili, vec, bilo cime gde
│se Borland oglasava) da, ako se sete, malo bace pogled.
└───
Poslednji put kad sam bacio pogled, na Borland BBS-u nije bilo niceg
slicnog :(.
cccc.668janko,
> Aman ljudi :( ovako je bilo : sve ide lepo do linka, onda
> izjavi "fixup error at xx:xx" i gotovo... Nisam jos probao
> ovo sto predlazete mjova i ti (probacu cim izadjem iz
> sora:) al' mi nekako ne lici :)
Aaaa, pa to je prosto: ako ti se samo zbog toga bunio, probio
si famoznu 64K granicu -- hoćeš mnogo fontova u istom programu. :)
Da bi to izveo, na strateškim mestima umesto
registerbgifont
ubacuješ,
registerfarbgifont
a isto i
registerbgidriver
svuda menjaš u
registerfarbgidriver
i obavezno koristiš lardž model.
I ima da fercera. :)
cccc.669janko,
> Kad pitam koliko je potrebno, očekujem da mi odgovore bar
> u sekundama, no hvala, ni ne očekujem odgovor. A pitao sam
> jer mi drugar reče da TC brže kompajlira od MSC...
Odgovor, u sekundama, jednostavno, nema smisla, jer zavisi od
strukture programa koji se prevodi, a pogotovu od mašine na
kojoj se prevodi.
Istina je da TC brže prevodi od MSC. Ako je nekom najbitinija
brzina prevođenja, i ne treba mu C++, ne znam brži prevodilac
od starog TC 2.01.
MS C prevodioci su sporiji i glomazniji, ali imaju bolju
optimizaciju generisanog koda od Borlandovih. Sećam se da me je
svojevremeno naročito "dojmio" jedan, ne tako važan, detalj:
if (a==-1)
kada a dovede u AX, BC (čak i 3.0) prevodi kao:
CMP AX,FFFFH
a MSC (već verzija 5) kao
INC AX.
Kao pravi asemblerski programer. Inače, ovaj metod optimizacije
je jedan od najjednostavnijih -- daleko komplikovanije za
realizaciju, i daleko kvalitetnije, optimizacije su one koje
treba da optimizuju korišćenje registara na većem delu koda
itd.
Ja sam na BC-u, pre svega, zato, što u doba kad je Borland imao
C++ kompajler, MS nije, Borlandovi kompajleri su manje zahtevni
(starije verzije) i Borland još uvek bolje prati promene C++
standarda od MS-a.
> Uh bre, baš si me iznervirao :(((
Slušaj, to da neki pričaju o "linkovanju .H fajlova" nije nova u
cccc temi -- možeš da proveriš i sam, čitajući stare poruke.
Jednostavno sam pomislio "evo ga još jedan."
Kao što rekoh, NHF. Svako nek smiruje sopstvene živce. :) ("a
taman sam ostavio piće" - Ima li pilota u avionu)
cccc.670vitez.koja,
#=> I ima da fercera. :)
Zahvaljujem, dobri covece :)
cccc.671dusanp,
Uzeo ja da cackam pre neki dan nesto u c-u. I, sta cu,
pocnem da radim u msc-u 5.0 (ili bese 5.1?) jer me muka
naterala na taj ocajnicki korak - to je zvanicni jezik
firme. E, sad, pocnem da trazim funkciju za pozicioniranje
kursora (sto se u BCu zove gotoxy()). Ispostavi se da
MSC NEMA FUNKCIJU ZA TO :>>>>
Jel ova izuzetno mocna funkcija koju sam morao da pisem
koristeci pozive biosa dodata novijim msc verzijama 6 i 7?
Jer ako nije, onda je stvarno smejurija.
I jos me ljudi iz firme gledali cudno "pa normalno da nema,
a sta ce ti to?"
Sad nisam siguran sta ce mi sledece zatrebati, a msc nece
znati za to? Otvaranje fileova? Rad sa tastaturom? ...? ;>
cccc.672dekiper,
>> MSC nema gotoxy()?
Ja do sada nisam radio sa MSC-om, ali ovo ipak znam. MSC ima funkciju
_settextposition() koja uradi identičnu stvar koju i gotoxy(). Definicija
funkcije je:
struct rccoord far _settextposition(short row, short column);
gde je struct rccoord:
struct rccoord
š
short row;
short column;
ć;
posle poziva, ona postavlja kursor na poziciju row i column, a u gore pomenutu
strukturu će upisati poziciju na kojoj je bio kursor pre pozivanje ove
funkcije...
Pozdrav, Deki
cccc.673dcolak,
│ Istina je da TC brže prevodi od MSC. Ako je nekom najbitinija
│ brzina prevođenja, i ne treba mu C++, ne znam brži prevodilac
│ od starog TC 2.01.
Fvala, to mi je trebalo, no ne verujem da ću napustiti
tandem QEdit, MSC :)
│ Kao što rekoh, NHF. Svako nek smiruje sopstvene živce. :) ("a
│ taman sam ostavio piće" - Ima li pilota u avionu)
New Hardcode Fucker? (No hard feelings ;))
Zahvaljujem na informacijama :)
Sledge DAMMIR!
cccc.674dcolak,
│ kursora (sto se u BCu zove gotoxy()). Ispostavi se da
│ MSC NEMA FUNKCIJU ZA TO :>>>>
Možda, _settextposition(x,y) ?
Sledge DAMMIR!
cccc.675dekiper,
Zašto ovo ne radi? Kompilovao sam sa Microsoft C-om 5.00 i kompilovanje prođe
ok. Porgram treba da iskopira 2 fajla jedan u drugi, a oni se prenose iz
komandne linije npr:
kopi fajl1.dat fajl2.dat
Problem je što program odbija da otvori izlazni fajl...
HELP!
Pozdrav, Deki
kopi.ccccc.676peca.st,
!-> Zašto ovo ne radi? Kompilovao sam sa
!-> Microsoft C-om 5.00 i kompilovanje prođe
!-> HELP!
Hm ako bi probao da kompajliraš program, umesto da
ga kompiliraš, možda bi uspelo, ovako teško.
Peđa.
P.S. Morao sam, NHF. ;)
cccc.677robert,
E, proveri da li ima nekih dodatnih flegova pored W_ONLY, nešto
u stilu CREATE ili sl. što će usloviti istovremeno kreiranje izlazne
datoteke. On sada verovatno pokušava samo da otvori datoteku za pisanje
ali nje nema...
cccc.678paki,
> Hm ako bi probao da kompajliraš program, umesto da
> ga kompiliraš, možda bi uspelo, ovako teško.
On nije probao da kompilira, već da kompiluje :)
cccc.679dr.grba,
>> On nije probao da kompilira, već da kompiluje :)
A tek što prevodi, milina jedna (((:
cccc.680dekiper,
>> Zašto ovo ne radi... ?
Pa, evo da odgovorim na svoju poruku... Funkcija _dos_open će OTVORITI fajl
za upis, a neće ga kreirati, kao druge klasične naredbe (fopen). Potrebno je
pre poziva _dos_open pozvati _dos_creat..., pa tek onda bilo šta raditi dalje.
Ovo nisam znao, ali sam provalio posle 10 minuta buljenja u HELP, inače sam
lupao glavu celo veče.
P.S. Neka bude u svesti, uvek...
cccc.681spantic,
Je li borlandovci, nešto vam Borland mlogo često izdaje prevodioce ;)
Već ste dogurali do BC/C++ 4.0
Ne zezam se. Ozbiljno :)
cccc.682dr.grba,
>> Je li borlandovci, nešto vam Borland mlogo često izdaje prevodioce
>> ;) Već ste dogurali do BC/C++ 4.0
Opšte poznata stvar je da Borland ne spava na lovorikama,
nego radi i gura napred.
cccc.683dekiper,
>> Borland C++ 4.0
Koliko ja znam, ovako nešto ne postoji...
Možda i grešim...
Pozdrav, Deki
cccc.684robert,
>> Ovo nisam znao, ali sam provalio posle 10 minuta buljenja u HELP,
>> inače sam lupao glavu celo veče.
Pa to sam ti i napisao u prethodnoj poruci!!! Ne znam kako nisi
video... valjda on onih što su te zezali ;))).
cccc.685debelijencija,
> Već ste dogurali do BC/C++ 4.0
Hm, pa zar nije Microsoft dogurao do MSC/C++ 7.0? Ko tu vrši hiperprodukciju
prevodilaca?
Uzgred, to se piše BC++ 4.0.
P.S. Da l' neko možda ima opis fajla u HPGL formatu? (.PLT) Pravim neki
program a od mene se traži da dajem upravo ovakav izlazni fajl. Ako neko
možda ne zna to je fajl koji se šalje HPovim laserjetovima. Bio bih vrlo
zahvalan toj dobroj duši koja bi mi tako nešto poslala bilo na mail, bilo
ovdi...
cccc.686maksa,
<><> P.S. Da l' neko možda ima opis fajla u HPGL formatu? (.PLT) Pravim neki
<><> program a od mene se traži da dajem upravo ovakav izlazni fajl. Ako neko
Imam knjigu, mailni me da se dogovorimo.
Druga solucija bi bila da dobijene vrednosti iz tvog prg.
baciš u GNUPLOT (obešen negde u nekoj conf) i odande izvezeš
crtež kao HPGL.
Uzgred, 'de nađe ovu temu? :)
cccc.687mjova,
u fajliću okačenom uz ovu poruku nalazi se modul koji služi
da brojni niz pretvori u slovni. tako nešto je napisao (za
kliper) nbatocanin, pa kome treba nek uzima.
autor je Saša Stojiljković
brojrec.arjcccc.688spantic,
>>> Borland C++ 4.0
> Koliko ja znam, ovako nešto ne postoji...
Već sam pročitao na USENETu, išlo je kao najava. Valjda bi trebalo
da idu i detalji.
cccc.689bulaja,
**** new file ****
R:\IBMPC\C\*.*
----------------------
actlib14 zip 70933 Lib raznih f() za C (date, string, tools) - source
version 1.4:
-----------
- function test_drive (TOOLS.LIB) completely re-written.
version 1.3:
-----------
** Turbo-Vision library TVTOOLS has been removed from this package.
** It is now available as TVTOOL13.ZIP and includes ACTLIB13.ZIP
- macros 'nodebug()' in NODEBUG.H to disable debugging of a program
- Bug correction in recursexp (REGEXP.C - STRINGS.LIB)
forgot some 'free'
- Bug correction in str(n)comp (COMP.C/NCOMP.C - STRINGS.LIB)
UPPER was hard-coded (to a wrong value!)
- Bug correction in vollabel (TOOLS.LIB)
suppress '.' from volume label
- function is_drive_ready() replaced by test_drive()
to enhance functionalities
(added a macro 'is_drive_ready()' for compatibility)
- change in fnreduce (TOOLS.LIB)
to increase compatibility with Microsoft.
cccc.690bulaja,
**** new file ****
R:\IBMPC\C\*.*
----------------------
tvtool14 zip 145376 Turbo Vision Tools Library v1.4 (source)
This package contains several libraries and their source code. Some
functions are quite complex, some other are very trivial but may be useful
just to centralize frequently called functions (and so allows to coherently
propagate modifications).
This library is dedicated to TurboVision but it contains a lot of
general-purpose functions (string handling functions, low-level tricks of
MS-DOS,...). If you are interesting in using it without TurboVision, it is
available as a separate (smaller) package ACTLIB. This should be located in
the C directory of the server where you downloaded TVTOOLS from.
cccc.691janko,
> Već ste dogurali do BC/C++ 4.0
Borland pravi BC++ a ne BC/C++. To "kroz" je MS-ova fora.
Inače, činjenica da je verzija nova ne znači da je u prošloj
bilo grešaka, već ljudi brže prate standarde:
Već BC++ 3.1 je imao cfront 3.0 kompatibilnost, a MSC/C++ 7.0
je po cfront 2.1 standardu. Već BC++ 2.0 je držao cfront 2.1
nivo, u vreme dok MSC nije ni pominjao da će ikada napraviti C++
kompajler.
cccc.692janko,
> u fajliću okačenom uz ovu poruku nalazi se modul koji
> služi da brojni niz pretvori u slovni. tako nešto je
> napisao (za
Brojni NIZ? Slovni niz? ;) Precizna terminologija, nema šta. ;>>
cccc.693dr.grba,
>> ....Već BC++ 2.0 je držao cfront 2.1 nivo, u
>> vreme dok MSC nije ni pominjao da će ikada napraviti C++ kompajler.
Eto, dok Microsoft programeri igraju odbojku po hodnicima u donjem vešu,
dotle Borlandova ekipa sedi i radi (;
cccc.694muaddib,
Zdravo svima,
imam jedan mali(velkiki) problem sa MS Visual C++. Elem, radim na programu
za MS Windows, i sve je bilo u redu dok nisam odlucio da izvrsim neke izmene
i da ga prebacim iz cistog C koda u C++ kod. E, tu nastaju problemi.
Kada deklarisem neku windows klasu npr.
WNDCLASS wndclass;
wndclass.lpfnWndProc = WndProc;
prilikom kompajliranja dobijem sledecu poruku
no conversion from
'long (__far __pascal *)(unsigned int ,unsigned int ,unsigned short ,long )'
to 'long (__far __pascal *)(unsigned int ,unsigned int ,unsigned int ,long )'
Funkcija WndProc je naravno definisana kao:
long FAR PASCAL WndProc(HWND, unsigned, WORD, LONG);
Sad dolazi ono najinteresantnije. Uzeo sam moj drugi program koji sam bez
problema prekompajlirao, i potom mu promenio ekstenziju sa .C na .CPP i bez
ikakvih izmena u kodu (samo promena ekstenzije) ponovo pustio kompajliranje.
Pogodite sta se desava. Tacno, kompajler je ponovo prijavio istu gresku.
Da li neko zna u cemu je problem. Napominjem da nemam dokumentaciju za
MSVC u kojoj je verovatno sve objasnjeno.
Pera
cccc.695dgrbic,
:: Već ste dogurali do BC/C++ 4.0
:: Ne zezam se. Ozbiljno :)
Hmmmm :)
Bilo bi interesantno čuti nešto o ovome, posebno zato što su već napravili
pravi 32-bitni kompajler za OS/2.
cccc.696djelovic,
> prilikom kompajliranja dobijem sledecu poruku
> no conversion from
> 'long (__far __pascal *)(unsigned int ,unsigned int ,unsigned short ,long )'
> to 'long (__far __pascal *)(unsigned int ,unsigned int ,unsigned int ,long )
C++ za razliku od C-a ima jaku proveru tipova, pa tako funkciji koja recimo
prima int* ne možeš poslati long*. U tvom slučaju pogledaj kako je u strukturi
WNDCLASS deklarisan pointer na funkciju lpfnWndProc, pa i ti tako deklariši
svoju funkciju WndProc. Razlika je, čini mi se, u trećem parametru, tj.
unsigned short <-> unsigned int.
cccc.697nkbog,
> 'long (__far __pascal *)(unsigned int ,unsigned int ,unsigned short,long )'
> to 'long (__far __pascal *)(unsigned int ,unsigned int ,unsigned int,long)'
Sasvim je moguće da C++ odbija da izvrši implicitni kast (cast) od short na
int, jer to u osnovi i nisu istotipni podaci. žini mi se da sam i ja
im'o slične randevue sa MS C/C++. Po tome kako si ti napisao sledi da
treći parametar, (koji je WPARAM, odnosno WORD tipa) može (na 32 bitnoj
mašini - NT, OS/2) da bude i 32 bitan, a ne sme. Sme da bude samo short.
Ja bih ti preporučio da koristiš WINDOWSX.H zaglavlje, a svuda koristiš
zvanične tipove promenljivih:
- kada se vraća long iz potprograma: LRESULT
- kada se prosleđuje parametar WPARAM, LPARAM,
- ako ti ustreba neoznačeni ceo broj, UINT, nikako WORD.
Dakle u tvom primeru:
> Funkcija WndProc je naravno definisana kao:
> long FAR PASCAL WndProc(HWND, unsigned, WORD, LONG);
stavi
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
NB.
cccc.698bulaja,
**** new file ****
R:\IBMPC\C\*.*
----------------------
snip0493 arj 162332 C-snippets 04/93, zbirka raznih C funkcija (source) #1
snip0493 a01 160019 C-snippets 04/93, zbirka raznih C funkcija (source) #2
Uz poruku je prikacen spisak svih funkcija u ovoj verziji Snippets-a,
sa napomenama sta je izmenjeno od prosle verzije.
snippets.arjcccc.699dcolak,
Pozdrav!
Jel zna neko kako da učitavam samo fajlove sa _A_SYSTEM
atributom?
Koristim _dos_findfirst(dir, FILE_ATTR, &fileinfo) i nikako
ne mogu da ga nateram da cita samo _A_RDONLY.. :))
Znam da je to lako za vas zato pomagajte ;)
Sledge DAMMIR!
cccc.700debelijencija,
> C++ za razliku od C-a ima jaku proveru tipova, pa tako funkciji
> koja recimo prima int* ne možeš poslati long*. U tvom slučaju
Jes' to je tačno. Ali mi nije jasno što? Da li neko ima logično objašnjenje?
Uzgred, to je jedan od glavnih razloga zbog kojih sam, zasad, batalio C++.
cccc.701djelovic,
> Koristim _dos_findfirst(dir, FILE_ATTR, &fileinfo) i nikako
> ne mogu da ga nateram da cita samo _A_RDONLY.. :))
Funkcije findfirst/findnext ne mogu se naterati da čitaju
*isključivo* fajlove sa nekim atributom, već one čitaju "normalne"
fajlove + one sa atributima koje ti navedeš. Recimo ako mu daš
A_DIRECTORY (ili kako se to već zove na MSC-u koji, ako se ne varam,
koristiš?), on će učitavati fajlove *i* direktorijume.
Ono što ti treba da uradiš jeste jedno:
if (fileinfo.attrib & A_RDONLY)
za svaki fajl i time utvrdiš da li je onaj koji tebi treba.
cccc.702djelovic,
> Jes' to je tačno. Ali mi nije jasno što? Da li neko ima logično
> objašnjenje? Uzgred, to je jedan od glavnih razloga zbog kojih sam,
> zasad, batalio C++.
Striktnost pri proveri tipova se smatra za vrlinu kod jezika,
jer ubija one hard-to-find bube. Dalje, ona je u objektno-orijentisanim
jezicima neophodna jer, šta bi se desilo da neko umesto int-a pošalje
neku klasu? Ne znam koliko si C++ devica :), pa ne znam koliko me razumeš,
ali ako hoćeš reci, pa da smislimo neki mali primer?
cccc.703robert,
>> Jes' to je tačno. Ali mi nije jasno što? Da li neko ima logično
>> objašnjenje?
Pa jel bi ti, kad bi pravio džem od kajsija, u lonac trpao i
višnje i jabuke i breskve...???
cccc.704robert,
>> Znam da je to lako za vas zato pomagajte ;)
Ma moraš sve da učitaš pa da dalje u programu filtriraš šta ti
treba. To ti je isto kao i sa direktorijumima, ne možeš samo njih da
čitaš već moraš sve pa onda if...
cccc.705mjova,
>> C++ za razliku od C-a ima jaku proveru tipova, pa tako
>> funkciji koja recimo prima int* ne možeš poslati long*. U
>> tvom slučaju
> Jes' to je tačno. Ali mi nije jasno što? Da li neko ima
> logično objašnjenje?
jedan od razloga je sigurno preopterećivanje operatora i više
različitih funkcija istog imena (različitih parametara).
cccc.706mjova,
> Znam da je to lako za vas zato pomagajte ;)
nikako ti dos ne može vratiti samo fajlove koji imaju dati atribut. o
tome sam pisao ovde po conf relativno skoro (mesec-dva).
ako želiš da dobijaš fajlove samo jednog atributa onda moraš sam
srediti svoje funkcije. naime, u pozivu findfirst moraš navesti da
hoćeš sve fajlove (0xFFFF), a pre upotrebe prvo im moraš proveriti
atribute, pa tek onda da deluješ.
predlažem ti da napraviš svoje funkcije za findfirst/next koje će
raditi ispravno.
cccc.707dcolak,
│ if (fileinfo.attrib & A_RDONLY)
│
│ za svaki fajl i time utvrdiš da li je onaj koji tebi treba.
Ali to mi je spooro :(
BTW, zašto onda radi _A_VOLID što mi izda samo volume label? :(
Baš šteta, znači mora da se komplikuje :(
Sledge DAMMIR!
cccc.708dcolak,
│ predlažem ti da napraviš svoje funkcije za findfirst/next koje će
│ raditi ispravno.
Da, da, i onda će program preći 35K EXE-a :((( :)
Sledge DAMMIR!
cccc.709dcolak,
│ Ma moraš sve da učitaš pa da dalje u programu filtriraš šta ti
│ treba. To ti je isto kao i sa direktorijumima, ne možeš samo njih da
│ čitaš već moraš sve pa onda if...
BTW, u QuickC Bible piše da se findirst koristi sa _A_XXXX da bi
čitao samo fajlove datog atributa!
Sledge DAMMIR!
cccc.710debelijencija,
> Striktnost pri proveri tipova se smatra za vrlinu kod jezika,
> jer ubija one hard-to-find bube. Dalje, ona je u
> objektno-orijentisanim jezicima neophodna jer, šta bi se desilo
> da neko umesto int-a pošalje neku klasu? Ne znam koliko si C++
> devica :), pa ne znam koliko me razumeš, ali ako hoćeš reci, pa
> da smislimo neki mali primer?
Pa je l' to znači da je C jezik bez vrlina? :) Meni je lepo kad mogu
intu da dodelim char, a da ne mislim šta će da bude i da se ne bakćem
sa pisanjem posebnih funkcija. Ne razumem se baš u teoriju prog.jezika,
ali je ta osobina C-a zgodna i kod pointera (void pointer dodeliš npr. int
pointeru, i svima lepo).
Umesto inta klasu? čurka, verovatno! :) Ali što da ne pointer na klasu?
To mi nije jasno. Dakle, ne kao u C-u, radi šta hoćeš, nego radi šta možeš.
Koliko znam C++? Malo. Probao sam jednom nešto, a onda me je dočekala
gomila errora zbog dodela, pa sam ga batalio. Kad nađem vremena, pokušaću da
ga prostudiram, da vidim da li je prelaženje na isti vredno ili ne.
Pa, ne znam koliko bi primer pomogao, ali ako još nekog zanima, što da ne?
Tj. ako imaš vremena i živaca :). Ako je samo zbog mene, nije neophodno,
snaći ću se ja i sam :).
cccc.711debelijencija,
> Pa jel bi ti, kad bi pravio džem od kajsija, u lonac trpao i
> višnje i jabuke i breskve...???
Ah, to mi je omiljena tema!
Vidi, u džem od kajsija (jedan od najboljih :), možeš da trpaš i jabuke i
breskve (radi arome). žak je malo jabuka i poželjno! Ali za višnje ga malo
pretera! To bi bilo kiselo u ... :)
Ozbiljno. Pa tako nešto C dozvoljava. A C++ je nastao od C-a.
cccc.712debelijencija,
> jedan od razloga je sigurno preopterećivanje operatora i više
> različitih funkcija istog imena (različitih parametara).
Za ovo prvo mi nije baš najjasnije, ali za drugo se slažem. Na to, vidiš,
nisam ni pomislio :).
cccc.713mjova,
>│ predlažem ti da napraviš svoje funkcije za findfirst/next
>│ koje će raditi ispravno.
> Da, da, i onda će program preći 35K EXE-a :((( :)
pa ako ti to pođe za rukom, onda bre zaboravi C, a i programiranje
komplet ;).
zar je problem da uradiš nešto ovako:
// ╔════════════════════════╗
// ║ 18/06/1993 - mjova ║
// ╚════════════════════════╝
#include <stdio.h>
#include <dir.h>
#include <dos.h>
static int attr; // vidljivo samo u ovom modulu
//----------------------------------
int ff(const char *pathname, struct ffblk *ffblk, int attrib) {
int ret;
attr= attrib;
ret= findfirst(pathname, ffblk, 0xffff);
if(ret)
return(ret);
// ovaj uslov može da bude i
// if((ffblk->ff_attrib & attr) == attr)
// da bi dobio samo one fajlove koji imaju setovane SVE
// potrebne atribute (a i dole)
if(ffblk->ff_attrib & attr)
return(ret);
do {
ret= findnext(ffblk);
if(ffblk->ff_attrib & attr)
return(ret);
} while(!ret);
return(ret);
}
//----------------------------------
int fn(struct ffblk *ffblk) {
int ret;
do {
ret= findnext(ffblk);
if(ffblk->ff_attrib & attr)
return(ret);
} while (!ret);
return(ret);
}
//----------------------------------
int main(void) {
struct ffblk ffblk;
int done;
printf("Directory listing of *.* and FA_RDONLY | FA_HIDDEN\n");
done = ff("*.*", &ffblk, FA_RDONLY | FA_HIDDEN);
while (!done) {
printf(" %s\n", ffblk.ff_name);
done = fn(&ffblk);
}
return 0;
}
//----------------------------------
ovo lepo optimizuješ i dobiješ univerzalne funkcije koje rade lepo,
brzo i tačno ;). no, postoji jedan problem, ti radiš na MSC-u, pa
imaš urođenu odbojnost prema svemu što nije MSC. ipak, sačuvaj ovaj
kod, može ti doneti kolor tv ;).
cccc.714paki,
> Ozbiljno. Pa tako nešto C dozvoljava. A C++ je nastao od C-a.
Pa evolucija čini svoje :)))
cccc.715robert,
>> Ozbiljno. Pa tako nešto C dozvoljava. A C++ je nastao od C-a.
Znam ja da to C dozvoljava ali C++ je "bolji C" kako vole da ga
zovu njegovi stvaraoci i zagovornici (pa i ja ;). Uostalom, djelovic
ti je već objasnio u grubim crtama o čemu je reč, tj. o strogoj
proveri tipova podataka koji se prenose kao argumenti po funkcijama.
To ti pomaže da se neke greške u startu onemoguće, da postaneš
disciplinovan programer koji vodi računa o svom kodu i ne brka babe i
žabe pa onda i sam kompajler kod preopterećenih (overloaded) funkcija
(ili operatora) ne bi znao koju funkciju da odabere jer se biranje
upravo vrši na osnovu tipova argumenata. Uostalom, skini sa Sezama
CPPTUTOR (u C diru) a možeš i FAQCPP (frequently asked questions about
C++) ili tako nekako. Prelistaj C direktorijum ovde pa ćeš već naći
ove datoteke.
cccc.716dcolak,
│ pa ako ti to pođe za rukom, onda bre zaboravi C, a i programiranje
│ komplet ;).
Ma štos je u tome da je DIR naredba duga oko 29K, a ja oću da tako
i ostane, kad već nije manje :)
Hvala za primer, to sam i sam uradio, no jednostavno sam mislio
da može lakše jer mi drug reče da to u TP radi...
│ ovo lepo optimizuješ i dobiješ univerzalne funkcije koje rade lepo,
│ brzo i tačno ;). no, postoji jedan problem, ti radiš na MSC-u, pa
│ imaš urođenu odbojnost prema svemu što nije MSC. ipak, sačuvaj ovaj
│ kod, može ti doneti kolor tv ;).
Ex, slučajno videh ovaj deo poruke, i tedoh da primetim da to
NIJE MSC :))) No, uradiću tako nešto ;)
Sledge DAMMIR!
cccc.717ppekovic,
>> predlažem ti da napraviš svoje funkcije za findfirst/next koje će
>> raditi ispravno.
Postojeće rade ispravno, tj. upravo onako kako je
dokumentovano.
Paya
cccc.718mjova,
> >> predlažem ti da napraviš svoje funkcije za findfirst/next koje će
> >> raditi ispravno.
> Postojeće rade ispravno, tj. upravo onako kako je
> dokumentovano.
ajde, ajde pajo, ne budi dosledan ;), znaš ti šta sam ja mislio.
rade one ispravno, ali nelogično (bar na prvi pogled). dakle,
umesto reči 'ispravno' stavljam reč 'logično'. jel to ok? ;)
cccc.719dgrbic,
:: BTW, u QuickC Bible piše da se findirst koristi sa
:: _A_XXXX da bi čitao samo fajlove datog atributa!
Piše... Piše i u Ustavu da je Srbija demokratska.
Ono za QuickC će biti mala nepažnja pisca. A ono za Ustav?
cccc.720dnikolic,
Video sam da u BC postoji funkcija koojom mogu da pamtim datume kao broj
sekundi proteklih od 01.01.1970. godine (time). E sad, ne mogu da nadjem koja
funkcija taj broj pretvara u "normalan" datum. Zna li neko koja funkcija
obavlja taj posao?
dn
cccc.721mjova,
> mogu da nadjem koja funkcija taj broj pretvara u
> "normalan" datum. Zna li neko koja funkcija obavlja taj
> posao?
unixtodos & dostounix
cccc.722janko,
Imamo više od 1M na pločama, a ne koristimo ih, kako bismo
mogli.
Koji kompajleri za C umeju da generišu programe u protektid
modu (tj. da naprave programe koji rade sa memorijom iznad 1M
kao da je najobičnija memorija?)
Da li to može da uradi MSC/C++ 7.0 ?
Borlandovi to ne umeju.
Ko je koristio kompajlere drugih proizvođača? Zanima me koliko
su ti, koji to mogu, upotrebljivi (npr. imaju li gotove
grafičke biblioteke?). I, naravno, koji su.
cccc.723dejanr,
>> Koji kompajleri za C umeju da generišu programe u protektid
>> modu (tj. da naprave programe koji rade sa memorijom iznad 1M
>> kao da je najobičnija memorija?)
High C. Radi jako lepo, memorija je stvarno linearna (a čak može
da bude i mnogo veća od RAM-a, ako se koristi disk kao virtuelna
memorija, naravno uz određeno usporenje). Mada, nedostaje mu ono
bogatstvo funkcija Microsoft i Borland C-a, dođe više kao neki
"običan" C. Bar u verziji koju sam ja video.
cccc.724albor,
Da li ima korisnika 'Vermont Views'-a i u kakvom susedstvu oni rade: koja
baza podataka i sl.
Za radozlane da pomenem da je reč o C biblioteci sa preko 550 funkcija koja
služi prevashodno za pravljenje korisničkih interfejsa. Postoje verzije za
MSDOS, UNIX, OS/2, XENIX, VMS, ... ukratko zvuči jako interesantno !
Dakle ako neko ima iskustva ili bar informacija, molim nek zakuca odgovor.
Pozdra, Boris
cccc.725bulaja,
│Ko je koristio kompajlere drugih proizvodaca? Zanima me koliko su ti,
│koji to mogu, upotrebljivi (npr. imaju li gotove graficke biblioteke?).
└───
Igrao sam se malo sa Watcom C (valjda je i C++ ne secam se vise:),
verzija 9.0. Ceo paket je dosta Ok, moze da se radi i za Windows i za
OS/2, dobijaju se uz njega i neki DOS extenderi. Kompajler je PRAVI 386
protected mode, a radi super - kazes mu lepo "daj mi jedno 4 mega RAM",
on ti lepo odgovori "izvolite vasih 4 mega". Bez problema, petljavina i
sl., odusevio sam se :). Ne znam kakvu graficku biblioteku ima, cini mi
se da sam video i neku grafiku radjenu u njemu al' se ne secam. Mislim
da je pocetkom prosle godine bio u Racunarima test Watcom C-a, pogledaj.
cccc.726.bale.,
Odgovor .obj-u, ne mogu da nadjem gde je bila poruka :)
#define PRIME 211
#define EOS '\0'
int hashpjw( char *s )
{
char *p;
unsigned h = 0, g;
for( p = s; *p != EOS; p = p + 1 )
{
h = ( h << 4 ) + ( *p );
if( g = h & 0xf0000000 )
{
h = h ^ ( g >> 24 );
h = h ^ g;
}
}
return( h % PRIME );
}
/* U opstem slucaju, PRIME je prvi prost broj veci od broja ulaza u
hash tabelu. */
P.S. Izgleda ;) da radi samo sa 32 bita.
Regards from .bale. !
#:*)+-<
cccc.727dejanr,
>> mislim da je pocetkom prosle godine bio u Racunarima test Watcom C-a,
>> pogledaj.
"Računari 78", strana 30.
I ja sam tada probao Watcom C ali nisam bio zadovoljan, High C je davao
dosta brži kod. Naravno, možda su novije verzije donele neke nove odnose.
cccc.728dj.rainovic,
Ţ Koji kompajleri za C umeju da generišu programe u
Ţ protektid modu (tj. da naprave programe koji rade sa
Ţ memorijom iznad 1M kao da je najobičnija memorija?)
GNU C++ ?? Mislim da može. Ima li neko iskustva sa tim kompajlerom.
cccc.729zormi,
* Koji kompajleri za C umeju da generišu programe u protektid
* modu (tj. da naprave programe koji rade sa memorijom iznad 1M
* kao da je najobičnija memorija?)
Imam negde original stari Metaware High C u kompletu sa Phar Lap
linkerom. Koristio sam ga za pravljenje C modula za Matlab 386 i
to je radilo u protected modu, uglavnom razne operacije sa matricama
gde je 8 MB RAM-a vrlo korisno.
cccc.730jtitov,
Zamolio bih za savet za neku dooobru biblioteku za rad sa bazama.
Spominjali mi CodeBase i ParadoxEngine... Ja o tome pojma nemam ali me zanima.
cccc.731mark,
KAko da ispisem random brojeve u C-u ???
Cemu sluzi VOID??????
Marko (the pocetnik)
P.S. Koju knjigu predlazete za "pocetak".
cccc.732ppekovic,
>> KAko da ispisem random brojeve u C-u ???
#include <stlib.h>
int rand(void);
vraca psudoslucajni broj izmedju 0 i 32767.
void srand(unsigned seed);
postavlja početnu vrednost za generator slučajnih brojeva.
Dakle, prvo startuješ seed sa nekim proizvoljnim brojem. Obično
je to trenutni broj sekundi, stotinki. Zatim koristiš rand().
>> Cemu sluzi VOID??????
Kupi neku knjigu za C. Prelistaj stare poruke, bilo je više
puta reči o najboljim knjigama za učenje C-a.
Paya
cccc.733jasicp,
Hteo sam odavno nesto ovako da napisem, ali nisam smeo...
Naime, vec godinama programiram u Pascalu i dBase jezicima. C znam malo
a C++ skoro nimalo. Hajde neko da mi kaze bez zezanja da li da ozbiljno
pocnem da ucim C++, tj. da li se isplati. U cemu je C++ bolji od, npr.
Pascala 7.0 ? Ako nekog ne mrzi. neka napise konkretno. Napominjem da C
znam cisto informativno, a Pascal koristim ( objektni ) vec dugo ozbiljno.
Namerno sam poslao ovo u C temu, valjda je drustvo ovde kompetentno.
Samo da vam kazem, nemojte da udarite u reklamu jer me stvarno ozbiljno
interesuje a vremena nemam za bacanje...
Big Hvala, Pedja !
cccc.734mdimitrijevic,
Postoji li neka zamena u Borland C++ 3.1 za _based pointer. Da li to Ęmoze
nekako │d│a se simulira. Treba mi da prevedem MENU.C Zorana Zivotica.
Prilicno je hitno.
Marjan Dimitrijevic
cccc.735janko,
> Naime, vec godinama programiram u Pascalu i dBase
> jezicima. C znam malo a C++ skoro nimalo. Hajde neko da mi
> kaze bez zezanja da li da ozbiljno pocnem da ucim C++, tj.
> da li se isplati. U cemu je C++ bolji od, npr. Pascala 7.0
> ? Ako nekog ne mrzi. neka napise konkretno. Napominjem da
> C znam cisto informativno, a Pascal koristim ( objektni )
> vec dugo ozbiljno.
Ako stvarno koristiš objektna svojstva Paskala, po meni, vredi
da počneš da učiš C++.
Evo kako bih ja pisao o tome:
----
1. Standardizacija
TP
TP je proizvod jedne firme, nestandardizovan. žak se, od
verzije do verzije, razlikuje i sam od sebe. Vrlo davno, pisao
sam neke programe na nekim starim TP-ima. Onda je došla
četvorka, pa petica, i programi uz nju za "konverziju starog
sorsa u novi." Ti programi ni najtrivijalnije stvari nisu umeli
da konvertuju. Npr. ono što se od četvorke zove readkey se
dotle zvalo read(kbd,c) ali to taj program nije umeo da
prepravi. Tragično. Uz to, nekompatibilnosti između TPU fajlova
između svake verzije su nešto na šta se ovde ljudi često žale.
C++
C++ još uvek nije potpuno standardizovan, iako komisije ubrzano
rade. Ipak, pratični standard su verzije cfront kompajlera koga
pravi firma AT&T, gde je zaposlen, između ostalih, i idejni
tvorac C++ jezika. Sve firme koje prave C++ kompajlere se
nadmeću koja će što više ispoštovati standard. To deje lepe
rezultate, da ne samo da programi (osim kada koriste "prljave
metode") postaju nezavisni od kompajlera, već postaju nezavisni
i od mašine za koju su pisani.
2. Osobine jezika
Navešću ih samo par, čisto da zainteresuju onoga koga mogu da
zainteresuju.
- Za razliku od TP-a, u C++-u se objekti aktiviraju automatski po
definisanju. To znači da ne moraš da peške pozivaš svakog
konstruktora i denstruktora za svaki objekt. Objekti u C++ se
inicijalizuju ekvivalentno modulima (izvinte, junitima) u TP-u.
Kao kada kažeš
uses NekiJunt;
i znaš da se izvršilo parče koda imeđu glavnog begin..end
junita, to u C++ radi za svaki objekt, onda kada ga deklarišeš.
Što je još lepše, "trajanje" objekta je vezano za tzv. skoup.
To će reći, objekt će se automatski i ugasiti, kad izađe iz
svog opsega vidljivosti, opet pozivajući deo koda koji nema
svog ekvivalenta u TP junitima jer su oni vidljivi kroz ceo
junit u kome se koriste.
Ova osobina TP-a, da se svaki konstruktor, a posbeno,
destruktor, mora eksplicitno pozivati, je, po meni, jedan od
najneugodnih nedostataka objektnog TP-a.
(Ne znam da li su promenili nešto posle TP 6.0, ja od TP-a još
uvek koristim samo TP 5.5. Uglavnom ga koristim za vrlo mele
programe, i programe koje moram da mogu da prevodim na svakoj
mašini, bila ona XT sa pola mega slobodno ili nešto drugo...)
- Za razliku od TP-a, u C++-u postoje, između ostalih:
+ mehanizimi difolt (izgovor je difoot, rekao bi fensi, ali mi
znamo da se l pretvara u o i u našem jeziku, pa mu dođe na isto
;) ) parametara pri pozivu procedure. Npr.
pisi( "Pera" ) može da izazove pisanje horizontalno a
pisi( "Pera" , VERTIKALNO ) ili
pisi( "Pera" , KOSO_NANIZE ) itd. te druge mogućnosti.
+ mehanizmi "kastovanja" iz tipa u tip. Npr. ako imam proceduru
crtaj koja radi sa tipom Tačka, a imam samo dva realna
parametra a i b, mogu lako da je pozovem sa
crtaj( Tacka(a,b) );
Neka kastovanja su, čak, automatska. Za razliku od Paskala, u
C-u sasvim mirno mogu da kažem:
int i;
float a;
a zatim
a=i;
ili
i=a;
ako znam šta radim.
----
Itd. itd.
Neću dalje pisati, jer mislim da ova tema vredi za jednu lepu
malu seriju članaka... ;)
cccc.736dejanr,
>> Naime, vec godinama programiram u Pascalu i dBase
>> jezicima. C znam malo a C++ skoro nimalo. Hajde neko da mi
>> kaze bez zezanja da li da ozbiljno pocnem da ucim C++, tj.
>> da li se isplati. U cemu je C++ bolji od, npr. Pascala 7.0?
Turbo Pascal je na neki način "ćorsokak". Na koju god mašinu
dođeš, naići ćeš na C (ili u novije vreme C++) dok TP postoji
samo kod Borlanda (doduše, u jednom trenutku je i Microsoft
napravio Turbo Pascal "kompatibilca", ali su izgleda posle
odustali). Osim toga, realno je očekivati da će C programi,
ako imaš dobar kompajler, biti bolje optimizovani (tj. nešto
brže se izvršavati) od sličnih programa na TP-u, pošto TP-u
optimizacija nikada nije bila udarni novitet. Osim toga, razni
C-ovi su bolje "integrisani" u DOS, već po tome što prave .OBJ
fajlove umesto TPU-ova koji čak nisu kompatibilni od jedne verzija
do druge.
Sa "minus" strane, primetićeš da je raditi na TP-u mnogo komfornije
(naročito ako si se navikao na IDE), udariš Alt R i program već preveden.
žak ako vidiš grešku tri reda niže od kurzora, brže ti da lupiš Alt R
pa da ti on dovede kurzor do te greške nego da pritiskaš tri-četiri puta
srelicu na dole i na levo (ili desno). O takvoj brzini prevođenja sa
ovim C kompajlerima koje sam video možeš samo da sanjaš. Osim toga,
stalno se nešto učitava sa diska, te kompajler, te debager, ... a kod
TP/IDE sve je u memoriji i radi trenutno.
Što se tiče objektnih ekstenzija, kažu ljudi da je tu C++ prirodnije
rešenje.
cccc.737mdimitrijevic,
Kako da koristim Turbo Profiler iz Borland C++ v3.1 paketa.
Kako da prevedem program da bih ga posle mogao 'provuci' kroz TPROF.
I sta startovati u menijima da bi mi ═radio :))))
Marjan Dimitrijevic
cccc.738dejanr,
Microsoft Visual C++. NOVOSTI/microb 4.774.
cccc.739mjova,
> Kako da koristim Turbo Profiler iz Borland C++ v3.1
> paketa. Kako da prevedem program da bih ga posle mogao
> 'provuci' kroz TPROF. I sta startovati u menijima da bi mi
> ═radio :))))
prevedi ga kao i za slučaj da startuješ turbo debuger. parametar -v
komandne linije. sve komande su iste kao u TD, samo što ne možeš
vršiti provere sadržaja baš svega, ali zato možeš da vidiš koliko
vremena treba za neku fn, koliko se puta poziva u toku rada, itd.
cccc.740mdimitrijevic,
Pisem disk katalog program u C-u pa mi treba rutina koja cita sadrzaj ZIP
arhiva. Takav source je ZIPOFF samo sto on ne vrsi provere o ispravnosti
ZIP-ova kao sto cini UNARJ za ARJ arhive. Ako neko ima nesto slicno molim da mi
posalje.
P.S. Prilicno je hitno !!!
Marjan Dimitrijevic
cccc.741ppekovic,
>> Pisem disk katalog program u C-u pa mi treba rutina koja cita sadrzaj ZIP
>> arhiva.
Na FFS-u imaš arhivu fff360 u okviru koje je file finder u
source-u. Taj ff traži i po arhivama pa je dat i deo source-a koji
se odnosi na listanje sadržaja arhiva. Detaljno je napisana
struktura većine poznatijih arhivera.
Paya
cccc.742mjova,
> Pisem disk katalog program u C-u pa mi treba rutina koja
> cita sadrzaj ZIP arhiva.
potraži na FON-u, ne znam da li ima i ovde, fajl koji se zove
˙fff360.*˙ jer u njemu imaš izvorni kod programa za pretraživanje
diska, a to radi i po arhivama. sve što ti treba za većinu popularnih
arhivera možeš odatle uzeti.
cccc.743djnsnd,
Da li neko moze da mi pomogne?
Ne znam kako da jednu .ASM datoteku prevedem u .OBP umesto u .OBJ.
Radi se o TASM koji je deo BC++ i BP.
Naravno, pronasao sam prekidac /op pomocu kojeg TASM generise kod
za rad u protected mode-u, ali rezultat je i dalje .OBJ datoteka.
Unapred hvala.
Djn
cccc.744mdimitrijevic,
Mnogo hvala ppekovicu i mjovi.
Pozdrav,
Marjan Dimitrijevic
cccc.745draganm,
*> prevedi ga kao i za slucaj da startujes turbo debuger.
*> parametar -v komandne linije. sve komande su iste kao u TD,
*> samo sto ne mozes vrsiti provere sadrzaja bas svega, ali zato
*> mozes da vidis koliko vremena treba za neku fn, koliko se puta
*> poziva u toku rada, itd.
Nisu sve komande iste, najveca mana TDPROF-a je sto nema breakpoint-e,
backtrace, execute to, trace, instructio trace ....
cccc.746miroljub,
Imam problem sa apstrakciom podataka u C-u. Evo o cemu se radi.
Nameravao sam da napravim pojednostavljenu Clipperovu funkciju EMPTY().
U C-u bi trebalo da izgleda ovako:
int empty(void *ptr)
Ukoliko se funkcija pozove sa argumentom koji je pointer na string,
onda funkcija vraca 1 ako su svi karakteri stringa SPACE
(inace vraca 0);
a ukoliko se funkcija pozove sa argumentom koji je pointer na numericku
velicinu (int, float, double), onda funkcija vraca 1 ako je numericka
velicina jednaka nuli (inace vraca 0).
Ceo problem je - kako u funkciji empty() utvrditi kog je tipa argument
koji je prosledjen funkciji pri pozivu.
Vidojko Ciric u svojoj knjizi "Objektno orjentisano programiranje" u
poglavlju o "obicnom - neobjektnom" C-u to resava tako sto uvodi jos
jedan argument. Medjutim mene interesuje kako to moze da se resi sa
samo jednim argumentom kao sto je izvedeno u Clipperu.
cccc.747wizard,
> int empty(void *ptr)
> Ceo problem je - kako u funkciji empty() utvrditi kog je tipa argument
> koji je prosledjen funkciji pri pozivu.
Pa zašto trpaš sve u jednu funkciju? Iz konteksta tvoje poruke mi se
čini da programiraš u C++, a u tom slučaju sve što treba da uradiš je
da preklopiš ("preopteretiš", "overloaduješ" :) ime tvoje funkcije,
npr.:
int empty(char*);
int empty(double*);
i napišeš dve funkcije od kojih svaka radi svoj posao na svoj način i
kako treba. Slično uradi i za int, long i druge argumente.
Ako ne koristiš C++ ekstenzije, ja ti ne mogu pomoći. U stvari, mislim
da ti niko i ne može pomoći da uradiš ono što si naumio na način na koji
naumio, jer, koliko je meni poznato, a poznato mi je, tako nešto je u
običnom C-u nemoguće. :)
cccc.748vpetrovic,
Pitanje za Turbo C 2: Kada neka funkcija zove sistemske interapte ona
uglavnom unisti registre. Da li postoji neki nacin da se kaze kompajleru da
sacuva sve registarske promenljive pre poziva te f-je i da ih kasnije vrati
u registre. U helpu nadjoh 'volatile' ali ne pise da li se odnosi i na
funkcije, tj. pise da se odnosi na promenljive koje se onda nece cuvati u
registrima.
cccc.749todorp,
> Pitanje za Turbo C 2: Kada neka funkcija zove sistemske interapte ona
> uglavnom unisti registre. Da li postoji neki nacin da se kaze kompajleru
Pogledaj poruke oko 346 u ovoj temi. Mozda ti pomogne. TC++ ima _savereg ali
mislim da to nemas u TC 2.1 Mozda bi mogao da smestis registre u neki niz pa
posle pokupis sadrzaj?
Pozdrav od Todora.
ps. Ako ti nije tesko aj' reci sta ce ti to, mislim sta te briga ako unisti
registre? Nista ne kritikujem samo pitam O:)
cccc.750vpetrovic,
>> Pogledaj poruke oko 346 u ovoj temi. Mozda ti pomogne. TC++ ima _savereg
>> ali mislim da to nemas u TC 2.1 Mozda bi mogao da smestis registre u neki
>> niz pa posle pokupis sadrzaj?
>> Pozdrav od Todora.
>> ps. Ako ti nije tesko aj' reci sta ce ti to, mislim sta te briga ako unisti
>> registre? Nista ne kritikujem samo pitam O:)
Pa, pisao sam jedanput program koji zovi neki dosov interapt za čitanje
sektora. Naravno, taj dosov interapt je menjao registre. E, a kompajler je
jednu promenljivu iz maina smestio u registar i, logično, poziv funkcije
poremeti zadržaj te promenljive. Trebalo mi je tri sata dok sam shvatio u
čemu je štos :). Sad sam se opametio, ali bilo bi lepše da ima neka ključna
reč i ja to stavim u deklaraciji f-je, nego da sam snimam registre, pa da
ih posle vraćam.
cccc.751todorp,
> sektora. Naravno, taj dosov interapt je menjao registre. E, a kompajler
> je jednu promenljivu iz maina smestio u registar i, logicno, poziv
> funkcije poremeti zadrzaj te promenljive. Trebalo mi je tri sata dok sam
U bre ovi kompajleri nista nevaljaju :)) Bice da ti nesto nisi dobro uradio.
Kako si ti zakljucio da kompajler smesta promenljivu u registar? Ako si mislio
na register prom; to ne znaci da on mora da je smesti u registar vec ako moze
i nije pogubno. Mozda gresis u lokalna/globalna varijabla? Za pocetak
deklarisi tu promenljivu kao globalnu. Voleo bih ako nije vojna tajna i nije
previse veliki sors da ga bacis ovde ili meni na mail pa da pogledamo.
Pozdrav od Todora.
cccc.752vpetrovic,
>> U bre ovi kompajleri nista nevaljaju :)) Bice da ti nesto nisi dobro
>> uradio. Kako si ti zakljucio da kompajler smesta promenljivu u registar?
>> Ako si mislio na register prom; to ne znaci da on mora da je smesti u
>> registar vec ako moze i nije pogubno. Mozda gresis u lokalna/globalna
>> varijabla? Za pocetak deklarisi tu promenljivu kao globalnu. Voleo bih ako
>> nije vojna tajna i nije previse veliki sors da ga bacis ovde ili meni na
>> mail pa da pogledamo.
Ma nije da ne valjaju, nego sam koristio .asm diretivu. A što se tiče
registarskih promenljivih TC 2.01 ako je uključena opcija za registarske
promenljive, a nema deklarisanih promenjivih sa register sam smešta neke
promenljive u registre. To sam otkrio tako što sam startovo TD i kada kažem
inspect <ime prom> on mi da ime, adresu i vrednost. Adresa je u glavnom
oblika DS:xxxx, ali je za ovu inkriminisanu promenljivu stajao neki
registar (više se ne sećam koji). Naravno, kada sam iskompajlirao sve
zabranivši registarske promenljive sve je radilo (kao i kada sam push-nuo
sve registre pre .asm).