pascal.1mmile,
E i ja da otvorim ...:)
CONF JOIN PC.PROG.2
CONF REPLY 6.1307
│ Jel ima neko sve extended kodove za tipke na tastaturi?
│ Pronašao sam u jednom unitu (tpw60) neke kojih nema u uputstvu.
│ Tablica u uputstvu ima sledeće rupe 0-14 (izuzev 3), 26-29,
│ 39-43, 51-58, 69, 70 i eventualno 141+. Ako bi neko znao da
│ popuni rupe...
└──────────
CTRL+<Neko_slovo> daje vrednost ord(upcase(slovo)) - 64
Napravis ovako nesto :
begin
repeat
writeln(ord(readkey));
until false;
end.
I saznas sve kodove SEM F11, F12 i sl.
Drugi nacin je da (ako imas AT) ocitas i F11 i F12 i Enter na num. tastaturi
koji se razlikuje od Entera na "glavnoj" tastaturi i ...
var r:registers;
begin
repeat
r.ah:=1;
intr($16,r); (* Citanje karaktera sa prosirene tastature *)
writeln(r.ah:10,r.al:10);
until false;
end.
pascal.2bole,
Ljudi...
Kako da neki string koji otkucam ubacim u fajl?
pascal.3isekulovic,
>> CTRL+<Neko_slovo> daje vrednost ord(upcase(slovo)) - 64
Da, ali to nisu extended kodovi.
>> Drugi nacin je da (ako imas AT) ocitas i F11 i F12 i Enter na num.
Prvi način znam ali bi mi trebalo u obrnutom smeru, a za ovaj nisam
znao, će da probam. Hvala!
pascal.4isekulovic,
>> Kako da neki string koji otkucam ubacim u fajl?
Ubaciš u fajl?
Ako misliš samo da napraviš fajl u koji ćeš smestiti string onda
ide ovako:
Var
f : text;
s : string;
begin
Readln (s);
Assign (f,'filename.ext');
Rewrite (f,1);
writeln (f,s);
end;
A ako već imaš fajl pa hoćeš da dodaš na kraju:
Var
f1 : text;
f2 : text;
st : string;
begin
Assign (f1,'filename.ext');
Reset (f1);
Assign (f2,'TempFile.$$$'); (* Praviš privremeni file. *)
Rewrite (f2);
While not( eof(f1) ) Do
begin
readln (f1,st); (* Prepisuješ originalni u privremeni file. *)
writeln (f2,st);
end;
writeln (f2,'Ovaj string dodaješ'); (* Dodaješ stringove u *)
writeln (f2,' .... i ovaj .... '); (* privremeni file. *)
Close (f1); Close (f2);
Erase (f1); (* Brišeš orignalni file. *)
Rename (f2,'filename.ext'); (* Privremeni preimenuješ u originalni. *)
end;
A ako hoćeš da ubaciš u sredinu slično je ubacivanju na kraj samo,
što ne prepisuješ do kraja datoteke već prepišeš jedan deo, pa dodaš
string, pa prepišeš ostatak.
pascal.5dejanr,
>> Kako da neki string koji otkucam ubacim u fajl?
var ff: text;
red: string;
begin
assign(ff,'ime.txt');
rewrite(ff);
readln(red);
writeln(ff,red);
close(ff);
end.
Bole, bilo bi ti krajnje vreme da počneš sa čitanjem neke knjige
o Turbo Pascalu, malo prelistaš uputstvo i naučiš da koristiš HELP.
Ovako sa pitanjima za svaku sitnicu nećeš daleko stići sa učenjem
paskala. Ne što je nama teško da odgovaramo, nego zato što tako
učiš neke "mrvice" umesto da shvatiš celinu.
pascal.6ssokorac,
─┼┤ Kako da neki string koji otkucam ubacim u fajl?
var
f:text;
st:string;
begin
assign(f,'tekst.txt');
rewrite(f);
readln(st); (* otkucas string *)
writeln(f,st);
close(f);
end;
Posle ga čitaš ovako:
var
f:text;
st:string;
begin
assign(f,'tekst.txt');
reset(f);
readln(f,st);
writeln(st); (* ispise string *)
close(f);
end;
pascal.8ficus,
Umesto onog prepisivanja iz jednog u drugi fajl, bilo je bolje dumesto
Rewrite(fajl2) ka`e{ Append(fajl2)...
pascal.9dejanr,
>> Umesto onog prepisivanja iz jednog u drugi fajl, bilo je bolje dumesto
>> Rewrite(fajl2) ka`e{ Append(fajl2)...
Append je dosta glupo koncipirana funkcija. Ono što bih ja od nje hteo je
da ako ima fajl, nastavi na njega, a ako nema, da ga napravi. Ali jock,
ako nema fajla ona prijavi grešku :( Zato je zgodno koristiti sledeće:
{$I-}
append(ime);
if ioresult<>0 then
begin
rewrite(ime);
if ioresult<>0 then
begin
writeln('*jebi ga');
halt(1);
end;
end;
PS Postavio sam ti SET CODE na yuscii, behu kuke i kvake u porukama :(
pascal.10isekulovic,
Ajde ljudi pomagajte da se ratosiljam bede. Od svih mogućih stvari
koje mogu da zakažu u programu meni se dogodilo sledeće. Writeln neće
da mi ispiše string pa da se ubijem, ni na ekran ni u file. Watchujem ;)
lepo promenljivu tipa string, vidim lepo njen sadžaj ali jednostavno
writeln ne daje ništa. Ajde molim vas napregnite mozgove šta bi sve moglo
da bude. Inače ako nešto znači u pitanju je editorčić, učita text file
u dinamičku dvostruko povezanu listu, malo editujem i kada treba iz te
liste da se snimi ponovo u file cvrc. Lepo prođe program kroz celu listu,
string dobija ok vrednosti ali jednostavno neće da ih zapiše.
pascal.11bole,
>> A ako vec imas fajl pa hoces da dodas na kraju:
Ma provalio sam, a zar nije bolje umesto tog brisanja rinejmovanja, da umesto
sa reset file otvoris sa append?
pascal.12bole,
Thanx dr.
Uradio sam to, dobio knjigu onu crvenu od duska savica TURBO PASCAL
pascal.13ssokorac,
─┼┤ A ako već imaš fajl pa hoćeš da dodaš na kraju:
Uh, baš ga zakomplikova :). Dodavanje na kraj se vrši pomoću append.
begin
assign(f,'teskt.txt');
append(f);
writeln(f,st);
close(f)
end;
Jedino se u slučaju ubacivanja na pola datoteke mora pisati u drugi fajl.
pascal.14milos,
Pa, ovako }emo te{ko da shvatimo o ~emu se radi, mogao bi malo da nam po{alje{
source (ili barem deo njega ukoliko je tajna) ta da pogledamo. Ina~e, problema
mo`e biti mnogo... Jednostavno ne mogu da pretpostavim o ~emu se radi... Dakle,
{alji source i 100% }e sve biti OK...
pascal.15beast,
>> Uradio sam to, dobio knjigu onu crvenu od duska savica TURBO
>> PASCAL
Ako ti išta bude jasno, javi meni, ja ništa ne razumem :))
Bolje bre uzmi onu standardnu od žabarkape, objekti su za
malo iskusnije (a iz te knjige za mnooogo iskusnije :)
pascal.16dejanr,
>> Writeln neće da mi ispiše string pa da se ubijem, ni na ekran ni u file.
Stavi na početak programa {$I+} i izbaci sve {$I-} koje si eventualno
stavio. Onda pusti program, i videćeš na kojoj liniji nastupa greška i
koja je greška u pitanju. Kada to otkloniš, verovatno i taj writeln
proradi.
Ako imaš {$I-} onda posle *svake* operacije koja išta piše po fajlovima
ili čita iz njih treba da pročitaš i ioresult. Ako to ne uradiš, obično
se dešavaju takve stvari, neka read/write naredba na stotom mestu ne radi
ili radi čudno.
pascal.17adiklic,
> Ajde ljudi pomagajte da se ratosiljam bede. Od svih mogućih stvari
..
> string dobija ok vrednosti ali jednostavno neće da ih zapiše.
Evo prikačeni primer programčić testira da li datoteka već postoji, otvara ako
ne postoji, upisuje komentar, upisuje string i lista datoteku na kraju.
Nadam se da će to pomoći.
(TP 6.0)
primer.paspascal.18isekulovic,
>> Umesto onog prepisivanja iz jednog u drugi fajl, bilo je bolje dumesto
>> Rewrite(fajl2) ka`e{ Append(fajl2)...
Moglo je, samo što Append(fajl) radi samo ako već postoji fajl,
pa bi morala da se doda provera o postojanju fajla i još jedan ceo
primer o dodavanju u sredinu fajla, što mislim da bi suviše zakomplikovalo
celo poruku i da je ovako jasnija bila suština.
pascal.19ssokorac,
─┼┤ liste da se snimi ponovo u file cvrc. Lepo prođe program kroz celu
─┼┤ listu, string dobija ok vrednosti ali jednostavno neće da ih zapiše.
Pa, sad, može svašta da bude. Najbolje da pošalješ taj deo koji ide kroz
listu i piše pa ćemo onda otkriti :).
pascal.20m.hristodulo,
>> Uradio sam to, dobio knjigu onu crvenu od duska
>> savica TURBO PASCAL
Predlažem prevod žuto-plavog priručnika za
TP6.0, izdanje mi-knjige. Ja sve nejasno,
razjašnjavam iz nje...
pascal.21isekulovic,
>> Ako imaš {$I-} onda posle *svake* operacije koja išta piše po
>> fajlovima ili čita iz njih treba da pročitaš i ioresult. Ako to ne
>> uradiš, obično se dešavaju takve stvari, neka read/write naredba na
>> stotom mestu ne radi ili radi čudno.
Ovo je bilo u pitanju, nikad mi ne bi palo napamet. Hvala!
pascal.22milos,
Isto mislim da je TP 6.0 od Mikro knjige jedna od najboljih, ako ne i najbolja
knjiga iz ove oblasti...
Iz nje se mo`e super nau~iti kako za po~etnike tako iza one vrlo iskusne...
Ipak, nije idealna, ko{ta 27 DM... :(
pascal.23bole,
Ljudi jel ima neko neki UNIT ili neki obj sas kojim mogu da pustam semplove
(.voc ili neki drugi oblik) na sb-u, covoxu, kao onaj MOD-OBJ.OBj samo ne za
modove nego za semplove!
Ps. Ovo pitanje se prihvata, zar ne?
pascal.24drpr,
-> Iz nje se može super naučiti kako za početnike tako iza one
-> vrlo iskusne... Ipak, nije idealna, košta 27 DM... :(
Da tu si u pravu i ja sam je nabavo ali u sretnija vremena i
preporučujem je svakom ko nije baš "duduk" za programiranje i
koji tek počinju. Cena je stvrano ono što boli u celoj stvari a
baš me i zanima gde nađoše toliku cenu kad se štampa ovde, da je
na engleskom pa i da shvatim,kupili su je tamo pa imaju maržu,
ovako....
cope
pascal.25broker,
> Ljudi jel ima neko neki UNIT ili neki obj sas kojim mogu
> da pustam semplove (.voc ili neki drugi oblik) na sb-u,
> covoxu, kao onaj MOD-OBJ.OBj samo ne za modove nego za
> semplove!
Ja sam pisao jedno programče koje je sviralo na COVOX-u.
Imaš na Oreska BBS-u i sors. Datoteka je SHOWS*.* (eto, zaboravio
sam...) Vrlo je kratko.
broker
pascal.26ndragan,
/ da mi ispiše string pa da se ubijem, ni na ekran ni u file. Watchujem
/ ;) lepo promenljivu tipa string, vidim lepo njen sadžaj ali
Ili ti stražar daje tačnije rezultate nego writeln (da nije onaj nulti
dužinski bajt u tom stringu ostao nula?), ili je tebi stdio preusmeren u
nešto drugo - ko zna gde on to piše. Šta sve imaš otvoreno u tom
trenutku? Kad pre toga poslednji put nešto ispiše? Kad prestaje?
pascal.27ssokorac,
─┼┤ Ili ti stražar daje tačnije rezultate nego writeln (da nije onaj nulti
─┼┤ dužinski bajt u tom stringu ostao nula?), ili je tebi stdio preusmeren
Ako je nulti bajt nula onda će i stražar :) da pokazuje samo ''.
pascal.28dgrbic,
:: Moglo je, samo što Append(fajl) radi samo ako već postoji
:: fajl, pa bi morala da se doda provera o postojanju fajla
:: i još jedan ceo primer o dodavanju u sredinu fajla, što
:: mislim da bi suviše zakomplikovalo celo poruku i da je
:: ovako jasnija bila suština.
Pogledaj u staroj pc.prog (čini mi se prvoj) par poruka od GROM-a, ima tu
okačeno nekih procedura za umetanje u i brisanje iz fajla. Velika je
budževina, ali radi jako brzo (osim kad zatvara fajl, jer tek onda stvarno
radi prepisivanje).
pascal.29bole,
E ovako:
Kako da recimo, imam neki fajl i ocu da mi ispise svaki red, u kome se barem
jedanput pojavljuje zadati string.
recimo:
zadam BOL
i gde god da pise BOLESTAN od taj red da mi baci na ekran...
(recimo da je sve sa upcase da bi bilo lakse..)
ps. a da taj red koji pretrazuje bude string (sto je normalno:))
pascal.30dejanr,
>> Kako da recimo, imam neki fajl i ocu da mi ispise svaki red, u kome se
>> barem jedanput pojavljuje zadati string.
žitaš fajl tako kako ga već čitaš, i onda kada si pročitao red kažeš:
if pos(strng, red)<>0 then writeln(red);
pascal.31ssokorac,
─┼┤ Kako da recimo, imam neki fajl i ocu da mi ispise svaki red, u kome se
─┼┤ barem jedanput pojavljuje zadati string.
var
f:text;
tr,st:string;
begin
assign(f,'text');
reset(f);
write('String: '); readln(tr);
while not eof(f) do
begin
readln(f,st);
if pos(tr,st)>0 then writeln(st);
end;
close(f)
end;
Pogledaj u knjizi koju imaš nešto o POS-u, ili u TP-ovom HELP-u
(hi, ndragane:), sve ćeš uvek naći...
pascal.32peca.st,
!-> Kako da recimo, imam neki fajl i ocu da
!-> mi ispise svaki red, u kome se barem
!-> jedanput pojavljuje zadati string.
Ovo kucam napamet, ali mora da je tako :)
Var
f : text;
s : string;
Begin
Assign (f, 'ime.ext');
Reset (f); špretpostavlja se da postoji fajl 'ime.ext'ć
While not eof(f) do begin
ReadLn (f, s);
If Pos ('BOL', S) <> 0 then WriteLn (S);
End;
Close (f);
End.
Sve rešava funkcija POS (a, b : string) - ona vraća prvu poziciju
stringa a u stringu b, a ako se a ne sadrži u b onda vraća 0.
Peđa.
pascal.33bole,
>> Pogledaj u knjizi koju imas nesto o POS-u, ili u TP-ovom HELP-u
>> (hi, ndragane:), sve ces uvek naci...
o nemojte da se ljutite.. nisam znao da postoji funkcija pos........
pascal.34ilotina,
HI!
Danas sam nešto petljao pao pascal-u, i malo mi je trebalo da izbacim
komp kroz prozor. Pisao sam neki jednostavni programčić koji očita
datum i pretvori ga u sledeći oblik: godina*10000+mesec*100+dan, i
sve to smešta u promenljivu tipa longint. I ja tako sav srećan
startujem prg., kad ono ne leži vraže, on mi izbaci sasvim neku
neočekivanu cifru. E i na tom mestu sam poludeo, ali sam ipak otkrio
da treba da prebacim onu godinu u naku drugi promenljivu tipa longint
i tek onda da je množim sa 10000.
Pozdrav, Ivan!
P.S. Meni je ovo izgledalo zanimljivo:)
P.P.S. Naravoučenije za one koji ovo nisu znali (ja nisam), ako
želite da množite promenjljivu tipa word (pa makar i u stilu
writeln(godina*10000)), prebacite njen sadržaj u promenljivu tipa
longint pa je onda množite ;)
pascal.35isekulovic,
>> Ili ti stražar daje tačnije rezultate nego writeln (da nije onaj nulti
Proradilo je već, hvala.
pascal.36dejanr,
>> P.P.S. Naravoučenije za one koji ovo nisu znali (ja nisam), ako
>> želite da množite promenjljivu tipa word (pa makar i u stilu
>> writeln(godina*10000)), prebacite njen sadržaj u promenljivu tipa
>> longint pa je onda množite ;)
Da... mada mislim da ne mora tako, može i writeln (longint(godina)*10000).
Ovo davno nisam probao, ali nekada je (v.3.0) moglo, valjda može i sada.
pascal.37ssokorac,
─┼┤ o nemojte da se ljutite.. nisam znao da postoji funkcija pos........
Ma, nema ljutnje, samo rekoh da pogledaš, da ne moramo da ti objašnjavom
šta ona radi, sad kada znaš za nju :). Samo ti pitaj kada nije jasno.
pascal.38ssokorac,
─┼┤ P.P.S. Naravoučenije za one koji ovo nisu znali (ja nisam), ako
─┼┤ želite da množite promenjljivu tipa word (pa makar i u stilu
─┼┤ writeln(godina*10000)), prebacite njen sadržaj u promenljivu tipa
Ja sam imao sličnih problem sa oduzimanjem wordova. Recimo, a i b su
wordovi, a integer, a ovo ne radi
c:=abs(a-b);
ukoliko je b manje od a. Tačnije, za abs(3-5) daje -2 :). Naravno, stvar
je u zapisu wordova i integera, ali čini mi se da se moglo srediti...
pascal.39bole,
Evo vam jedan "problem" pa resavajte dok se je ne vrnem sa mora...
kako da pravim neku bazu, u kojoj se podaci menjaju recimo:
IME ARTIKLA CENA KOLICINIA
i da mogu da menjam cenu i kolicinu
nesto slicno naredbi FIELD u basicu
pascal.40dejanr,
>> kako da pravim neku bazu, u kojoj se podaci menjaju recimo:
>> IME ARTIKLA CENA KOLICINIA
>> i da mogu da menjam cenu i kolicinu
>>
>> nesto slicno naredbi FIELD u basicu
Napraviš record:
type artt = record
ime: string;
cena: longint;
kolicina: longint;
end;
artft= file of artt;
var art: artt; artf: artft;
otvoriš fajl:
assign(artf, 'ime.dat');
reset(artf);
i sada da bi pročitao peti artikl kažeš:
seek (artf,5);
read (artf, art);
promeniš šta ima, recimo:
art.cena:=art.cena*100;
i onda upišeš u fajl:
seek (artf, 5);
write (artf, art);
na kraju sve zatvoriš:
close(artf);
pascal.41kuki,
ljudi, ima li neko ideju zašto ovaj program ne radi kako treba?
----
program trt;
uses dos;
var
fajl:file ;
naziv:string;
c1:array [1..5000] of char;
nmax:word;
f:word;
begin
naziv:='trt.mrt';
assign (fajl,naziv);
reset (fajl);
blockread(fajl,c1[1],5000,nmax);
for f:=1 to nmax do write (c1[f]);
close (fajl);
readln (naziv);
end.
----
e sad, šta se desi? desi se da kad program dođe do onog blockread qemm
ispiše nešto u stilu procesor has informed qemm that an attempt was
made to execute an ilegal instruction... ili nešto slično.
Inače, pascal je turbo pascal 5.5, a fajl je veći od tih 5000 bajtova
kolko sam ja njemu dao da pročita... naravno, fajl postoji :) a što
je najgore, kad sam stavljao veće brojke od 5000 čak sam i dobijao
neki ispis... npr, za 60000 sam dobijao prvih 96 (?) bajtova fajla...
pascal.42dejanr,
>> ljudi, ima li neko ideju zašto ovaj program ne radi kako treba?
Zbog:
>> reset (fajl);
Umesto toga, stavi:
reset(fajl,1)
pascal.43drpr,
-> blockread(fajl,c1[1],5000,nmax);
ono što ti je daejan rekao i mislim da treba
blockread(fajl,c1,5000,nmax) a ja još preporučujem pošto ćeš
verovatno menjati veličinu c1 da se ne bi mučio
blockread(fajl,c1,sizeof(c1),nmax)
toliko od mene :)
cope
pascal.44ssokorac,
─┼┤ reset (fajl);
RESET ima i drugi parametar koji možeš da menjaš veližInu bloka kod
čitanja fajla (u bajtovima). Ovako stoji neka default vrednost, a ako
staviš reset(F,1); onih 5000 će značiti 5000 bajtova i sve će raditi kako
treba.
pascal.45kuki,
> ono što ti je daejan rekao i mislim da treba
> blockread(fajl,c1,5000,nmax) a ja još preporučujem pošto ćeš
> verovatno menjati veličinu c1 da se ne bi mučio
>
> blockread(fajl,c1,sizeof(c1),nmax)
thanx svima na brzim odgovorima :) A inače, što se tiče onog
sizeof(c1), to sam rešio tako što sam na početku stavio jednu
konstanticu, koju po potrebi menjam :))
pascal.46mzdravkovic,
Kako mogu iz nekog Pascal programa da ispitam da li ima diskete u A:
ili B: drajvu ?
pascal.47milos,
E, ovo je malo žešće. U BC-u postoji funkcija koja čita status drajva, i koja
vraća rešku ako nema diskete (biosdisk), ali sam se uvek pitao da li postoji
nešto slično i u TP-u... SSokorac , na tebe je red...
pascal.48beast,
>> E, ovo je malo žešće. U BC-u postoji funkcija koja čita status
>> drajva, i koja vraća rešku ako nema diskete (biosdisk), ali sam
>> se uvek pitao da li postoji nešto slično i u TP-u...
Ma nek jednostavno uradi ChDir('A:\'); (sa {$I-}) i vratiće
mu se stanje drajva preko ioresulta...
pascal.49eagle,
> Kako mogu iz nekog Pascal programa da ispitam da li ima diskete
> u A: ili B: drajvu ?
if disksize(n) = -1 then nema_diskete
n=1 za A:
n=2 za B:
...
pascal.50dejanr,
>> E, ovo je malo žešće. U BC-u postoji funkcija koja čita status drajva, i
>> koja vraća rešku ako nema diskete (biosdisk), ali sam se uvek pitao da li
>> postoji nešto slično i u TP-u...
Pa, može se pozvati odgovarajuća DOS funkcija ali ja radim to ovako:
repeat
writeln ('Insert diskette no ', ndisket, ' in drive ', rezdisk);
write ('Press any key to copy');
readln (dummy1);
size:=disksize (diskno);
until size>0;
pascal.51broker,
> datum i pretvori ga u sledeći oblik:
> godina*10000+mesec*100+dan, i sve to smešta u promenljivu
> tipa longint. I ja tako sav srećan startujem prg., kad ono
> ne leži vraže, on mi izbaci sasvim neku neočekivanu cifru.
> E i na tom mestu sam poludeo, ali sam ipak otkrio
Imao sam slična iskustva i došao do zaključka da je to
najverovatnije bubica Turbo Paskala. ja sam imao jedan veeliki
broj smešten u 4 bajta i kad sam napravio malo matematike da to
odjednom smesti u LongInt dobijao sam takodje bezvezne rezultate.
Morao sam da računam iz dva puta, prvo u Word tipu, pa tek onda
da množim i smeštam u LongInt.
broker
pascal.52mmile,
Da li nekog zanima pisanje BBS Door-ova i izrade biblioteke
procedura koja bi olaksavala ovakav posao ? Ako ima nekog
mail pa da pravimo grupu :).Naravno sve je za Pascal.
pascal.53draganm,
Nasao sam kako RA 2.00 pretvara sifre u crc... Pa ako nekoga interesuje
neka ostavi poruku ...
-=>Phantom Lord<=-/.CoRRoSioN.
pascal.54ssokorac,
Kako iz TP-a startovati neki .BAT program?
pascal.55dejanr,
>> Kako iz TP-a startovati neki .BAT program?
Direktno se ne može startovati. Ali, možeš funkcijom exec pozvati command.com,
pa onda command.com da startuje program. Nešto kao:
exec('C:\DOS\COMMAND.COM', '/C TEST'); trebalo bi da izvrši TEST.BAT.
pascal.56mmile,
│
│ Kako iz TP-a startovati neki .BAT program?
│
└───────────
Pa valjda kao i svaki obican program (?)
Procedure Exe( command : string );
begin
SwapVectors;
Exec(GetEnv('COMSPEC'), '/C ' + Command);
SwapVectors;
end;
Gore stavis uses dos i š$M .... ć
i onda pozoves sa exe('IME.BAT');
Bolje je da kucas IME.BAT nego samo IME jer se (valjda) prvo izvrsavaju
.EXE & .COM programi pa tek onda .BAT tj. Ako imas i IME.COM i IME.EXE
i IME.BAT i stavis exe('ime') onda ce se prvo izvrsiti ime.com ili ime.exe.
pascal.57milos,
Možeš sa EXEC, ali preko COMMAND.COM /C. Ovo /C je vrlo važno da bi se izvršio
samo taj beč fajl i da bi se kontrola vratila tvom programu... Inače, valjda će
se dobiti isti efekat kao i da si rekao DOS Shell (čisto COMMAND.COM, s tim što
bi se izvršio i beč fajl), ali bi kontrola ostala na sekundarnom komandnom
procesoru, pa bi bilo neizbežno ono EXIT...
pascal.58kuki,
>>> Kako iz TP-a startovati neki .BAT program?
> exec('C:\DOS\COMMAND.COM', '/C TEST'); trebalo bi da izvrši TEST.BAT.
ili, univerzalnije rešenje :)))
exec (GetEnv('COMSPEC'),' /c test');
pascal.59ssokorac,
─┼┤ exec('C:ĐDOSĐCOMMAND.COM', '/C TEST'); trebalo bi da izvrši TEST.BAT.
Da znam za to, ali se desi da nema memorije za učitavanje command-a, a
kako je jedan već učitan, nadao sam se da se on može iskoristiti...
Ok, hvala.
pascal.60dejanr,
>> > exec('C:\DOS\COMMAND.COM', '/C TEST'); trebalo bi da izvrši TEST.BAT.
>>
>> ili, univerzalnije rešenje :)))
>>
>> exec (GetEnv('COMSPEC'),' /c test');
Izgleda univerzalnije, ali to meni nije radilo na jednom računaru na kome
je inače instaliran 4DOS. Pošto mi je taj računar bio dosta važan (tamo
sam instalirao neki svoj softver a oni su meni u džep instalirali pare),
privremeno sam stavio kod sebe 4DOS i probao, i kod mene je, čini mi se,
radilo. Onda sam prepravio program u pomenuto C:\DOS\COMMAND.COM i posle
toga je radio i kod mene i na tom računaru. U dalje istraživanje se
nisam upuštao, pošto je problem bio rešen.
pascal.61dejanr,
>> Da znam za to, ali se desi da nema memorije za učitavanje command-a, a
>> kako je jedan već učitan, nadao sam se da se on može iskoristiti...
Na žalost ne može, COMMAND.COM je taj koji izvršava linije iz .BAT fajla.
Ako nema njega, nema ko da interpretira komande.
pascal.62mjova,
> exec('C:\DOS\COMMAND.COM', '/C TEST'); trebalo bi da
> izvrši TEST.BAT.
bolje je uzeti comspec env pa iz nje saznati gde je command.com. ako
je nema onda je u C:\.
pascal.63vitez.koja,
#=> Kako iz TP-a startovati neki .BAT program?
exec('command.com','/c žaklina.bat');
pascal.64isekulovic,
Text file unosim red po red u dvostruko povezanu dinamičku listu. Da
li je moguće nekako da svaki red zauzme tačno mesta koliko mu treba
a ne kao da je u pitanju string maksimalne dužine? Jedino što mi pada
na pamet je da od string napravim jednostruku dinamičku listu kraćih
stringova, ima li boljih ideja?
pascal.65eagle,
> Text file unosim red po red u dvostruko povezanu dinamičku
> listu. Da li je moguće nekako da svaki red zauzme tačno mesta
> koliko mu treba a ne kao da je u pitanju string maksimalne
> dužine?
Možeš da u listi čuvaš promenljive tipa pointer, a da čitanje/upisivanje
u listu radiš preko nekog pomoćnog stringa.
type x = record
red:pointer; (* jedan red teksta *)
...
end;
procedure string2pointer(var s:string; var p:pointer);
begin
getmem(p,ord(sŠ0Ć)+1);
move(s,p,ord(sŠ0Ć)+1);
end;
procedure pointer2string(var p:pointer; var s:string);
begin
move(p,s,memŠseg(p):ofs(p)Ć+1);
end;
Ovako se pamti i dužina svakog stringa, što je valjda suvišno... ne znam kako
se može odrediti dužina bloka na koji pokazuje p (sizeof(pž) uvek vraća nulu).
pascal.66vitez.koja,
#=>>> Da znam za to, ali se desi da nema memorije za
#=>>> učitavanje command-a, a kako je jedan već učitan,
#=> nadao sam se da se on može iskoristiti...
#=>
#=> Na žalost ne može, COMMAND.COM je taj koji izvršava
#=> linije iz .BAT fajla. Ako nema njega, nema ko da
#=> interpretira komande.
Njega uvek ima :) Jer neki COMMAND.COM je morao i taj tvoj program da učita...
Probaj sa interaptom 0x2E...
pascal.67dejanr,
>> > Na žalost ne može, COMMAND.COM je taj koji izvršava
>> > linije iz .BAT fajla. Ako nema njega, nema ko da
>> > interpretira komande.
>>
>> Njega uvek ima :) Jer neki COMMAND.COM je morao i taj tvoj program da
>> učita...
Da, ali kao što možda znaš, COMMAND.COM (ili bar njegov deo) se eventualno
uklanja iz memorije da bi oslobodio prostor za program. Sada to možda i
nije toliko bitno, ali nekada na 16 ili 64 K je itekako bilo. Po izlasku
iz programa proverava se da li je COMMAND.COM "čitav" i ako nije, učitava
se ponovo. Zato se ponekad program na izlasku zaglavi sa cannot load
command, system halted (ili tako nešto).
Dok se izvršava tvoj program, ne možeš računati sa tim da je čitav
COMMAND.COM u memoriji.
pascal.68ssokorac,
─┼┤ Dok se izvršava tvoj program, ne možeš računati sa tim da je čitav
─┼┤ COMMAND.COM u memoriji.
Zahvaljući isekulovicu koji je našao int 2E :) evo procedure koji izvršava
batch fajl bez potrebe za učitavanjem novog COMMAND.COM-a.
procedure ExeBat(ime:string);
var
r:registers;
begin
with r do
begin
ds:=seg(ime);
si:=ofs(ime)
end;
intr($2E,r);
end;
Važno je da se program koji poziva ovu proceduru ne bude startvona iz
batch (beč:) fajla jer onda dolazi do, kako piše, nepredvidljih posledica :).
Naravno, potrebno je i jedno $M na početku...
pascal.69isekulovic,
>> Možeš da u listi čuvaš promenljive tipa pointer, a da
>> čitanje/upisivanje u listu radiš preko nekog pomoćnog stringa.
Hvala veliko, radi savršeno. Malo sam se namučio dok nije proradilo,
ali sada radi ko sat, kvaka je bila u tome što u recordu moraju prvo
da stoje pointeri na prethodnu i sledeću liniju, pa tek onda pointer
na tekst reda.
pascal.72djelovic,
> Važno je da se program koji poziva ovu proceduru ne bude startvona iz
> batch (beč:) fajla jer onda dolazi do, kako piše, nepredvidljih posledica :).
Posledice nisu nepredvidive, već kako kaže HelpPC:
" before returning to the parent program this interrupt will
attempt to execute the "current" batch file (if the parent or
any ancestors were invoked from a batch file. This can cause
remaining lines in a batch file to execute before the parent
program finishes and fragment memory "
Takođe, postoji još nekoliko važnih činjenica:
- command string must be terminated with a CR
- all registers including SS & SP are destroyed; SS & SP should be
preserved in your own code segment
- incompatible under some software multitasking systems
Koliko mi se čini, ipak je praktičnije koristiti pozive kroz
COMMAND.COM nego kroz ovaj ograničeni poziv :).
pascal.73eagle,
> Hvala veliko, radi savršeno. Malo sam se namučio dok nije
> proradilo, ali sada radi ko sat, kvaka je bila u tome što u
> recordu moraju prvo da stoje pointeri na prethodnu i sledeću
> liniju, pa tek onda pointer na tekst reda.
Kvaka je u tome što uopšte ne radi kako treba, već trpa stringove
na pogrešno mesto. Treba da stoji:
move(s,pž,ord(sŠ0Ć)+1)
move(pž,s,memŠseg(pž):ofs(pž)Ć+1)
Ovako ih čuva u prostoru koji je određen sa "getmem", a onako od adrese
pointera pa preko pokazivača na linije i ko zna još čega..
pascal.74nikac,
Imam jedno pitanje. Ne spada bas u cist pascal, ali nema veze, valjda ce neko
da zna odgovor. Daklem, sledeci program proizvodi veoma cudne efekte, tj.
pre prvog slova ispise neki ascii karakter(primetio sam da se menja karakter
u zavisnosti od duzine stringa), a na kraju ispise dva puta isto slovo. Takodje
ponekad ispise string, pa odmah iza njega opet taj isti string ali otprilike
od pola. Sta bi to moglo da bude, tj. gde je greska jer ocigledno postoji...
Program glasi ovako:
uses crt,dos;
var
s:string;
r:registers;
p:pointer;
begin
clrscr;
s:='Ovo je probni string';
r.ah:=$09;
p:=čs;
r.dx:=ofs(pž);
r.ds:=seg(pž);
intr($21,r);
end.
pascal.75nikac,
Jos pitanja... Kako da prosledim neku ansi sekvencu do drivera?
Nije vazno da li je resenje u pascalu, c-u ili uopsteno objasnjenje, sve se
prihvata. Probao sam iz pascala i on mi kao rezultat programa:
write(chr(27)+'Š10;10H')
žžžžžžž
to mu dodje ascii kod od esc
umesto da kurzor bude na pozociji <10,10> on mi ispise ceo taj string
(a esc interpretira kao strelicu???)
Dakle, kako da iskoristim neku ansi sekvencu (proverio sam instaliran
je ansi.sys, nije tako glupo objasnjenje).
pascal.76dejanr,
Probaj da izbaciš uses crt sa početka programa, možda ti ispis ide
direktno na ekran a ne preko DOS-a.
Ako ti baš treba uses crt zbog drugih stvari, bilo je pre jedno pola
godine u "Bajtovima lične prirode" kako se ipak preusmerava read/write
na DOS. žini mi se da se kaže reset(input) i rewrite (output), a pre
toga možda assign(input,''); i assign(output,'') ili tako nešto.
pascal.77eagle,
> Daklem, sledeci program proizvodi veoma cudne
> efekte, tj. pre prvog slova ispise neki ascii karakter(primetio
> sam da se menja karakter u zavisnosti od duzine stringa), a na
> kraju ispise dva puta isto slovo.
> s:='Ovo je probni string';
> p:=čs;
Taj karakter na početku predstavlja dužinu stringa. Svaki string ima i
nulti član u kome se pamti njegova prava dužina, pa kad staviš p:=čs daješ
pointeru adresu baš tog nultog člana. Treba da stoji p:=čsŠ1Ć
pascal.78nikac,
E pa da odgovorim odjednom na oba odgovora.
za dejanr: probao sam i lepo radi sa assign(input,'') itd.
za eagle : Da pretpostavio sam da je ono duzina stringa a u medjuvremenu
sam resio sve dileme. Ali ima jos jedna zamba...
Dakle evo greske (ako nekom mozda zatreba nesto slicno):
uses dos,crt,stdio;
var
s : string;
p : pointer;
r : registers;
begin
clrscr;
s:='probni string$';
ž ovo je veoma vazno
p:=čsŠ1Ć;
žžžžžž kao i ovo
r.ds:=seg(pž);
r.dx:=ofs(pž);
r.ah:=$9;
intr($21,r);
wait;
end.
Ono čsŠ1Ć smesta adresu stringa (bez duzine u sŠ0Ć) u pointer p. Medjutim
ako se na kraju stringa ne stavi ono '$' dos jednostavno ne zna dokle je string
i ide i pise neke nebuloze. E tu mi je odmah palo na pamet kako se to radi
u assembleru, pa reko sto da ne, ajde da probam, kad ono radi!
Eto toliko za ovaj put...
pascal.79broker,
> Da li nekog zanima pisanje BBS Door-ova i izrade
> biblioteke procedura koja bi olaksavala ovakav posao ? Ako
> ima nekog mail pa da pravimo grupu :).Naravno sve je za
> Pascal.
Ja verovatno mogu biti od koristi, bar kao Beta tester, mada
imam i iskustva u pisanju Door programa.
Sysop Oreska BBS-a,
brokerč38:101/101%setnet.oreska
pascal.80broker,
> Da znam za to, ali se desi da nema memorije za učitavanje
> command-a, a kako je jedan već učitan, nadao sam se da se
> on može iskoristiti...
Mozda će te zanimati: RemoteAcess 1.11 kada ide u DOS SHELL
ostavlja rezidentno samo 3K. Rađen je u TP5.5
broker
pascal.81ssokorac,
─┼┤ Koliko mi se čini, ipak je praktičnije koristiti pozive kroz
─┼┤ COMMAND.COM nego kroz ovaj ograničeni poziv :).
Kako kad, nema se uvek memorije :). Usput, u inter33 je pisalo da su
posledice nepredvidive, pa sam zato takoi napisao :). Tamo je lista
ograničenja i posledica, zato, nešto veća pa ću staviti ovde čim
andilitujem fajlove :).
pascal.82ssokorac,
─┼┤ Mozda će te zanimati: RemoteAcess 1.11 kada ide u DOS SHELL
─┼┤ ostavlja rezidentno samo 3K. Rađen je u TP5.5
Hvala, ima i programa koji zauzimaju manje ;). Sve što mi treba je .bat
fajl, ali je to u medjuvremenu rešeno. Svopovanje nije nikakav problem.
pascal.83vitez.koja,
#=> Dok se izvršava tvoj program, ne možeš računati sa tim
#=> da je čitav COMMAND.COM u memoriji.
Ako se neko koristio pomenutim interaptom 2E, imam nekoliko pitanja:
U HELP PCu koji koristim za informacije te vrste piše da taj "neobavezni" deo
komandnog interpretera mora biti učitan ako nije (ceo) rezidentan. Kako
proveriti da li je ceo komandni interpreter prisutan u memoriji, i šta će da se
desi ako aktiviram ovaj interapt, a interpretera nema tamo ?
I još malo pitanja :) Da li je funkcija zahteva saradnju samog komandnog
interpretera, i da li je 4DOS podržava (nedokumentovana je) ?
pascal.84ssokorac,
─┼┤ interpretera, i da li je 4DOS podržava (nedokumentovana je) ?
Za ostalo ne znam, ali sa 4DOS-om radi potpuno ok.
pascal.85sbrk,
>> 4.560 PC.PROG:pascal
>> isekulovic, 07.07.92. 01:12, 268 chr
>> ---------------------------------------------------------
>> Da nije neko slucajno skinuo pre blokade sledece fajlove sa tricklea?
>> -stay42.arc ('How to write a TSR program in Turbo Pascal')
>> -tp55tsr.zip ('TSR units for Turbo Pascal 5.5 applications')
>> -tppop16.arc ('TPUs and ASM for popup and TSR programs')
Bazajući po starim porukama, naletim i na ovo :) Da stvarno neko nema ova
druga dva? Jer stay42.arc nam je neko već nabavio.
Skerl?
pascal.86skerl,
tppop16.arc je zakacen u PC.PROG.2 uz poruku br 6.360
Pozdrav,
Skerl :)
pascal.87skerl,
>> >> -tp55tsr.zip ('TSR units for Turbo Pascal 5.5 applications')
Jedva ga iskopah na starim, prasnjavim disketama :)
Pozdrav,
Skerl.
tp55tsr.zippascal.88broker,
> ─┼┤ Mozda će te zanimati: RemoteAcess 1.11 kada ide u DOS
> SHELL ─┼┤ ostavlja rezidentno samo 3K. Rađen je u TP5.5
>
> Hvala, ima i programa koji zauzimaju manje ;). Sve što mi
> treba je .bat fajl, ali je to u medjuvremenu rešeno.
> Svopovanje nije nikakav problem.
Izgleda da si me pogrešno protumačio?. Nisam mislio ništa drugo do
da navedem podatak.
Kad smo već tu, pretpostavljam da si svoj BBS program radio u
TP-u, pa me zanima kako si rešio svopovanje, rad pod mrežom,
multitasking i tako to...
broker
pascal.89niklaus,
> ─┼┤ Mozda će te zanimati: RemoteAcess 1.11 kada ide u DOS SHELL
> ─┼┤ ostavlja rezidentno samo 3K. Rađen je u TP5.5
>
> Hvala, ima i programa koji zauzimaju manje ;). Sve što mi treba je
> .bat fajl, ali je to u medjuvremenu rešeno. Svopovanje nije
> nikakav problem.
Na primer odlični SCREEN THIEF (najbolji scr-capture po meni)
koji zauzima 2160 b...
(:niklaus:)
pascal.90niklaus,
_____
> uses dos,crt,stdio;
Deder, objasti mi ovo... ili samo mnogo dobro znaš TP i C.
(:niklaus:)
pascal.91ssokorac,
─┼┤ TP-u, pa me zanima kako si rešio svopovanje, rad pod mrežom,
─┼┤ multitasking i tako to...
Dok sam pisao program, pod utiskom sezamovih problema sa memorijom,
štedeo sam memoriju maksimalno (tj. skoro maksimalno, uvek može bolje:),
tako da potrebe za svopovanjem nemam - rade arj i zip, kao i command, samo
što sam sada našao rešenje za redirekciju bez njega, a i copy više nema
potrebe za njim, tako da taj deo ide brže.
E, sa, mreža i slično - tu ima mnogo priče, ali ima dosta u INTER33,
plus sam uzeo neke primere iz Matimetičkog instituta, pa se složilo ponešto
:).
pascal.92bulaja,
**** new file ****
R:\IBMPC\PASCAL\*.*
----------------------
gtmous13 zip 85523 GTMouse, unit za rad sa misem (TP/BP 6.0 & 7.0)
GTMOUSE is a Borland Pascal 6.0 & 7.0 Unit for mouse handling.
GTMouse is not a mouse driver, it works over any standard mouse
driver. If included it converts standard block mouse cursor in
smoothly moving across the screen arrow-like mouse cursor in
TEXT MODE of video adapter. This is similar to Norton Utilities
6.0, PCTools 7.0 and some others programs. GTMouse will make
your application program much more attractive and professionally
looking. This is possible only for EGA or VGA adapters, it don't
do anything on others adapters.
pascal.93nikac,
>■ > uses dos,crt,stdio;
>■ žžžžžž
>■ Deder, objasti mi ovo... ili samo mnogo dobro znaš TP i C.
Ma to ti je user unit (moje procedure, zaboravio sam da ga izbrisem iz
listinga). A sta cu, ovako mahinalno na pocetku svakog prg-a kucam uses
ili include, svejedno, stdio :) (sto dzabe da zamaram moje vijuge :)
pascal.94broker,
> E, sa, mreža i slično - tu ima mnogo priče, ali ima dosta
> u INTER33, plus sam uzeo neke primere iz Matimetičkog
> instituta, pa se složilo ponešto
A jesu li ti primeri dostupni smrtnicima?
broker
pascal.95ssokorac,
─┼┤ A jesu li ti primeri dostupni smrtnicima?
Naravno da jesu, ali su na papiru, i to A4 nekih 10 listova, a to mi se
baš ne ukucava, bar ne sve :(. Ali, ako hoće neko da ukuca, mogu da mu dam
papire da ih fotokopira, a ako je bliži kenzi, može da fotokopira i od
njega :). A možda neko već ima tako nešto ukucano?
pascal.96niklaus,
>>> >> -tp55tsr.zip ('TSR units for Turbo Pascal 5.5 applications')
>
> Jedva ga iskopah na starim, prasnjavim disketama :)
žesto mi se dešava da razne PD extra biblioteke koji pokupim
su već iskompajlirane u units-e. Kako sam na Borland Pascal-u 7.0 izvesno
vreme, često mi se pojavljuje problem nekompatibilnosti UNIT struktura
između TPU7 i TPU(4-6). Da li postoji neki programčić spasilac koji će da
izvrši potrebnu konferziju.
...ili ću moram da listam one silne dokumentacije o UNIT strukturi.
(:niklaus:)
pascal.97drpr,
-> ...ili ću moram da listam one silne dokumentacije o UNIT
-> strukturi.
Moraćeš , a da li ćeš uspeti ne znam :(( Elem to je stvarno
veliki problem o kome smo pričali već u ovoj conf. Uniti nisu
kompatibilni u raznim verzijama nadajmo se da je samo u
hederima :(
cope
pascal.98niklaus,
> veliki problem o kome smo pričali već u ovoj conf. Uniti nisu
> kompatibilni u raznim verzijama nadajmo se da je samo u
> hederima :(
I ja se nadam... Počinjem sa listanjem DOC-ova... ):
)8 niklaus 8(
pascal.99predragd,
> ...ili ću moram da listam one silne dokumentacije o UNIT strukturi.
Da li se nekako može doći do te dokumentacije. I mene
interesuje tvoj problem. Imam dosta unit-a na starijim verzijama
TP-a koji naravno ne rade na BP-u. Bio bih rad na napišem neki
konverter, ali mi nedostaje dokumentacija. Naime, imam podatke
samo o .TPU fajlovima za TP6. Ako uspeš bar donekle da rešiš ovaj
problem mislim da bi ti mnogi TP-ovci bili zahvalni.
Peđa.
pascal.100bulaja,
││ili cu moram da listam one silne dokumentacije o UNIT strukturi.
│└───
│ Da li se nekako moze doci do te dokumentacije.
└────
R:\IBMPC\PASCAL\*.*
----------------------
twu1 zip 151084 Objasnjenje strukture TPU datoteka (TP 6.0, TPW 1.0)
pascal.101broker,
> ─┼┤ A jesu li ti primeri dostupni smrtnicima?
>
> Naravno da jesu, ali su na papiru, i to A4 nekih 10
> listova, a to mi se baš ne ukucava, bar ne sve :(. Ali,
> ako hoće neko da ukuca, mogu da mu dam papire da ih
> fotokopira, a ako je bliži kenzi, može da fotokopira i od
> njega :). A možda neko već ima tako nešto ukucano?
Moze li u mail tvoj phone no. pa da ja zaduzim nekog od
prijatelja....
broker
pascal.102ssokorac,
─┼┤ Moze li u mail tvoj phone no. pa da ja zaduzim nekog od
─┼┤ prijatelja....
Može, šaljem. Problem je što se tako dobija zavisnost od Novella pa
program ne radi na jednom compu u DV-u, recimo... Zato sam, pre nego što
sam to završio ipak pisao komunikaciju pomoću fajlovanja, lokovanja :),
šerovanja i sl. :)
pascal.103ndragan,
/ Ako je nulti bajt nula onda će i stražar :) da pokazuje samo ''.
Pobrkao sam lončiće... kad sam ono čačkao paskal... 89?
pascal.104bigbrada,
> veliki problem o kome smo pricali vec u ovoj conf. Uniti nisu
> kompatibilni u raznim verzijama nadajmo se da je samo u
> hederima :(
>
> cope
Dzabe se nadas... Probal sam da stavim drugi heder, i pogodi
sta se desilo :((((( NE radi:((((
BIG
pascal.105bole,
E ovako:
Kako da saljem nesto na modem ali da radi na comu 3 i 4
recimo
budem na sezamu, pa udjem u dos pa pustim program a on na modem posalje recimo
OVDE BOLE
hvala u napred
ps. uzeo sam onaj pcl4p i nema pomoci :)
pascal.106niklaus,
> ││ili cu moram da listam one silne dokumentacije o UNIT strukturi.
> │└───
> │ Da li se nekako moze doci do te dokumentacije.
> └────
> R:ĐIBMPCĐPASCALĐ*.*
> ----------------------
> twu1 zip 151084 Objasnjenje strukture TPU datoteka (TP 6.0,
> TPW 1.0)
Još samo da doživim i pojašnjenje strukture ... za BP 7.0...
(;niklaus;)
pascal.107dcolak,
│ ps. uzeo sam onaj pcl4p i nema pomoci :)
Kako bre nema pomoći, evo ja napisah chat door a ti...
So, zar ne radi Sioputc() ?
Da li si uradio prvo SioReset(COM4, -1) ?
-1 za preuzimanje porta (mada radi i sa Baud9600) ?
Ne odustaj može! :)
Sledge DAMMIR!
pascal.108valhala,
>###### Jer stay42.arc nam je neko vec nabavio.
Ovo bi me interesovalo. Gde?
Val.
pascal.109pedjak,
> Može, šaljem. Problem je što se tako dobija zavisnost od Novella pa
> program ne radi na jednom compu u DV-u, recimo... Zato sam, pre nego
> što sam to završio ipak pisao komunikaciju pomoću fajlovanja,
> lokovanja :), šerovanja i sl. :)
žek, ček... nije mi sad nešto jasno. Jel' ti imaš rutine razvijene
u paskalu za zaključavanje fajlova, podelu pristupa i sl. ? Ako
imaš, daj nabaci ideju kako je to uradjeno. Pozivaš DOSove funkcije
?
pascal.110mmile,
│ Kako da saljem nesto na modem ali da radi na comu 3 i 4
└─────────
Nabavi program ADDPORT ili ADD34 ili sl. i staruj ga.
Zatim iz dosa uradis echo OVDE BOLE >COM3.Jedini problem
je sto na adrese 0:404h i 0:406h treba upisati adrese kom.
portova kako bi BIOS bio u stanju da koristi com 3 i 4 a to
rade gore navedeni programi.
pascal.111bearboy,
Jel' iko video DOBRE rutine za komunikaciju sa kom. portovima za paskal ?
(tu ne računam ASYNC, pošto njegove rutine nisu dobre :).
PS. Sors po ISO-u u prednosti !
pascal.112peca.st,
!-> Može, šaljem. Problem je što se tako
!-> dobija zavisnost od Novella pa program ne
!-> radi na jednom compu u DV-u, recimo...
!-> Zato sam, pre nego što sam to završio
!-> ipak pisao komunikaciju pomoću
!-> fajlovanja, lokovanja :), šerovanja i sl.
!-> :)
SSovac, jel onda ono što si ti meni napričao
u stvari rađeno bez Novella?
Hoćeš da kažeš da si ti išao MNOGO komplikovanijim
putem? (s tim što dobijaš nezavisnost od novella)
Peđa.
pascal.113sbrk,
>> >###### Jer stay42.arc nam je neko vec nabavio.
>>
>> Ovo bi me interesovalo. Gde?
..co jo 21 (pc.prog)
..co li /a /t
i dobijes:
>> 4.562 ->560 pascal mensi 07.07.92. 16:16 stay42.arc
OK?
pascal.114bole,
E otkrio sam otkriveno :)
Pokusao sam da otvorim COM2 (umesto com4(jel sa com4 nece da radi))
kao fajl sa append i onda uzem WRITELN (F,'CAO'); i ispise se cao na modm!
pascal.115ssokorac,
─┼┤ žek, ček... nije mi sad nešto jasno. Jel' ti imaš rutine razvijene
─┼┤ u paskalu za zaključavanje fajlova, podelu pristupa i sl. ? Ako
Pa, u INTER33 postoje svi potrebni interapti i opisi za zaključavanje i
podelu pristupa... Samo pozoveš šta ti treba :).
pascal.116ilazarevic,
Jedno pitanje: kako da postignem da TSR program zauzme što manje memorije? :)
Naime, ja sam seo i napisao jedno programče (probe radi) koje očitava miša,
te prepoznaje koji je taster pritisnut. To i nije bog zna šta, ali je program
(TP 6.0) zauzeo čitavih 13 K! Ima li rešenja, sem da pređem na asembler?
pascal.117isekulovic,
>> Ovo bi me interesovalo. Gde?
Pc.prog: 8.562 by mensi.
pascal.118eagle,
Kako se u paskalu presreću prekidi od 10h pa naviše (konkretno 13h) ?
Ili: kako ispravno napisati interapt proceduru, u kojoj se poziva stara
procedura kojoj je važan sadržaj registara ?
pascal.119predragd,
> twu1 zip 151084 Objasnjenje strukture TPU datoteka
> (TP 6.0, TPW 1.0)
To je na žalost opis struktura za TPU9 (TP 6.0). Kada bi još
imali opis nekde druge strukture, pa da pišemo konverter.
Peđa.
pascal.120ssokorac,
─┼┤ Hoćeš da kažeš da si ti išao MNOGO komplikovanijim
─┼┤ putem? (s tim što dobijaš nezavisnost od novella)
Ako to zoveš mnogo komplikovanijim, onda jesam :).
pascal.121bole,
Ljudi ocu da neki fajl recimo duzine 100 linija ucitam u 100 stringova
(a[1]..a[100])
ali da mogu da recimo a[2] pristupim trecem slovu a[2][3] (recimo) ali
me zeza zato jel kaze kada napisem type a=array [1..100,1..80] of string
STRUCTURE TO LARGE. tj. (tako sam ja shvatio) string moze do 255 a 100*80>255
e sad moze to da se uradi sa charom ali je mnogo teze i nije mi bas jasno, pa
nek neka dobra dusa mi malo razjasni!
pascal.122eagle,
> Ljudi ocu da neki fajl recimo duzine 100 linija ucitam u 100
> stringova (aŠ1Ć..aŠ100Ć)
> ali da mogu da recimo aŠ2Ć pristupim trecem slovu aŠ2ĆŠ3Ć
> (recimo) ali me zeza zato jel kaze kada napisem type a=array
> Š1..100,1..80Ć of string STRUCTURE TO LARGE. tj. (tako sam ja
> shvatio) string moze do 255 a 100*80>255
String je sam po sebi niz od 256 bajtova , pa si ovako definisao strukturu
(trodimenzionalni niz) veličine oko 2Mb (!!).
Treba da stoji a=arrayŠ1..100Ć of stringŠ80Ć , gde je 80 maksimalna
dužina stringa.
pascal.123draganm,
*> Jel' iko video DOBRE rutine za komunikaciju sa kom. portovima
*> za paskal ? (tu ne racunam ASYNC, posto njegove rutine nisu
*> dobre :).
Ja sam video DOBRE rutine, ali nisu u obliku sorce-a nego se dobijaju
kao TPU ... inace radi se o BBSKIT-u ... u unitu imas sve sto ti treba,
ukljucujuci Y i X modem protokole.
-=>Phantom Lord<=-/.CoRRoSioN.
pascal.124draganm,
*> Jedno pitanje: kako da postignem da TSR program zauzme sto
*> manje memorije? :) Naime, ja sam seo i napisao jedno programce
*> (probe radi) koje ocitava misa, te prepoznaje koji je taster
*> pritisnut. To i nije bog zna sta, ali je program (TP 6.0)
*> zauzeo citavih 13 K! Ima li resenja, sem da predem na
*> asembler?
Najjednostavnije resenje je da predjes na asembler.
-=>Phantom Lord<=-/.CoRRoSioN.
pascal.125ilazarevic,
> Najjednostavnije resenje je da predjes na asembler.
Što će reći, sedi i uči :) Moraću, sve mi se čini...
pascal.126peca.st,
!-> ali da mogu da recimo aŠ2Ć pristupim
!-> trecem slovu aŠ2ĆŠ3Ć (recimo) ali me zeza
!-> zato jel kaze kada napisem type a=array
!-> Š1..100,1..80Ć of string STRUCTURE TO
!-> LARGE. tj. (tako sam ja shvatio) string
!-> moze do 255 a 100*80>255 e sad moze to da
!-> se uradi sa charom ali je mnogo teze i
!-> nije mi bas jasno, pa nek neka dobra dusa
!-> mi malo razjasni!
To definišeš ovako
type
trtmrt = array Š1..100Ć of stringŠ80Ć; (sori na yuscii)
Ovo što si napisao "100*80>255 itd..." nema veze sa ovom porukom.
Ovu poruku ti prijavljuje zato što si ti, ovako kako si definisao
napravio 100*80=8000 stringova default dužine - znače dužine 255.
To je onda 256*8000 = 2 048 000 karaktera što daleeeeeeeeeeko prelazi
dozvoljenu strukturu od 64K. Osim toga, ovako kako si definisao ne bi
dobio ono što si hteo, jer bi dobio 100*80 stringova, a ne 100 stringova
dužine 80.
Valjda je jasno?
Peđa.
pascal.127ssokorac,
─┼┤ ali da mogu da recimo aŠ2Ć pristupim trecem slovu aŠ2ĆŠ3Ć (recimo) ali
─┼┤ me zeza zato jel kaze kada napisem type a=array Š1..100,1..80Ć of
─┼┤ string
Samo deklariši kao
type a=arrayŠ1..100Ć of stringŠ80Ć, ili
type a=arrayŠ1..100,1..80Ć of char
ŠĆ su srednje zagrade.
Bolja je prva varijanta jer možeš da pišeš aŠ2ĆŠ3Ć a i writeln(aŠ2Ć), dok
u drugoj ne možeš...
pascal.128snemcev,
>> Treba da stoji a=array[1..100] of string[80] , gde je 80 maksimalna
>> dužina stringa.
Nisam siguran dal' će Pascal to da proguta, možda ćeš morati prvo da
definišeš nov tip string[80] pa onda da staviš array[...] of taj_nov_tip.
pascal.129djelovic,
> Najjednostavnije resenje je da predjes na asembler.
Nije valjda da nemate nikakav TSR unit koji swap-uje veći deo
programa u EMS ili na disk? Mislim da će mu se prelazak na C++ isplatiti
više od prelaska na assembler :-).
pascal.130eagle,
>>> Treba da stoji a=arrayŠ1..100Ć of stringŠ80Ć , gde je 80
>>> maksimalna dužina stringa.
> Nisam siguran dal' će Pascal to da proguta, možda ćeš morati
> prvo da definišeš nov tip stringŠ80Ć pa onda da staviš
> arrayŠ...Ć of taj_nov_tip.
Progutaće, kao što bi progutao tip=arrayŠ..Ć of arrayŠ..Ć of ...itd
pascal.131v.nesic,
> Nisam siguran dal' će Pascal to da proguta, možda ćeš morati prvo da
> definišeš nov tip string[80] pa onda da staviš array[...] of taj_nov_tip.
Turbo paskal to guta još u onoj verziji koja radi na Tim 011.
pascal.132pedjak,
> Jedno pitanje: kako da postignem da TSR program zauzme što manje
> memorije? :) Naime, ja sam seo i napisao jedno programče (probe
> radi) koje očitava miša, te prepoznaje koji je taster pritisnut. To
> i nije bog zna šta, ali je program (TP 6.0) zauzeo čitavih 13 K! Ima
> li rešenja, sem da pređem na asembler?
Ako već nisi, smanji stek na minimum i ukini korišćenje dinamičke
memorije, ukini proveru steka, uopšte sve provere, to bi trebalo da
malo smanji kod. Za neke veće uštede moraš uzeti asembler u ruke :)
pascal.133bearboy,
> E otkrio sam otkriveno :)
>
> Pokusao sam da otvorim COM2 (umesto com4(jel sa com4 nece da
> radi)) kao fajl sa append i onda uzem WRITELN (F,'CAO'); i
> ispise se cao na modm!
Pokušaj da ispišeš nešto dugačko 5-6K.
pascal.134niklaus,
> Nije valjda da nemate nikakav TSR unit koji swap-uje veći deo
> programa u EMS ili na disk? Mislim da će mu se prelazak na C++
> isplatiti više od prelaska na assembler :-).
Od drugara sam saznao za neku šemu povezivanja C (++) sa
TP-om. Tačnije, to je valjda podržano nekim bibliotekicama i primerima
pride... Dobra alternativa za lenje kojima se ne uči (buba) nova
sintaksa. Ovo ću da izvidim kako šljaka...
Druga alternativa (koju ja donekle, u posebnim prilikama,
primenjujem) je linkovanje C .OBJ (hi .obj) datoteka u pascal programe.
Ovu drugo svakako valja isprobati...
(:niklaus:)
pascal.135ilazarevic,
> Ako već nisi, smanji stek na minimum i ukini korišćenje dinamičke
> memorije, ukini proveru steka, uopšte sve provere, to bi trebalo da
Sve ovo uradim, naravno :) Stek stavim na kilobajt, ali čini mi se da može i
manje. Izgleda da mi može pomoći samo asembler.
pascal.136draganm,
*> Sto ce reci, sedi i uci :) Moracu, sve mi se cini...
Pa ako znas asm za neki drugi procesor (recimo MC 68000) to ne bi
trebao da bude neki problem, jedini problem je sto kad predjes sa motorole
na intel osecas se ko da si presao sa konja na magarca. :(
-=>Phantom Lord<=-/.CoRRoSioN.
pascal.137mmile,
│ > Pokusao sam da otvorim COM2 (umesto com4(jel sa com4 nece da
│ > radi)) kao fajl sa append i onda uzem WRITELN (F,'CAO'); i
│ > ispise se cao na modm!
│
│ Pokušaj da ispišeš nešto dugačko 5-6K.
└───────────
Radio sam neki com program i u njemu stavio mogucnost izlaska u dos
tj. covek koji pozove izadje u dos na racunaru koji je zvao i onda
tu nesto radi.To sam uradio sa exec('COMMAND <COM1 >COM1 ') ali se
posle dva-tri minuta rada obavezno zaglavljivalo.Zasto ?
pascal.138sbrk,
>> To sam uradio sa exec('COMMAND <COM1 >COM1 ') ali se
>> posle dva-tri minuta rada obavezno zaglavljivalo.Zasto ?
Proveri da se nije prepunio buffer modema.
pascal.139ilazarevic,
> Pa ako znas asm za neki drugi procesor (recimo MC 68000) to ne bi
Ne znam nikakav asm :(
pascal.140broker,
> Može, šaljem. Problem je što se tako dobija zavisnost od
> Novella pa program ne radi na jednom compu u DV-u,
> recimo... Zato sam, pre nego što sam to završio ipak pisao
> komunikaciju pomoću fajlovanja, lokovanja :), šerovanja i
> sl. :)
To me i zanima, kako si rešio problem rada pod Novell,
DeskView-om i slicnim situacijama...
broker
pascal.141bearboy,
> Ja sam video DOBRE rutine, ali nisu u obliku sorce-a nego se
> dobijaju kao TPU ... inace radi se o BBSKIT-u ... u unitu imas
> sve sto ti treba,
TPU... Bljaaaah :) Apsolutno nekorisno :( Da napomenem, meni trebaju samo
OSNOVNE rutine (ono što imaju fosili, ništa više).
pascal.142ssokorac,
─┼┤ To me i zanima, kako si rešio problem rada pod Novell,
─┼┤ DeskView-om i slicnim situacijama...
Pa, toga nema u primerima. Radiš dosta jednostavno - otvoriš fajl sa
odgovarajućim parametrima (za čitanje, pisanje, čitanje/pisanje, pristup
ostalih svemu, pristup čitanju, pristu pisanju, nikakav pristup i sl.),
kada pišeš nešto u fajl lokuješ taj deo fajla, kada završiš odlokuješ i sl.
Ipak, ja nisam neko ko bi o tome mogao mnogo da priča, ovde sigurno ima
mnogo više ljudi koji to znaju mnogo, mnogo bolje od mene :).
pascal.143niklaus,
> TPU... Bljaaaah :) Apsolutno nekorisno :( Da napomenem, meni
> trebaju samo OSNOVNE rutine (ono što imaju fosili, ništa više).
Ako te zanimaju samo source-ovi XModem-a i YModem-a imam ih!
Za ZModem source si verovatno načuo (u C++ obliku) -imam i to,
međutim malo je teorije po kojoj bi je prebacio u TP formu.
(:niklaus:)
pascal.144draganm,
*> tu nesto radi.To sam uradio sa exec('COMMAND <COM1 >COM1 ')
*> ali se
Dovoljno je da stavis exec(getenv('comspec'),'com1') i sve bi trebalo
da radi ok ...
-=>Phantom Lord<=-/.CoRRoSioN.
pascal.145draganm,
*> Ako te zanimaju samo source-ovi XModem-a i YModem-a imam ih!
*> Za ZModem source si verovatno nacuo (u C++ obliku) -imam i to,
*> medutim malo je teorije po kojoj bi je prebacio u TP formu.
Ima li neko DETALJAN opis zmodema ? Ako ima dobrovoljno se javljam da
napisem zmodem u pascalu.
-=>Phantom Lord<=-/.CoRRoSioN.
pascal.146broker,
> Pa, toga nema u primerima. Radiš dosta jednostavno -
> otvoriš fajl sa odgovarajućim parametrima (za čitanje,
> pisanje, čitanje/pisanje, pristup ostalih svemu, pristup
> čitanju, pristu pisanju, nikakav pristup i sl.), kada
> pišeš nešto u fajl lokuješ taj deo fajla, kada završiš
> odlokuješ i sl. Ipak, ja nisam neko ko bi o tome mogao
> mnogo da priča, ovde sigurno ima mnogo više ljudi koji to
> znaju mnogo, mnogo bolje od mene :).
Znaci dovoljno je voditi računa? Samo da što manje držim otvorene
datoteke i da obavezno zaključavam slog kad ga menjam? To je Ok.
Ali pod DeskView-om ima i drugih problema, ne samo sa datotekama,
tu je tastatura, ekran i ostale sitnice...
Što se tiče onih koji mnogo više znaju, ja ih ne računam dok se
ne jave. Trenutno si se samo ti javio da nešto znaš o ovim
stvarima, i kao takav, trenutno najviše znaš :)
broker
pascal.147ssokorac,
─┼┤ Ali pod DeskView-om ima i drugih problema, ne samo sa datotekama,
─┼┤ tu je tastatura, ekran i ostale sitnice...
Što se tiče ekrana - ne diraj gotoxy i slične :). Isključivo ANSI, i
sve će raditi ok. Tastatura? U čemu je tu problem? Onaj prozor koji je
aktivan će dobijati taster od DV-a a ostale baš briga :). Valjda :). Nisam
probao da chatujem sa nekim iz DV-a :).
─┼┤ ne jave. Trenutno si se samo ti javio da nešto znaš o ovim
─┼┤ stvarima, i kao takav, trenutno najviše znaš :)
Ok, ali to je nešto-ništa (citat geografičarke iz oš kada nemaš pojma
posle odgovaranja:).
pascal.148bearboy,
> > TPU... Bljaaaah :) Apsolutno nekorisno :( Da napomenem, meni
> > trebaju samo OSNOVNE rutine (ono što imaju fosili, ništa
> više).
>
> Ako te zanimaju samo source-ovi XModem-a i YModem-a imam ih!
> Za ZModem source si verovatno načuo (u C++ obliku) -imam i to,
> međutim malo je teorije po kojoj bi je prebacio u TP formu.
Fosili nemaju stvarčice kao što su XYZmodem :) X i Y me ne interesuju, al'
onaj Z bih voleo da pogledam. Koja je verzija ?
pascal.150v.nesic,
> Ali pod DeskView-om ima i drugih problema, ne samo sa datotekama,
> tu je tastatura, ekran i ostale sitnice...
Pod DeskView-om nema nikakvih problema. Ti program najnormalnije pišeš
kao za DOS, o ostalom brine DV. Kako bi inače radila gomila programa
koja nije predviđena za njega? Jedino što stvarno može da napravi problem
su duplo otvoreni fajlovi i programi pisani da preuzimaju delove sistema.
pascal.151v.nesic,
> Ima li neko DETALJAN opis zmodema ? Ako ima dobrovoljno se javljam da
> napisem zmodem u pascalu.
Pogledaj u R:\COM\ZMODEMC.ZIP, tamo bi trebalo da ima.
pascal.152niklaus,
>*> Za ZModem source si verovatno nacuo (u C++ obliku) -imam i to,
>*> medutim malo je teorije po kojoj bi je prebacio u TP formu.
>
> Ima li neko DETALJAN opis zmodema ? Ako ima dobrovoljno se javljam
> da napisem zmodem u pascalu.
žini mi se da nemam takvo nešto, ali se dobrovoljno javljam da
dešifrujem _ono_ u C++ obliku (uz pomoć, naravno).
(:niklaus:)
pascal.153niklaus,
> aktivan će dobijati taster od DV-a a ostale baš briga :). Valjda
> :). Nisam probao da chatujem sa nekim iz DV-a :).
Ne bi trebalo da ima problema. Jedino što valja default-ovati
pri takvim radnjama je smanjiti tick-ove za prioritete (tako da odnos
fore:bckground bude isti). Poznati su već prijavljivani problemi sa
ZModemom pod DV-om.
(Inače, radim pod DV/X-om, a ne DV, gde je problem i pretvaranje
text-a u GUI prozore)
(:niklaus:)
pascal.154zdule,
╠═══ fore:bckground bude isti). Poznati su već prijavljivani
╠═══ problemi sa ZModemom pod DV-om.
Koji su to problemi ? Ja radim na 286 :( sa GSZ-om pod Dv-om
i nikada nije zezao.
ZDule...
pascal.155broker,
> ─┼┤ Ali pod DeskView-om ima i drugih problema, ne samo sa
> datotekama, ─┼┤ tu je tastatura, ekran i ostale sitnice...
>
> Što se tiče ekrana - ne diraj gotoxy i slične :).
> Isključivo ANSI, i sve će raditi ok. Tastatura? U čemu je
> tu problem? Onaj prozor koji je aktivan će dobijati taster
> od DV-a a ostale baš briga :). Valjda :). Nisam probao da
> chatujem sa nekim iz DV-a :).
A pisanje na lokalni ekran. Neću valjda i to preko ANSI-ja?
A šta je sa time slicing-om? I oko toga treba voditi računa,
kad se radi pod DV-om.
broker
pascal.156broker,
>> Ali pod DeskView-om ima i drugih problema, ne samo sa
>> datotekama, tu je tastatura, ekran i ostale sitnice...
>
> Pod DeskView-om nema nikakvih problema. Ti program
> najnormalnije pišeš kao za DOS, o ostalom brine DV. Kako
> bi inače radila gomila programa koja nije predviđena za
> njega? Jedino što stvarno može da napravi problem su duplo
> otvoreni fajlovi i programi pisani da preuzimaju delove
> sistema.
ne treba da naravim program koji će eto da radi i pod DV-om,
već koji će pouzdano da radi. Iz dokumentcije za X00 sam
video da DV ume da napravi probleme kod preuzimanja
interapta, pa onda, šta ako aplikacija stoji i ne radi ništa
pametno? Zašto bi i dalje oduzimala silno vreme DV-u? Sigurno
ima metod da se to oslobodi.
broker
pascal.157broker,
Ima li neko TP source nekog arhivera? Nije bitno koji je i
kakav je (dobro de, ne treba da bude baš neki očajno loš).
broker
pascal.158v.nesic,
> pametno? Zašto bi i dalje oduzimala silno vreme DV-u? Sigurno
> ima metod da se to oslobodi.
Univerzalni metod koji važi sa 99,9% multi taskera ja da izvršiš
HALT instrukciju mikroprocesora i čekaš da te pozove interapt za
tastaturu ili šta već čekaš da se odazove.
Naravno, za svaki postoji API koji pruža dodatne mogućnosti ali
je to retko kada vredno truda, pogotovo u našim uslovima.
BTW, gomila komercijanih programa koji recimo znaju da provale da
se nalaze pod DV-om to uopšte ne uzima u obzir da paralelno njima
radi još taskova. Šta više, ja još nisam naišao ni na jedan...
pascal.159bearboy,
>> Što se tiče ekrana - ne diraj gotoxy i slične :).
> A pisanje na lokalni ekran. Neću valjda i to preko ANSI-ja?
Ne vidim razlog zašto bi radio preko ANSI-ja. DV presreće sve pozive, pa i
gotoxy, i uraki ih kako njemu odgovara.
pascal.160ssokorac,
─┼┤ Ne vidim razlog zašto bi radio preko ANSI-ja. DV presreće sve pozive,
─┼┤ pa i gotoxy, i uraki ih kako njemu odgovara.
Ok, onda piši gotoxy kada si u lokalu a ANSI kada šalješ remote ako ti je
zgodnije ;). Više volim da pišem samo ANSI pa da radi svuda :).
pascal.161broker,
>> pametno? Zašto bi i dalje oduzimala silno vreme DV-u?
>> Sigurno ima metod da se to oslobodi.
>
> Univerzalni metod koji važi sa 99,9% multi taskera ja da
> izvršiš HALT instrukciju mikroprocesora i čekaš da te
> pozove interapt za tastaturu ili šta već čekaš da se
> odazove.
Hvala, ovo je jos jedan trag za pipanje po mraku. :)
> BTW, gomila komercijanih programa koji recimo znaju da
> provale da se nalaze pod DV-om to uopšte ne uzima u obzir
> da paralelno njima radi još taskova. Šta više, ja još
> nisam naišao ni na jedan...
A kako program može da sazna da je pod DV-om?
RemoteAcess (BBS program) to radi. Kad čeka da se javi sledeći
korisnik prepusti vreme DV-u. Doduše, ne radi to zbog drugih
programa, već drugih nodova na istom BBS-u. :)
broker
pascal.162rcolic,
Vozdra. Ja reko da pitam neke stvarcice...
Elem, nabavih .TPU za sviranje ´╗Îmodula i sada se pitam nesto:
da li nekako mogu da preskocim pattern u modulu unapred ili unazad? nisam nasao
nijednu komandu te vrste u dokumentaciji a to mi je preko potrebno...
Zatim, interesuje me da li postoji neka naredba kojom bih mogao da promenim
video page ( u modu 320x200x256 ) radi animacije pojedinih sprajtova.
'vala unapred svakom ko mi da bilo kakvo resenje ovih problemcica...
Rcolic
pascal.163niklaus,
> Fosili nemaju stvarčice kao što su XYZmodem :) X i Y me ne
> interesuju, al' onaj Z bih voleo da pogledam. Koja je verzija ?
Izvini da 'delayed' odgovoru (digitron mi je bio u out-u). ):
Kod ZModem-a (i komunikacionih protokola) važi pravilo
"verzija k'o verzija" , odn. nova verzija neće doneti ništra extra novo.
Tačnije, što se same komunikacije tiče - neće doneti NIŠTA novo, jer
kod kom. protokola ne važi logika kao kod, na primer, fajl-kompresora
gde nova varijanta donosi bolju kompresiju i ovo&ono (zajedno sa
vertikalnom kompaibilnošću). Dakle jedina poboljšanja su (možda) brže
pražnjenje bafera (brža obrada prispelih podataka), mada manje verovatno,
i eventualno neke manje-više suvišne stvari (prezentirane u vidu perve-
rzija) - ovde mi pade na pamet SuperZModem.
Ako te i dalje zanima koja je verzija u pitanju, možeš dl-nuti
odavdeN iz dira ('R:ĐIBMĐCOMĐZMODEMC.ZIP', ili '..ĐC') pa vidi...
(:niklaus:)
pascal.164niklaus,
> koja nije predviđena za njega? Jedino što stvarno može da napravi
> problem su duplo otvoreni fajlovi i programi pisani da preuzimaju
> delove sistema.
Za SHARING pod DV(/X)-om se ti uopšte ne moraš brinuti,
kao ni za ubrzavanje rada sa diskom i sličnih stvari, koje inače
dobijaš (doduše, u lošijem stanju) u obliku raznih DOS utility-ja.
(:niklaus:)
pascal.165niklaus,
> A kako program može da sazna da je pod DV-om?
>
> RemoteAcess (BBS program) to radi. Kad čeka da se javi sledeći
Radi i ZBTET, naprimer. (:
Ako nemaš "DOS Refference" obavezno ga nabavi (tamo ćeš
na par mesta naći dosta stvari vezanih za DV/X, uključujući i
detekciju). Imao sam žlju da to ovde napišem, međutim nisam našao
jedan DOS program (odnosno za DV(/X) ) koji se buni ako nije
izvršen iz DV DOS prozora, a DOSRef nemam kod kuće.
(:niklaus:)
P.S. Inače 'jedan program' se zove CRON*.* i ima ga na FON (možda i
ovde, ali nisam siguran), a uz sebe ima source, doduše bez _tog_ vi-
talnog heder-fajla. Služi za inicijalizaciju više DV taskova
pozivanjem dotičnog programa iz DOS prozora (zanimljivo). Da bi ga
i mi (smrtnici) mogli nedostaju (barem meni) sledeće bibliotekice:
<tvapi.h> - po source-u ja bih ovo trebao da imam uz svoj
TC 2.0 (MS C).
"pif.h" - po mojoj proceni služi za rad sa DVP datotekama
(jer je moguće pozivanje programa i na osnovu
njihovog DesqView PIF-a)
"getopt.h" - pitaj Boga čemu služi
(možda je tu ono - int DVInit() iz koje
se vraća 0, ako se ne CRON poziva iz DV)
pascal.166djelovic,
> <tvapi.h> - po source-u ja bih ovo trebao da imam uz svoj
> "pif.h" - po mojoj proceni služi za rad sa DVP datotekama
> "getopt.h" - pitaj Boga čemu služi
Ovo su include datoteke iz BC++ paketa.
pascal.167niklaus,
> P.S. Inače 'jedan program' se zove CRON*.* i ima ga na FON (možda
Sad pogledah - zove se DVCRON21.ZIP. Obavezno ga snimi (probaj.
I source naravno - poučan je.
(:niklaus:)
P.S. Pogledao sam u svom spisku sa SEZAMovog dira i - nema ga.
Upućujem poziv bulaji... (:
pascal.168v.nesic,
> A kako program može da sazna da je pod DV-om?
Preko nekog interapta, imaš u onom Ralf Braunovom spisku interapta
sve što može da ti zatreba samo je jako konfuzno. DV je uglavnom
pod 15h, ali pogledaj i ostale.
pascal.169v.nesic,
> Za SHARING pod DV(/X)-om se ti uopšte ne moraš brinuti,
> kao ni za ubrzavanje rada sa diskom i sličnih stvari, koje inače
> dobijaš (doduše, u lošijem stanju) u obliku raznih DOS utility-ja.
Ako otvorim dva taska koja intenzivno menjaju jedan te isti fajl
koristeći interne bafere imam šta da brinem, a nemam više ničeg
korisnog u tom fajlu :(
pascal.170niklaus,
>> <tvapi.h> - po source-u ja bih ovo trebao da imam uz svoj
>> "pif.h" - po mojoj proceni služi za rad sa DVP datotekama
>> "getopt.h" - pitaj Boga čemu služi
>
> Ovo su include datoteke iz BC++ paketa.
Sve tri? Šalji u mail, please (ako ne zahteva ++, kao što
ne bi trebalo).
(:niklaus:)
pascal.171niklaus,
> Ako otvorim dva taska koja intenzivno menjaju jedan te isti fajl
> koristeći interne bafere imam šta da brinem, a nemam više ničeg
> korisnog u tom fajlu :(
Pa ispričaj mi detalje - šta ti se dešava?
(:niklaus:)
pascal.172v.nesic,
> Pa ispričaj mi detalje - šta ti se dešava?
Najbanalnije, uzmeš qedit i njime u dva različita taska otvoriš isti
fajl i menjaš ga, ali u jednom taku pišeš jedno, u drugom drugo.
Pošto qedit drži ceo tekst u memoriji na disku će ti promene koje su
uneo u tasku koji je poslednji zatvoren i to je najmanja šteta koja
može da ti se desi.
Da sada ne vadim programe iz malog mozga, razmisli šta se dešava kada
bi umesto qedita startovao neko čudo koje deo falja drži u memoriji,
pa kad ga obradi zapiše, pa malo produži fajl, pa ga malo skrati...
Ako programi ne rade zaključavanje slogova ili bar ekskluzivno
otvaranje fajlova koje menjaju možeš da ne bude ništa, da imaš
nekonzistentne podatke ili pogubljene klastere u najgoroj varijanti.
pascal.173pedjak,
> Elem, nabavih .TPU za sviranje ´╗Îmodula i sada se pitam nesto:
Kako se zove taj TPU ?
pascal.174isekulovic,
>> A kako program može da sazna da je pod DV-om?
Ima negde :) na sezamu unit mulaware, koji prepoznaje win,dv i
još ponešto. Ako se dobro sećam ima i sors.
pascal.175broker,
> P.S. Inače 'jedan program' se zove CRON*.* i ima ga na FON
> (možda i ovde, ali nisam siguran), a uz sebe ima source,
> doduše bez _tog_ vi-
Potrazicu ga. Mnogo hvala. Konci se sve brze odmrsuju :)
broker
pascal.176broker,
Nekome sam obecao funkcije za formatiranje datuma i vremena za TP.
Evo, uz ovu poruku sam zakacio datoteku sa sorcetom Unit-a i malim
demoom.
Funkcije su vrlo zgodne jer omogućavaju da se datum i vreme ispišu u
proizvoljnom formatu. Jednostavno se u string stave makroi koji će
biti zamenjeni odgovarajućim podacima.
Nadam se da će nekome biti od koristi.
Pozdrav,
brokerč38:101/101%setnet.oreska
str100.zippascal.177niklaus,
>> Elem, nabavih .TPU za sviranje ´╗Îmodula i sada se pitam nesto:
>
> Kako se zove taj TPU ?
U stvari je OBJ - dakle može i C i Pas. (:
Još ga nisam isprobao, ali to može samo ili da radi
(da peva) ili ne. (:
(:niklaus:)
pascal.178.ristan.,
Zdravo,
Evo i mog prvenca u Vašoj konferenciji. U multitasking operacionim
sistemima se za pristup svakog taska zajedničkim resursima koristi
tehnika semafora. Task koji prvi "uzme" npr. štampač ili file postavi
semafor ( crveno ) i kad mu više ne treba on ga vrati ( zeleno ). Za
to vreme ostali ( pa i oni VIŠEG prioriteta ) čekaju na red. Time se
postiže ekskluzivnost pristupa. Kako Vaš-Naš DOS nije napisan za takve
primene on na ćoravo uzima šta stigne i brlja kao prase. Zato pomaže
samo jednostruko startovanje DOS-a recimo preko taska koji tu jedno-
strukost kontroliše.
Pozdrav svima
pascal.179.bale.,
> primene on na ćoravo uzima šta stigne i brlja kao prase. Zato pomaže
Lepo rečeno! :-)
pascal.180a.kircanski,
_-=> Nabavi program ADDPORT ili ADD34 ili sl. i staruj ga.
_-=> Zatim iz dosa uradis echo OVDE BOLE >COM3.Jedini problem
_-=> je sto na adrese 0:404h i 0:406h treba upisati adrese kom.
_-=> portova kako bi BIOS bio u stanju da koristi com 3 i 4 a to
(izvinite, sto odgavaram na stare poruke, ali dugo sam bio u kanadi,
pa sam skino sve iz pc.prog.3/pascal)
Imam ja taj addport, i on je by me.:-)
Samo treba da se promeni nekoliko lokacijica u memoriji i sve je OK.
PS poslacu ako je neko zainteresovan.
sale.
pascal.181bearboy,
> "verzija k'o verzija" , odn. nova verzija neće doneti ništra
> extra novo.
Nemoj tako :) Evo, onaj opis u ZMODEMC je iz '86, pa nema opis za Zmodem
sa 32-bitnim CRC, etc. Sad se samo nadam da na mestu CRC-a ima 2 bajta
viska i nista vise ;)
pascal.182niklaus,
>> "verzija k'o verzija" , odn. nova verzija neće doneti ništra
>> extra novo.
>
> Nemoj tako :) Evo, onaj opis u ZMODEMC je iz '86, pa nema opis za
> Zmodem sa 32-bitnim CRC, etc. Sad se samo nadam da na mestu CRC-a
> ima 2 bajta viska i nista vise ;)
Pa, to je nešto drugo.
Vremenom je po računarima širom sveta preovladao CRC-32 ZModem
protokol - zbog veće sigurnosti naravno (štaviše kod ovakvih čeksum
provera verovatnoća greške je veoma bliska nuli - za ceo aktivni modema-
ški život, ne bi trebalo išta liše da ti se desi). (:
Druga stvar je što i dan danas u raznim kom. programima sem
CRC-32 postoji i CRC-16 Zmodem (npr. Telemate koji ga uključuje po
potrebi, odnosno zavisno od pošaljioca).
Treća stvar je što je '86 ipak bila pre nekih 7 god. (:
(:niklaus:)
pascal.183oduz,
Kako da preuzmem INT 2Fh tako da ako je na ulazu AX=0200h na izlazu iz
interapta AX bude FF00h? Ovo pitam bas za INT 2Fh zbog toga sto ista
rutina koju kacim na INT 60h radi, a kada je zakacim (uz odredjene modifi-
kacije) na INT 2Fh ne radi.
Ogi
pascal.184mjova,
> Kako da preuzmem INT 2Fh tako da ako je na ulazu AX=0200h
> na izlazu iz interapta AX bude FF00h? Ovo pitam bas za INT
> 2Fh zbog toga sto ista rutina koju kacim na INT 60h radi,
> a kada je zakacim (uz odredjene modifi- kacije) na INT 2Fh
> ne radi.
ne znam kako je to rešeno u paskalu, ali verovatno nije daleko od
rešenja ugrađenog u C. naime, o tome je bilo dosta diskusije u nekoj
od ovih tema pa prelistaj cccc.
problem je što se funkcije deklarisane sa interrupt smeštaju između
push 'all' i pop 'all' (ovo 'all' je 'svi registri'). u tom slučaju
kad se popuni neki registar u toj rutini on zapravo ne utiče na izlaz
jer se pre jedne iret povrate (bljuagrrhh ;) svi registri u stanje
pre ulaska. e, sad, to kvari koncepciju interapta koji treba da vrati
izvesne podatke u nekim registrima.
u C-u ima nekoliko rešenja, a pošto sam o jednom (težem ;) pisao jer
nisam bio baš upućen u neke detalje, onda mogu da sad ukratko navedem
šta je elegantnije rešenje.
void interrupt far intNO(bp, di, si, ds, es, dx, cx, bx, ax) {
ax= 0;
}
ono što je navedeno između zagrada () nisu sadržaji registara, već su
to promenljive 'kao' i svake druge. 'kao' zato što se na ovaj način
'ciljaju' sadržaji registara na steku, pa se, razumljivo, mogu
podesiti potrebni sadržaji.
procedure IntProc(Flags, CS, IP, AX, BX, CX, DX, SI, DI, DS, ES, BP: Word);
dakle, vrlo je slično C-u, osim bogatijeg izbora registara. no,
pretpostavljam da nećeš menjati registre CS i IP. Mada, zašto da ne?
obrati pažnju da su izvesni registri specijalne namene, pa im
vrednost moraš čuvati.
naravno, kako je to u C-u, promenljive će biti 'adresirane' preko BP,
pa se meni to rešenje i ne dopada previše, ali za 'proveru algoritma'
može lepo da posluži.
fraza 'provera algoritma' je vrlo zanimljiva. njom se mogu izbeći
razni pritisci koji teže pisanju programa na neki drugi način, možda
onakav kakav bi se dopao izvoru pritiska. prvi put sam je čuo od
gww.-a koji je pisao u C-u samo kad 'proveri algoritam' u paskalu ;).
toliko mi se dopada da je i sam koristim da odbijem slutnje...
pascal.185drassa,
>>> Kako da preuzmem INT 2Fh tako da ako je na ulazu
>>> AX=0200h na izlazu iz interapta AX bude FF00h? Ovo pitam
>>> bas za INT 2Fh zbog toga sto ista rutina koju kacim na
>>> INT 60h radi, a kada je zakacim (uz odredjene modifi-
>>> kacije) na INT 2Fh ne radi.
Možda pomogne ovo:
program tajitaj;
var
r:registers;
axr,..r,..r,..r:word;
Procedure blabla (var axr,..r,..r..r :word);
var
Boolean;
r: registers;
...
begin
...
intr($2fh);
axr:=r.ax;
ako je axr=0200h onda
axr:=ff00h;
r.ax:=axr;
intr($2fh);
axr:=r.ax;
kraj uslova
kraj ili nastavak procedure...
Nadam se da je pomoglo iako je malko naivno rešenje,
ali bi trebalo da radi :)
pascal.186pedjak,
> interapta AX bude FF00h? Ovo pitam bas za INT 2Fh zbog toga sto ista
> rutina koju kacim na INT 60h radi, a kada je zakacim (uz odredjene
> modifi- kacije) na INT 2Fh ne radi.
'Ajde nam bači ovde tu rutinu, pa da vidimo u čemu je problem.
pascal.187bearboy,
> Vremenom je po računarima širom sveta preovladao CRC-32 ZModem
> protokol - zbog veće sigurnosti naravno (štaviše kod ovakvih
> čeksum provera verovatnoća greške je veoma bliska nuli - za ceo
> aktivni modema- ški život, ne bi trebalo išta liše da ti se
> desi). (:
Što se CRC-a tiče, ja sam njega (a i druge metode za proveru/korekciju
grešaka) pručavao dosta detaljno i došao do rezultata koji nisu zavidni...
Jes' da je verovatnoća mala, ali je još uvek veća nego što bi trebalo.
PS. Ako treba, mogu staviti na Sezam svoje programče koji testira CRC (i 16
i 32-bitnu varijantu), checksum i još neke manje poznate metode...
pascal.188peca.st,
!-> PS. Ako treba, mogu staviti na Sezam
!-> svoje programče koji testira CRC (i 16 i
!-> 32-bitnu varijantu), checksum i još neke
!-> manje poznate metode...
Treba.
Peđa.
pascal.189v.nesic,
> PS. Ako treba, mogu staviti na Sezam svoje programče koji testira CRC (i 16
> i 32-bitnu varijantu), checksum i još neke manje poznate metode...
Ako nije tajna, bolje okači rezultate testova :)
pascal.190a.kircanski,
hi.
Nabavio sam (najzad) TPU koji podržava com3 i com4. Zove se ltcomm, ili tako
nekako. Naime treba mi pomoć, evo malo kvota iz help fajla, za koje mi
treba objašnjenje:
------------------------------=-=-=-=-=-=-=------------------------------
FUNCTION FUNCTION ________
Changes one or more of the critical parameters for port COM3
or COM4.
------------------------------=-=-=-=-=-=-=------------------------------
critical parameters?? Šta mu to dođe?
dalje:
------------------------------=-=-=-=-=-=-=------------------------------
DECLARATION DECLARATION ___________
Portchange(CPort:integer; NewBase:word; NewIrq,
NewVector:byte)
RESULT TYPE RESULT TYPE ___________
boolean
REMARKS REMARKS _______
This function must be used before the port is opened to be
effective. To leave any of the parameters at its default
value, make the corresponding entry 0. Note that vector is a
vector number, not an address or pointer.
The irq parameter should not be taken to be the irq
(interrupt request number), but rather the irq mask. For
example, the correct value for irq4 is NOT 4, but a byte in
which bit 4, using INTEL's bit numbering, is set to a value
of 1. Thus, to use irq priority 4 as the irq for either COM3
or COM4, you would specify $10 as the value of irq when
calling PortChange.
If you intend to change the default irq settings, you MUST
also make a corresponding change to the vector number. See
the preceding section about using COM3 and COM4 for
additional details. Failure to follow this rule may make the
port appear to be non-functional.
The PortChange function does NOT check to determine that you
have provided both an IRQ mask AND a new vector number.
PortChange returns a value of TRUE if the change was
successful, false otherwise.
--------------------------------=-=-=-=-=-=-=----------------------------
I šta je IRQ? (znam da je interrupt request number, al šta znači)
I kako ja da mu promenim adresu i to da radi, ako imam com4?
evo i example...
---------------------------------=-=-=-=-=-=-=-------------------------
EXAMPLE EXAMPLE _______
Var
Newbase : word;
Newirq : byte;
NewVector : byte;
Begin
Newbase := $03E8;
Newirq := $10;
NewVector := $0C;
if PortChange(3, Newbase, Newirq, NewVector)
then
Writeln('Port 3 Changed')
else
Writeln('Error changing Port 3');
end;
pascal.191oduz,
>**> naravno, kako je to u C-u, promenljive će biti 'adresirane'
>**> preko BP, pa se meni to rešenje i ne dopada previše, ali za
>**> 'proveru algoritma' može lepo da posluži.
Znaci to bi islo nesto ovako:
š$M 1024,0,0ć
Uses Dos;
Var
OldInt2FP : Pointer;
Procedure DoOldInt(IntPt : Pointer);
INLINE (
$5B/ šPOP BXć
$58/ šPOP AXć
$89/ šMOV SP,BPć
$EC/
$5D/ šPOP BPć
$07/ šPOP ESć
$1F/ šPOP DSć
$5F/ šPOP DIć
$5E/ šPOP SIć
$5A/ šPOP DXć
$59/ šPOP CXć
$87/ šXCHG SP,BPć
$EC/
$87/ šXCHG ŠBPĆ,BXć
$5E/
$00/
$87/ šXCHG ŠBP+2Ć,AXć
$46/
$02/
$87/ šXCHG SP,BPć
$EC/
$CB); šRETFć
Procedure Int2FHandler(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word);interrupt;
Var
AH, AL : Byte;
begin
AH := Hi(AX);
AL := Lo(AX);
if (AH = $02) and (AL = $00) then
begin
asm
mov AX,$00FF
mov ŠBP+16Ć,AX
end
end
else DoOldInt(OldInt2FP);
end;
BEGIN
GetIntVec($2F, OldInt2FP);
SetIntVec($2F, čInt2FHandler);
Keep(0);
END.
Ogi
pascal.192mjova,
> Znaci to bi islo nesto ovako:
> INLINE (
> $5B/ šPOP BXć
rekoh već da ne radim ništa u paskalu, ali nema veze (samo se
ograđujem od mogućih bagova ;)
ne znam zašto koristiš inline kad mi se čini da možeš sasvim lepo da
pišeš u čistom asembleru i da to proteraš kroz paskal (asm). ako ti
nije problem, baš me zanima.
drugo, oni registi koji se navode u liniji deklaracije funkcije su
zapravo promenljive čiji će sadržaj biti na ulazu jednak sadržajima
registara pri prekidu, a vrednosti koje se u njima nalaze na kraju
prekida biće postavljene u odgovarajuće registre pri izlazu. naime,
svaka promena vrednosti sadržaja te promenljive *indirektno* će
izazvati promenu tog registra. adresa promenljive je zapravo adresa na
steku gde se nalazi njen sadržaj. aman ;), ni meni više nije jasno šta
sam počeo da pišem ;)
> if (AH = $02) and (AL = $00) then
> begin
> asm
> mov AX,$00FF <<
> mov ŠBP+16Ć,AX << ovo nije potrebno.
> end
> end
a nije potrebno jer je dovoljno da napišeš AX:= $00FF. možda je
mehanizam prevođenja drugačiji, ali uz ovolike sličnosti sumnjam.
tako da mislim da se ona fn za obradu interapta može napisati ovako:
> Var
> AH, AL : Byte;
> begin
> AH := Hi(AX);
> AL := Lo(AX);
> if (AX = $0200) then
> AX:= $00FF
> else
> DoOldInt(OldInt2FP);
> end;
nemam baš vremena da probam, ali me zanima - u c-u radi sasvim dobro!
treće, nije mi jasna upotreba procedure DoOldInt, da li je neophodna?
pascal.193oduz,
>**> ne znam zašto koristiš inline kad mi se čini da možeš sasvim
>**> lepo da pišeš u čistom asembleru i da to proteraš kroz
>**> paskal (asm). ako ti nije problem, baš me zanima.
Ako si primetio nigde nema BEGIN END ;) sto znaci da BP ne sredjuje nista
sa stekom...Moglo je i u asembleru, ali bi onda (verovatno, nisam ja napisao
tu proc. a nisam ni imao bas mnogo vremena da razbijam glavu oko toga - rad-
ila mi je posao) bilo valjda malo vise posla.
>**> registara pri prekidu, a vrednosti koje se u njima nalaze na
>**> kraju prekida biće postavljene u odgovarajuće registre pri
>**> izlazu. naime,
Nisam znao :(( ... Ja mislio da mozes da ih menjas i koristis ali da ih na kr-
aju vrati kao sto su bili pre ulaska... :(
>**> a nije potrebno jer je dovoljno da napišeš AX:= $00FF. možda
>**> je mehanizam prevođenja drugačiji, ali uz ovolike sličnosti
>**> sumnjam.
Dovoljno je prosto AX := $00FF...ALi, zasto ici lakse kad moze i teze ? ;)
>**> treće, nije mi jasna upotreba procedure DoOldInt, da li je
>**> neophodna?
Pa, ukoliko se ne radi o funkciji koju koristi moj prg. mozda se radi o fun-
kciji koju koristi neki drugi prg. Zato i pozivam "stariji" hendler.
ODuzlevski
pascal.194bearboy,
>! -> PS. Ako treba, mogu staviti na Sezam
>! -> svoje programče koji testira CRC (i 16 i
>! -> 32-bitnu varijantu), checksum i još neke
>! -> manje poznate metode...
>
> Treba.
Elem, evo programa ALI - juzer interfejs i nije neki (nema ga ;) sve
dugmice cete morati da pohvatate (ima ih oko desetak). Ova verzija
konkretno sluzi za testiranje 32bitnog CRC-a. Ako pokrenete program bez
parametara, reci ce vam sta treba da se upise.
pascal.195bearboy,
>> PS. Ako treba, mogu staviti na Sezam svoje programče koji
>> testira CRC (i 16 i 32-bitnu varijantu), checksum i još neke
> manje poznate metode...
>
> Ako nije tajna, bolje okači rezultate testova :)
Pa ovako - Kad sam ga pustio da progura 10 mega pod VRLO lošim kvalitetom
linije (zapravo nije bio problem u 'lošosti' linije već što sam postavio
parametre da đubre nailazi u talasima), i sa blokovima od 256 bajtova, bilo
60 nedetkovanih grešaka.
pascal.196paki,
Kako da u Paskalu deklarišem static promenljivu?
Znači, treba mi promenljiva koja će zadržavati svoju vrednost i
kada izađem iz funkcije u kojoj je definisana. Jedino što mi pada
na pamet su globalne promenljive.
pascal.197peca.st,
!-> Elem, evo programa
Gde je? :(
Peđa.
pascal.198mjova,
> Pa, ukoliko se ne radi o funkciji koju koristi moj prg.
> mozda se radi o fun- kciji koju koristi neki drugi prg.
> Zato i pozivam "stariji" hendler.
da, to je jasno, ali zar mora baš onako? u C-u to ide nekako ovako:
void interrupt new_int_16(tra l a l a l a l registri) {
// aok je moje onda đoram
if(ax == 0x01) {
drljaj nešto();
cx= 100; < - nizak udarac u sred steka ;)
return;
}
// ne zanima me ništa, obradi strari
old_int_16();
}
nisam siguran da li treba navesti registre redom u onoj old_int_16(),
ali za pristup 'bez uputstva' i ovo je super ;)
pascal.199quale,
Interesujeme da li je neko imao iskustva sa:
Skeniranjem, Svjetlosnom olovkom
dakle podrazuš,ijeva s,
Thanx in advance:)
pascal.200sbrk,
>> Kako da u Paskalu deklarišem static promenljivu?
>> Znači, treba mi promenljiva koja će zadržavati svoju vrednost i
>> kada izađem iz funkcije u kojoj je definisana. Jedino što mi pada
>> na pamet su globalne promenljive.
Ako pitanje ima čisto teorijsko značenje, onda - žao mi je. Mislim da to u TP-u
može da se izvede samo preko glob.promenljivih.
Ako odgovor treba da posluži u praksi - šta fali dobrim, starim,
glob.promenljivima?
pascal.201asterix,
Da li funkcija u Pascal-u može da vrati pokazivač ?
Function ABC (...) : nekakav_pointer ;
pascal.202pedjak,
> Kako da u Paskalu deklarišem static promenljivu?
> Znači, treba mi promenljiva koja će zadržavati svoju vrednost i
> kada izađem iz funkcije u kojoj je definisana. Jedino što mi pada
> na pamet su globalne promenljive.
Tačno, jedino na taj način static promenljive možeš simulirati.
pascal.203eagle,
> Da li funkcija u Pascal-u može da vrati pokazivač ?
> Function ABC (...) : nekakav_pointer ;
Naravno, samo je potrebno da prethodno definises tip pokazivaca,
na primer:
type pok=žinteger;
function bezveze:pok;
a ne može:
function nemoguca:žinteger;
pascal.204paki,
> Ako odgovor treba da posluži u praksi - šta fali dobrim, starim,
> glob.promenljivima?
Ništa, ali sam mislio da bi onako bilo preglednije, lepše i
ko-zna-šta-još :) Šalim se, globalne promenljive rade posao.
pascal.205asterix,
> type pok=žinteger;
> function bezveze:pok;
>
> a ne može:
>
> function nemoguca:žinteger;
Da pa naravno :) da prethodno mora da se deklariše
pokazivač :). Mislio sam da li je moguća konstrukcija
tipa:
Type pokazivac=^clan;
clan=record
...
end;
Function nemoguca (...) ;
Begin
...
node^.levi:=nemoguca (...) ;
...
End.
pascal.206zokalezic,
Hi
Sledeći program bi trebalo da preuzme int 21 i da odradi neki posao,
međutim ovako napisan iz cuga zaglupi mašinu. E sad ako promenim
interapt koji preuzima ( stavim bilo koji <> 21 ) onda radi bez problema.
Zna li neko zašto ?
{$B-,F-,R-,S-}
{$M 1024,0,0}
Program test;
Uses dos,rezid;
Var r:Registers;
Old:Procedure;
Procedure New;Interrupt;
Begin
Inline($9c);
Old;
End;
Begin
Swapvectors;
GetIntVec($21,@Old);
SetIntVec($21,@New);
Keep(0);
End.
pascal.207pedjak,
> Da li funkcija u Pascal-u može da vrati pokazivač ?
Može.
pascal.208eagle,
> Sledeći program bi trebalo da preuzme int 21 i da odradi neki
> posao, međutim ovako napisan iz cuga zaglupi mašinu. E sad ako
> promenim
U Tp-u nije baš onako jednostavno uraditi tako nešto.
Proceduri koju si sklonio sa tog vektora je u najvećem broju
slučajeva važan sadržaj registara, pa pre njenog poziva
moraš ubaciti niz instrukcija u asembleru za skidanje sa steka
sadržaja registara_pre poziva tvoje procedure.
Zameni redove:
inline($9C);
old;
procedurom DoOldInt iz poruke 8.191
pascal.209niklaus,
(:> Elem, evo programa ALI - juzer interfejs i nije neki (nema ga
(:> ;) sve dugmice cete morati da pohvatate (ima ih oko desetak).
(:> Ova verzija konkretno sluzi za testiranje 32bitnog CRC-a. Ako
(:> pokrenete program bez parametara, reci ce vam sta treba da se
(:> upise.
Nema sira? (;
(;niklaus;)
pascal.210niklaus,
(:> Kako da u Paskalu deklarišem static promenljivu?
Pošto očekuješ nešto više od jednostavnog odgovora, predložiću
ti nešto wadikalnije za pascal - rad sa stekom, jer to u stvari radi
i C kompajler. Jedan od uslova da se stek na ovaj način bezbedno i
isravno koristi, je da non-stop obraćaš pažnju na to da li neki "asm"
segment koji primenjuješ za svaki PUSH ima i odgovarajući POP na kraju
datog segmenta. Kako izgleda da programiraš u TP 4Win-u, i to tek od
skora, "asm" sigurno ne koristiš. Mada će ti to biti dobra vežba za
vežbanje "asm"-a i koncentrisanja na "sitnice" tipa PUSH&POP, štednja
Code Segmenti (korišćenjem manje globalnih promenljivih)...
(:niklaus:)
PS Kako nemam nameru da koristim TPW (BPW), očekujem 32-bitni Pascal
kompajler... (:
pascal.211niklaus,
(:> Function nemoguca (...) ;
(:> Begin
(:> ...
(:> nodež.levi:=nemoguca (...) ;
(:> ...
(:> End.
Misliš li na rekurzione funkcije, koje se služe pokazivačima?
I to je moguće! Primer je sastavljanje Hafmanovog stabla, kod mnogih
algoritama za kompresiju.
(:niklaus:)
PS (za neupućene)
Hafman (Huffman) stablo - binarno drvo koje se sastavlja na
osnovu učestanosti pojavljivanja različitih karaktera u fajlu,
koga analiziramo (a posle (de)kompresujemo). Ako da se šeta-
mo kroz stablo dobijamo skraćeni kod za svaki od karaktera.
Ako se iz roditeljskog stabla "skreće" u "levog" potomka,
sledeći bit za reprezentaciju nekog karaktera će biti "1",
a ako se "skreće" u desnog sledeći bit je "0".
(ovo "1" i "0", naravno, nije dogma (; )
pascal.212paki,
> skora, "asm" sigurno ne koristiš. Mada će ti to biti dobra vežba za
> vežbanje "asm"-a i koncentrisanja na "sitnice" tipa PUSH&POP, štednja
> Code Segmenti (korišćenjem manje globalnih promenljivih)...
Dobra ideja, ali ne verujem da ću je upotrebiti, bar ne u skorije
vreme (već mi je dovoljno mučenje ovaj Windows ;). Možda kad se
malo uhodam, pa kad dođe red i na optimizaciju programa... Thanx.
pascal.213sbrk,
Dal' ima neko sve primere iz knjige TP6 - Kompletan vodič od O'Briena (Mikro
Knjiga) na disketi? Knjigu sam kupio od Mikro Knjige odavno, a sada nemaju
source na disketi.
pascal.214ndragan,
/ ti nešto wadikalnije za pascal -
Predložio bih da se dvostvuko v piše kao w, a jednostvuko kao v, ne zato
što tako tveba, nego da možemo da napišemo dvostvuko gde zaista jeste
tako, naprimer u reči 'watiti' (vvatiti) i slično.
pascal.215drpr,
Haj,
za sve one koji ne znaju c a želeli su da vide kako radi
fejdovanje boja na ekranu u text režimu imaju fajl prikačen uz
poruku. Fajl je u originalu napisao user Klisa a ja sam ga
preveo i ostavio komentare tako da sad i vi možete da vidite
kako se menjaju nijanse u paleti boja i da se sa tim poigravate
:))
cope
fade.zippascal.216asterix,
Jedno skoro teorijsko pitanje :)
U jednom trenutku u toku programa, poziva se rekurzivna funkcija
koja može praktično da ide u dubinu rekurzivnosti dokle god veličina
stack-a dozvoljava. Prekid rekurzivnosti se dešava proverom uslova
koji je vezan za lokalnu promenljivu procedure koja zove rekurzivnu
funkciju.
Pitanje :
Da li je sa stanovišta izvršavanja i racionalnog korišćenja stack-a
bolje taj parametar prenositi iz jednog stepena rekurzije u drugi
kao argument funckije (čime bi se možda dobilo na brzini izvršavanja)
ili je bolje jednostavno koristiti taj parametar kad god je potrebno
njegovim dohvatanjem tamo gde se nalazi (što bi svakako uzrokovalo
koliko ja shvatam skakutanje po memoriji tamo-vamo ;) obzirom da bi
on za rekurzivnu funkciju bio vidljiv, odnosno dostupan po oblasti
važenja ?
pascal.217.bale.,
> Da li je sa stanovišta izvršavanja i racionalnog korišćenja stack-a
> bolje taj parametar prenositi iz jednog stepena rekurzije u drugi
> kao argument funckije (čime bi se možda dobilo na brzini izvršavanja)
> ili je bolje jednostavno koristiti taj parametar kad god je potrebno
> njegovim dohvatanjem tamo gde se nalazi (što bi svakako uzrokovalo
> koliko ja shvatam skakutanje po memoriji tamo-vamo ;) obzirom da bi
> on za rekurzivnu funkciju bio vidljiv, odnosno dostupan po oblasti
> važenja ?
Svaka funkcija sa sobom vuče tzv. pristupnu listu, pokazivače na
nelokalne promenljive. Ako tu promenljivu prenosiš kao argument
rekurzivne funkcije, povećaćeš kôd za pripremu argumenata funkcije, a
i više potrošiti prostora na steku, što znači usporenje. U drugom
slučaju, funkcija nasleđuje pristupnu listu od procedure koja je
statički obuhvata, tj. jedan isti pokazivač na tu promenljivu za bilo
koju dubinu rekurzije. Dakle, ako ne buncam u 4:39 ujutro, bolje bi
bilo da tu promenljivu dohvataš kao nelokalnu.
pascal.218vvelisavljev,
žemu služe ovi kompajler prekidači u TP7 ?
$P: Open String Parameters Switch
$T: Type-Checked Pointers Switch
Ono što piše u helpu mi nije baš najjasnije. :(
pascal.219vvelisavljev,
Funkcija function Pos(Substr: String; S: String): Byte;
je imala u ranijim verzijama Tubo Pascala jedan bag koji je bio veoma
koristan. Ako je Substr = '' funkcija je, u ranijim verzijama, vraćala 1
što je bilo veoma zgodno kod raznih pretraživanja. U Turbo Pascalu 7.0
ova funkcija vraća 0 ako je Substr='' tako da moj program više ne radi
onako kako je radio sa TP 6.0 :((
Ima li neko elegantnije rešenje od "rešenja" da napravim svoju
funkciju POS?
pascal.220eagle,
> Funkcija function Pos(Substr: String; S: String): Byte;
> je imala u ranijim verzijama Tubo Pascala jedan bag koji je bio
> veoma koristan. Ako je Substr = '' funkcija je, u ranijim
> verzijama, vraćala 1 što je bilo veoma zgodno kod raznih
> Ima li neko elegantnije rešenje od "rešenja" da napravim svoju
> funkciju POS?
Napišeš funkciju MyPos:
function mypos(s1,s2:string):byte;
begin
if s1='' then mypos:=1
else mypos:=pos(s1,s2);
end;
I zameniš svako pos u tvom programu sa mypos...
Zar postoji nešto elegantnije? :)
pascal.221.bale.,
Hm, sada nije 5 ujutro, a kad sam video šta sam napisao, reko' bolje
da ponovim, malo jasnije :) Ono što sam napisao za prenošenje te
promenljive kao parametra, stoji. A kad iz neke funkcije koristiš
nelokalnu promenljivu, koja je definisana u nekoj funkciji/proceduri
koja ovu pomenutu statički obuhvata, posao povezivanja se obavlja pri
samom prevođenju. Naime, nije potrebno da podatke o toj promenljivoj
stavljaš na stek, već su sve informacije u samom kodu, a to su: broj
"skokova" po pristupnoj listi, od *statičke* dubine ugnježdenja
pomenute rekurzivne funkcije (dakle, prirodan broj) do *statičke*
dubine ugnježdenja funkcije/procedure u kojoj je pomenuta promenljiva
definisana (isto prirodan broj); i ofset unutar prostora na steku u
kome su smeštene lokalne promenljive funkcije/procedure u kojoj je
pomenuta promenljiva definisana (kako drugačije da objasnim, ako ne
kucam ove kobasice? ;-) Dakle, kompajler obraćanje toj nelokalnoj
promenljivoj prevodi kao niz skokova (ali nezavisan od dubine
rekurzije) preko pokazivača i na kraju jedno indeksno adresiranje.
Dakle, za slučaj paskala, u kome je opseg važenja statički, to tako
izgleda, otprilike. Na steku se nalaze, u tzv. aktivacionom zapisu,
samo lokalne promenljive _aktivacije_ funkcije/procudure, njeni
argumenti i mesto za rezultat, malo prostora za rad, a za vraćanje
kontrole pozivajućoj funkciji/proceduri se koristi ista pristupna
lista koja se koristi za nelokalne promenljive. Ovo poslednje je isto u
aktivacionom zapisu, mada postoje poboljšanja za pristup nelokalnim
promenljivama (objasniću ako te interesuje), tako da je, u svakom
slučaju, bolje da tu promenljivu dohvataš sa strane.
pascal.222.bale.,
> $T: Type-Checked Pointers Switch
Ovo je valjda za proveru tipova podataka na koje pokazuju
pokazivači, pri dodelama, poređenju i sl.
pascal.223janko,
> lista koja se koristi za nelokalne promenljive. Ovo
> poslednje je isto u aktivacionom zapisu, mada postoje
> poboljšanja za pristup nelokalnim promenljivama (objasniću
> ako te interesuje), tako da je, u svakom slučaju, bolje da
> tu promenljivu dohvataš sa strane.
Mož' da bidne, al' ne mora da znači. Kompajleri su prilično
pametni, pa umeju da prepoznaju da li funkcija pristupa
nelokalnim promenljivama, pa ako uopšte ne pristupa, fino,
unutar aktivacionog zapisa uopšte ne ubacuju pristupnu vezu do
više funkcije, niti generišu kod koji to treba da obezbedi. U
tom slučaju, i ako je kritična promenljiva jednake veličine kao
pointer, ne može se primetiti ni promena u potrošnji memorije
na steku, a, čak, u zavisnosti od implementacije, može da se
dobije u brzini. žesto je višestruko pristupanje nelokalnoj
promeljivoj operacija koja troši više računarskog vremena od
jednog kopiranja i, posle, pristupa lokalnoj promenljivoj. To
zavisi od implementacije, kvaliteta optimizacije koda same
funkcije, i, naravno, procesora (na 80x86 su neke optimizacije
nemoguće zbog premalog broja registara).
Odgovor je, dakle: Zavisi od toga šta radiš. Ako je
potencijalna nelokalna promenljiva jedna jedina takva u
funkciji, i ako nije velika, onda je isplativo i da se prenosi
kao parametar funkcije. Ako je funkcija takva da treba da menja
nelokalnu promenljivu, onda, potencijalna nelokalna mora da
bude nelokalna. Ako je potencijalna nelokalna takva, da će
kopiranja potrošiti više vremena nego rad sa njom (oko ovoga
se, u praksi, ne vredi zamajavati), ili, da će se previše
angažovati prokleto mali stek na 80x86 procesorima, (vrlo bitno
ograničenje, na to treba paziti uvek) i onda je preporučljivo
da nelokalna ostane nelokalna.
pascal.224fole,
Da li se neko bavi Paradox Engine-om za TP (BP)?
pascal.225.bale.,
Al' ga razradi! :)
pascal.226asterix,
> promenljivama (objasniću ako te interesuje), tako da je, u svakom
Interesuje me :)
pascal.227predragd,
> Da li se neko bavi Paradox Engine-om za TP (BP)?
Bavim se.
Peđa.
pascal.228.bale.,
>> promenljivama (objasniću ako te interesuje), tako da je, u svakom
>
> Interesuje me :)
OK, daklem. Da prvo kažem da sam napravio greščicu kada sam (ako se
dobro sećam) napisao da se u paskalu (u standardnoj implementaciji)
poklapaju kontrolna veza i pristupna veza nelokalnim promenljivama.
To važi u jezicima sa dinamičkim opsegom važenja (na primer, lisp), u
paskalu ne.
Najbolje da dâm primer, ne vredi da pišem onolike kobasice.
Na primer, dat je program sledeće strukture:
A
def: a, x
B
...
endB
C
def: x
D
...
x, a
...
endD
E
...
a, v
D
...
endE
endC
endA
Kada se pristup nelokalnim promenljivama vrši preko pristupnih veza,
pri prevođenju se može saznati, na primer, da će se u funkciji E pod
imenom "a" podrazumevati promenljiva "a" definisana u A, dva nivoa
iznad (jedan skok preko pristupnih veza, tj. jednostruke liste
pokazivača, jer prvi u listi pokazuje na jedan statički nivo iznad),
sa tim-i-tim ofsetom. Ukoliko se unutar E poziva funkcija D, to će se
prevoditi tako da se izračuna broj potrebnih skokova niz pristupne
veze (broj skokova = nivo E - nivo D + 1 = 1), pa se generiše kôd
koji se "spusti" taj broj puta niz pristupne veze i tamo gde se
zaustavi, to je aktivacioni zapis na koji će pokazivati pristupna
veza u aktivacionom zapisu funkcije D (tačnije, pokazivaće na sledeći
pokazivač u listi, a koji se nalazi u tom aktivacionom zapisu), a u
kodu za D je već definisan pristup nelokalnim promenljivama, kao u
opisanom slučaju (E, a). Ukoliko se šalju funkcije kao parametri, i
njihove pristupne veze moraju da se šalju.
Drugi način je pomoću tzv. displeja. Displej predstavlja niz
pokazivača na najsvežije aktivacione zapise na pojedinim statičkim
nivoima ugnježdavanja. Na primer, ako je E na nivou 3, displej[1]
i displej[2] će pokazivati na poslednje aktivacije funkcija na
nivoima 1 i 2, redom, a koje statički obuhvataju E (ne može a da
ne obuhvataju).
Algoritam ažuriranja sadržaja displeja je sledeći:
Kada se aktivira funkcija na statičkom nivou ugnježdavanja "i",
radi se sledeće:
1) Sačuva se stara vrednost displej[i] u aktivacionom zapisu,
2) U displej[i] se smešta adresa novog (najsvežijeg) aktivacionog
zapisa.
Pri povratku se sačuvana vrednost vraća u displej[i].
To je to, valjda nisam negde pobrljavio :)
pascal.229kenza,
Hi!
Zna li neko kako da odredim gde mi pocinje heap?
Treba mi u stvari da odredim da li mi pokazivac pokazuje na heap.
Program mi javlja run time error 204-invalid pointer operation,
help kaze da je to zato sto radim dispose od nil-a ili sto ide dispose
pokazivaca koji ne pokazuje na heap.prvo nije , kako da saznam da li pokazivac
pokazuje na heap?
Hvala & cu
pascal.230eagle,
> Zna li neko kako da odredim gde mi pocinje heap?
> Treba mi u stvari da odredim da li mi pokazivac pokazuje na
> heap. Program mi javlja run time error 204-invalid pointer
> operation, help kaze da je to zato sto radim dispose od nil-a
> ili sto ide dispose pokazivaca koji ne pokazuje na heap.prvo
> nije , kako da saznam da li pokazivac pokazuje na heap?
Uđeš u editor , ukucaš "heap" , pritisneš Ctrl-F1 i eto... ;)
Dakle, imaš promenljive:
Heaporg - pointer na početak heap-a
Heapend - pointer na kraj heap-a
Heapptr - pointer na vrh heap-a
Gore pomenuta poruka se javlja kada pointer ne pokazuje na
lokaciju između početka i vrha heap-a, što se lako utvrđuje:
if seg(pž)*16 + ofs(pž) in
Šseg(heaporgž)*16 + ofs(heaporgž) .. seg(heapptrž)*16 + ofs(heapptrž)Ć
then Jeste;
Btw, zašto ti ovo treba? :)
pascal.231valhala,
>###### I sta je IRQ? (znam da je interrupt request number, al
>###### sta znaci)
pascal.232kenza,
(;> if seg(pC)*16 + ofs(pC) in
(;> Sseg(heaporgC)*16 + ofs(heaporgC) .. seg(heapptrC)*16 +
(;> ofs(heapptrC)C then Jeste;
....................
(;> Btw, zasto ti ovo treba? :)
Pisem neki program koji koristi TOT
(TechnoJock'sObjectToolkit) za menije , maske i uopste
user-interface.I onda se javlja error 204 kada dva puta za
redom pozovem istu masku za unos?! Ako pozovem tu masku samo
jednom , sve je o.k., isto je sve u redu ako pozovem neki
drugi deo tot-a izmedju 2 poziva "problematicne" maske.
Hvala ti puno ;)
pascal.233peca.st,
!-> Pisem neki program koji koristi TOT
Ma TOT je i inače prilično bagovit,
pogotovu po pitanju hot-keya. Bez veze što su
uradili tako puno dobrih stvari, ali dosta površno
i izgleda bez testiranja.
Peđa.
pascal.234niklaus,
(:> Pisem neki program koji koristi TOT
(:> (TechnoJock'sObjectToolkit) za menije , maske i uopste
(:> user-interface.I onda se javlja error 204 kada dva puta za
(:> redom pozovem istu masku za unos?! Ako pozovem tu masku samo
(:> jednom , sve je o.k., isto je sve u redu ako pozovem neki
(:> drugi deo tot-a izmedju 2 poziva "problematicne" maske.
Ako ti eagle ništa ne kaže, ja kažem sledeće:
"Probaj sa dummy procedurom, onaj fazon begin end;"
Ajd' probaj, lako je...
(:niklaus:)
pascal.235drpr,
Danas sam nešto muljao oko pascala i naiđoh u O'Brien-ovom
vodiču na funkciju PORT ali nigde ne nađoh da li je ona zamena
za IN/OUT u asembleru ili šta je? U On line helpu pascala ne
piše ništa o ovoj fj-i a TP je kompajlira bez problema pa ide
pitanje zna li neko o ovome ponešto?
cope
pascal.236bole,
Hi ljudi, evo ja napisah jedan prg. A to je Modul Player zvani BOMP (BOlex
Modul Player)
bomp.arjpascal.237eagle,
> Danas sam nešto muljao oko pascala i naiđoh u O'Brien-ovom
> vodiču na funkciju PORT ali nigde ne nađoh da li je ona zamena
> za IN/OUT u asembleru ili šta je? U On line helpu pascala ne
> piše ništa o ovoj fj-i a TP je kompajlira bez problema pa ide
> pitanje zna li neko o ovome ponešto?
To ti se ovako radi: Napišeš jednostavan programčić tipa
begin
portŠ1Ć:=portŠ2Ć;
end.
prevedeš ga, i pogledaš .exe nekim disassemblerom (ili debugom).
Parče koda za ovaj red programa izgleda ovako:
IN AL,02
OUT 01,AL
Btw, TP kompajler tretira port kao niz, ne kao funkciju.
Dakle:
y:=portŠxĆ je zamena za IN
portŠxĆ:=y je zamena za OUT
pascal.238dejanr,
>> Danas sam nešto muljao oko pascala i naiđoh u O'Brien-ovom
>> vodiču na funkciju PORT ali nigde ne nađoh da li je ona zamena
>> za IN/OUT u asembleru ili šta je?
Jeste. Umesto što bi rekao iz asemblera OUT 12, 123, kažeš port[12]:=123
Isto tako i za IN, samo što fiktivni niz port[] stoji sa desne strane :=
pascal.239kenza,
(;> Ma TOT je i inace prilicno bagovit,
(;> pogotovu po pitanju hot-keya. Bez veze sto su
Hot Keyove (;) sam izbacio, a bug po bug ispravljam...
Beyond 2000 ce da bude o.k. ;)
pascal.240kenza,
(;> Ako ti eagle nista ne kaze, ja kazem sledece:
(;> "Probaj sa dummy procedurom, onaj fazon begin end;"
Ona f-ja koju mi je Eagle ostavio izgleda da je resila stvar.
Dummy sam vec ranije probao, i nije vredelo ;)
pascal.241a.kircanski,
_-=> Hi ljudi, evo ja napisah jedan prg. A to je Modul Player
_-=> zvani BOMP (BOlex Modul Player)
Axa, a koji unit si koristio? Nemoj samo da kažeš da si
sam napisao algoritam za mod datoteke ;-)
sale.
pascal.242ognjen,
Evo, i ja poceh da malo ucim PASCAL, ali mi nesto nikako ne ide
u glavu (valjda od posledica BASICa ;) :
WHILE A<=3 DO itd.
!!!!
Dok je A manje ili jednako 3 radi to i to i to...
(ovo je ok, ne razumem ovo sto sledi: )
FLAG:=TRUE
WHILE FLAG DO blabla
!!!!
Ovo ne kapiram! Zar ne bi trebalo da stoji
WHILE FLAG:=TRUE DO blabla??? Dakle, dok je flag Ok,
radi blabla, a, kad se flag promeni pici dalje, zar ne?
Ali, po datom primeru, reklo bi se, NE! Gornja petlja
bi onda bila DOK_JE_FLEG_RADI_blabla?!? Dok je flag, STA?
Dok je flag TRUE ili FALSE ili STA???? HELP!
pascal.243bulaja,
│FLAG:=TRUE
│WHILE FLAG DO blabla
│!!!!
│Ovo ne kapiram! Zar ne bi trebalo da stoji WHILE FLAG:=TRUE DO blabla???
│Dakle, dok je flag Ok, radi blabla, a, kad se flag promeni pici dalje,
│zar ne? Ali, po datom primeru, reklo bi se, NE! Gornja petlja bi onda
│bila DOK_JE_FLEG_RADI_blabla?!? Dok je flag, STA? Dok je flag TRUE ili
│FALSE ili STA???? HELP!
└───
WHILE petlju posmatraj kao while (<uslov>), gde je <uslov> logicki
izraz, sto znaci da njegove vrednosti moug biti true ili false. Potpuno
je svejedno da li je taj logicki izraz prost (npr. ispituje se stanje
samo jedne promenljive tipa Boolean kao u tvom slucaju) ili slozen (kao
sto je (a<=3) - vazan je rezultat logickog izraza. Konkretno, u tom tvom
primeru petlja ce se vrteti dokle god je vrednost izraza (flag) jednaka
true, sto prakticno znaci isto sto i
while (flag == true).
pascal.244peca.st,
!-> WHILE FLAG:=TRUE DO blabla??? Dakle, dok
!-> je flag Ok,
Prvo što moraš da naučiš je da razlikuješ naredbu dodele ( := )
i logičko jednako ( = )
Dakle, ovo što si napisao gore nikako ne bi moglo da stoji.
Moglo bi da stoji While flag = true do blabla ali nije potrebno
jer je "While flag = true" ekvivalentno sa "While flag",
a "While flag = false" ekvivalentno sa "While not flag".
Ako ti je lakše, slobodno možeš da piše tako, potpuno je svejedno.
Ali, ne zaboravi, a := b NIJE ISTO ŠTO I a = b
Peđa.
pascal.245peca.st,
!-> while (flag == true).
Hm, hm, neće biti "==" :) (to bi bilo za C)
Peđa.
pascal.246draganm,
*> Axa, a koji unit si koristio? Nemoj samo da kazes da si
*> sam napisao algoritam za mod datoteke ;-)
Nije unit nego OBJ, tacnije mod-obj :))
-=>Phantom Lord<=-/.CoRRoSioN.
pascal.247draganm,
*> Ovo ne kapiram! Zar ne bi trebalo da stoji
*> WHILE FLAG:=TRUE DO blabla??? Dakle, dok je flag Ok,
*> radi blabla, a, kad se flag promeni pici dalje, zar ne?
*> Ali, po datom primeru, reklo bi se, NE! Gornja petlja
*> bi onda bila DOK_JE_FLEG_RADI_blabla?!? Dok je flag, STA?
*> Dok je flag TRUE ili FALSE ili STA???? HELP!
Flag ti je promenjiva boolean tipa, on moze da ti zameni bilo koji
logicki izraz (npr. a>3) i u ovom primeru se ono sto je iza while izvrsava
dok je flag=TRUE, ako flag promeni vrednost u FALSE program izlazi iz WHILE
petlje.
-=>Phantom Lord<=-/.CoRRoSioN.
pascal.248predragd,
Zašto neke MS-DOS funkcije (IOCTL, čitanje/setovanje serijskog
broja diska) ne rade u protected modu (BP 7.0). Dok na primer
funkcija $41 - brisanje fajla, takođe u protected modu, radi
odlično. Sa druge strane sve te funkcije u real modu (takođe BP
7.0) rade potpuno ispravno.
Peđa.
pascal.249paki,
> WHILE FLAG DO blabla
> !!!!
> Ovo ne kapiram! Zar ne bi trebalo da stoji
> WHILE FLAG:=TRUE DO blabla??? Dakle, dok je flag Ok,
> radi blabla, a, kad se flag promeni pici dalje, zar ne?
> Ali, po datom primeru, reklo bi se, NE! Gornja petlja
> bi onda bila DOK_JE_FLEG_RADI_blabla?!? Dok je flag, STA?
> Dok je flag TRUE ili FALSE ili STA???? HELP!
Dok je fleg True. Evo i malog objašnjenja:
Recimo da se logička promenljiva (tj. flag) zove SunceSija.
Tada, ako napolju sija sunce, napišeš 'SunceSija:=True'.
Dalje u programu ti treba da vidiš da li sunce sija.
Ispitaćeš sa 'if SunceSija then...'.
Vrednost SunceSija je logički izraz koji može biti tačan ili
netačan. Isto tako si mogao da napišeš 'if 2>3 then...', i u ovom
slučaju je '2>3' logički izraz koji vraća vrednost False (jer 2
nije veće od 3).
Dakle, podrazumeva se da, ako napišeš 'while Flag', misliš na
'while Flag=True'. Takođe, umesto 'while Flag=False' možeš pisati
'while not Flag'. Npr. ako sunce ne sija, sigurno ti je
razumljivije ako napišeš 'if not SunceSija' nego 'if SunceSija=False'.
pascal.250magician,
=> !-> WHILE FLAG:=TRUE DO blabla??? Dakle, dok...
=>
=> Prvo što moraš da naučiš je da razlikuješ naredbu dodele ( := )
=> i logičko jednako ( = )
=> Dakle, ovo što si napisao gore nikako ne bi moglo da stoji.
Pascal nemam pojma, ali u C-u bi moglo da stoji i
while (FLAG = TRUE) // '=' čitaj kao ':='
Jeste da u ovom slučaju nema mnogo smisla, ali nije neispravno. Da
li je u Pascalu neispravno prvo dodeliti vrednost promenljivoj, pa
onda ispitivati njenu logičku vrednost?
pascal.251snemcev,
>> !-> while (flag == true).
>>
>> Hm, hm, neće biti "==" :) (to bi bilo za C)
I za Clipper! ;)))
pascal.252peca.st,
!-> Da li je u
!-> Pascalu neispravno prvo dodeliti vrednost
!-> promenljivoj, pa onda ispitivati njenu
!-> logičku vrednost?
Ma, u Pascalu ne možeš ko u Cu da u sred nekog izraza dodeljuješ
vrednosti. Dodeljivanje vrednosti mora (valjda) da se vrši u posebnoj
naredbi, posebnom redu.
Peđa.
pascal.253pedjak,
> WHILE FLAG DO blabla
> Ovo ne kapiram! Zar ne bi trebalo da stoji
> WHILE FLAG:=TRUE DO blabla??? Dakle, dok je flag Ok,
Nikako ne može da stoji while flag:=true ,može jedino while
flag=true ili skraćeno while flag.
pascal.254eagle,
> Kako da u Paskalu deklarišem static promenljivu?
> Znači, treba mi promenljiva koja će zadržavati svoju vrednost i
> kada izađem iz funkcije u kojoj je definisana. Jedino što mi
> pada na pamet su globalne promenljive.
Ovo sam danas sasvim slučajno otkrio, i to zato što mi je pravilo
probleme u jednom programu. Dakle, deklarišeš promenljivu sa const:
const promenljiva : tip = pocetna_vrednost;
Na primer:
procedure proba;
const i:byte=0;
begin
inc(i);
writeln(i);
end;
BEGIN
while true do proba;
END.
pascal.255dejanr,
>> const promenljiva : tip = pocetna_vrednost;
Dodao bih još jednu sitnicu - ako je "konstanta" string, onda *ne*
treba pisati: const ime: string = 'Pera' nego const ime: string[5] = 'Pera'.
Inače u .EXE fajlu (kada ga napravi) ostavi stringčinu od 256 nula bajtova,
što možda i ne smeta mnogo ali deluje malo glupo.
Naravno, ako će "konstanta" posle menjati vrednost, onda mora da se stavi
maksimalna moguća dužina, pa kolko nula mora, mora.
pascal.256v.nesic,
> ............................................................... Da
> li je u Pascalu neispravno prvo dodeliti vrednost promenljivoj, pa
> onda ispitivati njenu logičku vrednost?
U čemu je ovde poenta ?
pascal.257a.kircanski,
_-=> WHILE FLAG DO blabla
To ti je isto što i While flag = true do blablabla
_-=> WHILE FLAG:=TRUE DO blabla??? Dakle, dok je flag Ok,
------
Ne treba while flag:=true do, nego while flag=true do. := je dodeljivanje.
sale.
pascal.258magician,
=>> ............................................................... Da
=>> li je u Pascalu neispravno prvo dodeliti vrednost promenljivoj, pa
=>> onda ispitivati njenu logičku vrednost?
=>
=> U čemu je ovde poenta ?
žini mi se da sam lepo napisao, ali...
Obrati se na pažnji:
if( (KlaraMandic = Read(...)) != SlobodankaGruden)
Ovde se prvo promenljivoj Klara dodeljuje neka vrednost pa se tek
onda ispituje njena log. vrednost. Poentu izvuci sam...
pascal.259vitez.koja,
#=> neispravno. Da li je u Pascalu neispravno prvo dodeliti
#=> vrednost promenljivoj, pa onda ispitivati njenu logičku
#=> vrednost?
Kratko rečeno, jeste. Razlika je, zapravo, suštinska, i to u funkcionisanju
parsera za ova dva jezika i evaluiranju izraza. U Cu ce izraz evaluria s desna
na levo (naravno uzimajući u obzir prioritete operanda), čak sam stekao utisak
da se cela jedna naredba (između dva ';') može sa stanovišta Ca posmatrati kao
brojni izraz. Za paskal nisam siguran kako stvar izgleda, ali verovatno je
mnogo stroža i ograničavajuća.
Pitanje za one koji su se malo bavili samim jezikom, ne samo programiranjem u
njemu : zar vam se ne čini da je u Cu 'void' tip kršenje principa zarad lakšeg
korišćenja (programiranja) ? Naime, da nema ovog tipa (a pre ANSI standarda
nije ga ni bilo) bilo koji C programski izraz mogao bi se obrađivati kao
aritmetiči izraz, jer _svi_ članovi tog izraza ili imaju aritmetičke vrednosti
ili su operacije; rekao bih da su od takve koncepcije pošli i tvorci Ca.
pascal.260debelijencija,
Ovome je ovdi mesto! :)
!=?> programiranjem u njemu : zar vam se ne čini da je u Cu
!=?> 'void' tip kršenje principa zarad lakšeg korišćenja
!=?> (programiranja) ? Naime, da nema ovog tipa (a pre ANSI
!=?> standarda nije ga ni bilo) bilo koji C programski izraz
void tip je postojaoi pre ANSI standarda, u nekim implementacijama. K&R i
kažu da su to usvojili pošto su se lično, u radu uverili da je to korisna
stvar.
Uostalom, šta ti fali? :) Zar nije ovako bolje? (da ga ima, nego da ga nema)
!=?> mogao bi se obrađivati kao aritmetiči izraz, jer _svi_
!=?> članovi tog izraza ili imaju aritmetičke vrednosti ili su
!=?> operacije; rekao bih da su od takve koncepcije pošli i
!=?> tvorci Ca.
Pa, čekaj, ti ne možeš da deklarišeš promenljivu tipa void. Stoga ona i ne
može da se pojavi u izrazu. Dakle, svaki izraz možeš tako da posmatraš...
Možda i ne možeš, ali ondak ne zna koji je taj.
Iskreno rečeno, pojma nemam od kakve su koncepcije pošli tvorci Ca (tačnije
tvorac Ca, pošto je Kernighan samo pomagao u knjizi), ali nije loše ispalo,
zar ne? :)
pascal.261paki,
> Ovo sam danas sasvim slučajno otkrio, i to zato što mi je pravilo
> probleme u jednom programu. Dakle, deklarišeš promenljivu sa const:
>
> const promenljiva : tip = pocetna_vrednost;
Super :) Ja sam to video na par mesta, ali sam mislio da služi
samo da se promenljivoj dodeli početna vrednost :)
pascal.262bojanp,
>>> const promenljiva : tip = pocetna_vrednost;
>
> Dodao bih još jednu sitnicu - ako je "konstanta" string, onda *ne*
> treba pisati: const ime: string = 'Pera' nego const ime: string[5] =
> 'Pera'. Inače u .EXE fajlu (kada ga napravi) ostavi stringčinu od 256 nula
> bajtova, što možda i ne smeta mnogo ali deluje malo glupo.
Ako se želili minimalno memorijsko zauzeće onda je u gornjem primeru
ipak prihvatljivije napisati const ime : string[4] = 'Pera', jer
je dužina ovoga stringa 4 a ne 5. Kod Turbo Pascala se navodi
maksimalna dužina stringa i u nju ne treba uračunati byte u kome
se čuva trenutna dužina (za razliku od C gde treba alocirati jedan
byte više za nul karakter na kraju).
Pozdrav, Bojan
pascal.263v.nesic,
> => U čemu je ovde poenta ?
> žini mi se da sam lepo napisao, ali...
Pretpostavio sam da to misliš, ali mi je zvučalo skroz drugojačije.
pascal.264vitez.koja,
#=> može da se pojavi u izrazu. Dakle, svaki izraz možeš
#=> tako da posmatraš...
Ma ni blizu:
while(e++%=25 ? e : clrscr());
Zaista nemam pojma čemu bi ovaj izraz služio, ali da ne radi - ne radi.
pascal.265ognjen,
)-> Ne treba while flag:=true do, nego while flag=true do. := je
)-> dodeljivanje. sale.
Ok, nemoj mo zameriti, novi sam :)
pascal.266ognjen,
)-> Nikako ne može da stoji while flag:=true ,može jedino while
)-> flag=true ili skraćeno while flag.
Thanks, samo jos nesto. Da li je skraceno flag po difoltu =true
ili mu je true vrednost dodeljena u nekom od prethodnih redova?
pascal.267peca.st,
!-> Thanks, samo jos nesto. Da li je skraceno
!-> flag po difoltu =true ili mu je true
!-> vrednost dodeljena u nekom od prethodnih
!-> redova?
Uvek je true. Pakijev primer ti je najbolji i najlakše ćeš
shvatiti tako. "U duhu jezika" je da se piše "if flag", ili
"if not flag", a ne drugačije.
Peđa.
pascal.268broker,
> Dodao bih još jednu sitnicu - ako je "konstanta" string,
> onda *ne* treba pisati: const ime: string = 'Pera' nego
> const ime: stringŠ5Ć = 'Pera'. Inače u .EXE fajlu (kada ga
> napravi) ostavi stringčinu od 256 nula bajtova, što možda
> i ne smeta mnogo ali deluje malo glupo.
>
> Naravno, ako će "konstanta" posle menjati vrednost, onda
> mora da se stavi maksimalna moguća dužina, pa kolko nula
> mora, mora.
Da, ali je tada jednostavnije da se promenljiva deklariše na
uobičajeni način, pa da joj se vrednost dodeli na početku programa.
Tada će u exe-u da zauzima minimalan prostor, a neće biti
ograničenja da se dužina kasnije poveća.
broker
pascal.269broker,
> FLAG:=TRUE
> WHILE FLAG DO blabla
U ovakvom slučaju ja bih upotrebio repeat until petlju. U gornjem
slučaju očigledno je da se u petlju ulazi bar jednom, a tada je
repeat until petlja zgodnija.
broker
pascal.270broker,
> Pascal nemam pojma, ali u C-u bi moglo da stoji i
>
> while (FLAG = TRUE) // '=' čitaj kao ':='
C je u tome malo slobodan pa se pod TRUE uglavnom smatra ono sto
je različito od FALSE, a FALSE se obično smatra da je nula.
Obratiti pažnju na ono 'obično'. :) Negde se smatra da je FALSE ono
sto nije TRUE, a opet TRUE moze da se smatra da je 1... Sad ima
ono 'može'. :)
Zato ja i volim Paskal. Jeste da je tvrd, ali brate znaš na čemu
si.
broker
pascal.271eagle,
> Da, ali je tada jednostavnije da se promenljiva deklariše na
> uobičajeni način, pa da joj se vrednost dodeli na početku
> programa. Tada će u exe-u da zauzima minimalan prostor, a neće
> biti ograničenja da se dužina kasnije poveća.
Ali tada ne bismo imali STATIC promenljivu.
pascal.272pedjak,
> Thanks, samo jos nesto. Da li je skraceno flag po difoltu =true
> ili mu je true vrednost dodeljena u nekom od prethodnih redova?
Ne dodeljuje se flagu nikakva vrednost, nego se njegova vrednost
ispituje, znači
while flag do ...
je isto što i
while flag=true do ...
Ok?
pascal.273dejanr,
>> Da, ali je tada jednostavnije da se promenljiva deklariše na
>> uobičajeni način, pa da joj se vrednost dodeli na početku programa.
>> Tada će u exe-u da zauzima minimalan prostor, a neće biti
>> ograničenja da se dužina kasnije poveća.
Dosta diskutabilno, tj. decidiran odgovor bi zahtevao proučavanje
načina na koji turbo pascal generiše izvršni kod. Naime, ako kažem:
var p: string;
begin
p:='pera';
...
end.
biće u data segmentu alocirano 256 bajta za string p, ali još negde
mora da stoji tekst 'pera'. E sad, moglo bi se zamisliti (tako su i
radili neki od "poslednjih" bejzika na osmobitnim računarima) da se
p nanišani tako da pokazuje na string 'pera' u memoriji, pa tek ako
se nekada taj string promeni, da se alocira prostor na drugom mestu.
Međutim sumnjam da Turbo Pascal tako radi, verovatno je tekst 'pera'
negde u kod segmentu, a alocirani prostor je u data segmentu. Sve u
svemu, ako bih ovako dodelio puno dugačkih promenljivih, to bi dalo
relativno kratak EXE fajl, ali bi u trenutku izvršavanja em ceo taj
fajl stajao u memoriji, em bi stringovi bili još na jednom mestu, u
data segmentu. Dakle, trošila bi se memorija više nego što mora, tj.
u zbiru bi bilo manje prostora na heap-u.
Sa druge strane, ako stavim:
var p: string[5]:='Pera';
(može i string[4], kako neko reče, ali ja obično stavim bajt-dva više,
za svaki slučaj, naročito otkad me je jednom dimenzionisanje "u bajt"
koštalo 800 dem)
onda će se alocirati u data segmentu 5 (tj. 6 jer ima i dužina) bajta
za promenljivu, i odma tu piše početna vrednost. U zbiru, ušteda na
heap-u.
Osim svega toga, meni je nekako preglednije kada vidim dodeljenu vrednost
odmah, a ne moram da gledam "dole" u program.
pascal.274.obj,
> Međutim sumnjam da Turbo Pascal tako radi, verovatno je tekst 'pera'
> negde u kod segmentu, a alocirani prostor je u data segmentu.
U pravu si, ne postoji razlog da se promenljivoj naknadno dodeljuje
vrednost. Samo bi se dodatno trošila memorija u CODE segmentu, gde TP
smešta konstantne stringove. A osim toga, i nije pregledno. :)
Eventualno bi kao argument bio da je odgovarajući EXE kraći, ali...
PKLITE rules. ;)
pascal.275.obj,
> Samo bi se dodatno trošila memorija u CODE segmentu, gde TP
> smešta konstantne stringove.
Nisam, kao i obično, bio precizan: TP stringove iz CONST-a smešta u
DATA segment (zajedno sa "nulama":), a ("konstantne") stringove koje
koristi u toku izvršavanja programa (pri dodeljivanju, konkatenaciji
itd.) smešta u CODE segment.
pascal.276bole,
Jao!
Ovako:
Ocu da napravim neki prg. (recimo) koji ce da upisuje u fajl podatke bilo kakve
a da posle mogu da ih menjam. E to mora (koliko ja znam) da se radi sa
RECORDIMA e posto jos nisam svatio kako se sa njima radi, MOLIM VAS pomoZITE
Hvala unapred i unazad!
bolE
pascal.277dejanr,
>> E to mora (koliko ja znam) da se radi sa RECORDIMA e posto jos nisam
>> svatio kako se sa njima radi, MOLIM VAS pomoZITE
Možda da pročitaš umetak o Paskalu iz prošlih (septembarskih) "Računara",
tamo je to objašnjeno dosta detaljno?
Kratko rečeno, napraviš record, na primer
type telt = record
ime: string;
brtel: longint;
end;
onda definišeš promenljivu i fajl:
var tel: telt;
telf: file of telt;
u programu otvoriš fajl:
assing (telf, 'telefoni.dat');
reset (telf);
i onda kada hoćeš da promeniš deseti (broji se od nule) telefon kažeš:
seek (telf,10);
read (telf, tel);
tel.brtel:=123456;
seek (telf,10);
write (telf, tel);
i na kraju zatvoriš fajl
close (telf);
pascal.278peca.st,
!-> Ocu da napravim neki prg. (recimo) koji
!-> ce da upisuje u fajl podatke bilo kakve a
!-> da posle mogu da ih menjam. E to mora
!-> (koliko ja znam) da se radi sa RECORDIMA
!-> e posto jos nisam svatio kako se sa njima
!-> radi, MOLIM VAS pomoZITE
Ako hoćeš da menjaš podatke u fajlu, oni u opšte ne moraju
biti neki slog. Mogu biti bilo kog tipa.
Evo kako bi to izgledalo na uopštenom primeru:
f : file of bilokojitip;
bkt : bilokojitip;
... (ovde ide ono assign, reset, pa šetanje po fajlu, bilo šta...)
read (f, bkt);
.... (promena sadržaja promenljive "bkt")
seek (f, filepos (f) - 1); (da se vrati tamo gde je malopre pročitao)
write (f, bkt);
...
Eto, ako još uvek nije jasno, pitaj.
Peđa.
pascal.279nikac,
Jedno pitanje za poznavaoce TVISION-a.
Kako da saznam ime trenutno aktivnog prozora u Editoru?
pascal.280niklaus,
(:> C je u tome malo slobodan pa se pod TRUE uglavnom smatra ono
(:> sto je različito od FALSE, a FALSE se obično smatra da je
(:> nula.
(:> Zato ja i volim Paskal. Jeste da je tvrd, ali brate znaš na
(:> čemu
Što jes' - jes!
Poznata mi je (kao mnogima) definicija (aksiom?) FALSE je 0,
a TRUE ponekad -1 (ovako beše u BASIC-u), nekad 1, nekad x!=0 (u C-u).
I pored toga sam x puta morao da pogledam u onaj TurboC-ov Help, za
naredbu _if_ - koji blok naredbi se izvršava za rezultat "zero", ili
"nonzero".
(:niklaus:)
pascal.281vvelisavljev,
Kako rešavate štampanje iz TPa? Mene onaj standardni printer
unit baš i ne zadovoljava. Nema kontrole da li je štampač uključen i
sl. Da li postoji neki unit ovde na sezamu koji rešava stvar.
Da li taj unit ima nešto više od jednog Assign(lst, prn)?
Za neka duža štampanja koistim dos print. (napunim tekst fajl i onda
pozovem print tekst.txt) Da li mogu nekako da u svom programu dobijem
informacije o tome da li je određena datoteka odštampana, da li je
uključen štampač i sl. a da ne koristim trik "print > trt.txt".
pascal.282dejanr,
>> Kako rešavate štampanje iz TPa?
U prošlomesečnim (septembarskim) "Računarima", u okviru umetka, diskutovano
je i o štampanju iz paskala. Varijanta sa Assign(lst, prn), bilo preko
printer unita ili direktno, ne zadovoljava ni za šta što nije tekst -
pojedini karakteri (a naročio chr(26)) se kod takve štampe gube. Tamo je
data procedura koja sprečava taj gubitak znakova (dos_rowmode), uz nju
se može relativno pristojno štampati iz paskala.
Jedno nešto drugačije rešenje (koje, inače, i ja koristim) dato je u
"Računarima 85", u okviru umetka o laserskim štampačima. Isto, naravno,
funkcioniše i na matričnom printeru. Ideja je da se sa štampačem komunicira
preko BIOS-a, tamo imaš proceduru kojom se testira da li je štampač spreman,
šalje znak itd.
Primere iz jednog i drugog umetka imaš i u direktorijumu RSOFT:
R094PAS.ZIP odnosno R055LAS.ZIP.
pascal.283fole,
> Jedno pitanje za poznavaoce TVISION-a.
> Kako da saznam ime trenutno aktivnog prozora u Editoru?
Pročitaj naziv prozora :)
Evo ja sam nešto izmajmunisao. Radi, ali rešenje je prilično neelegantno.
Uz poruku je zakačen modifikovan TVEDIT.PAS iz TP 6.0. Izmene su ozna-
čene sa (***********). Voleo bi kad bi neko uradio to jednostavnije
(čitaj: elegantnije).
ed.zippascal.284predragd,
> Jedno pitanje za poznavaoce TVISION-a.
> Kako da saznam ime trenutno aktivnog prozora u Editoru?
Funkcijom GetTitle (MaxSize: Integer) iz TEditWindow objekta.
MaxSize predstavlja maksimalnu dužinu imena prozora. Iako koliko
sam ja uspeo da zakljucim iz fajla EDITORS.PAS MaxSize ne igra
nikakvu ulogu.
Peđa.
pascal.285eagle,
> Evo ja sam nešto izmajmunisao. Radi, ali rešenje je prilično
> neelegantno. Uz poruku je zakačen modifikovan TVEDIT.PAS iz TP
Jednostavnije ne može, ali ovako ipak neće raditi baš u svim programima.
Može da se desi da aktivan pogled nije prozor. Doduše, u većini programa
se direktno u desktop ubacuje isključivo Pwindow ili njegovi potomci
(Pdialog, Peditwindow...) ali može neko da direktno iz Pviewa napravi
svoj pogled, na primer neki terminal, i u tom slučaju bi program otišao
na ko zna koju adresu, pošto je twindow.gettitle virtuelan.
Ja sam smislio jedan način kojim možeš da pristupaš svim poljima
bilo kog objekta iz desktopa. Na primer, treba mi dužina bafera iz
aktivnog editora. Pošto ne postoji način da saznam da li je aktivan
pogled editor ili npr. dijalog, umesto Teditwindow napravim svoju klasu
koja je nasleđuje, i u toj klasi redefinišem neki metod sa parametrima,
koji potiče iz Tview-a (zato što je desktop^.current^ tog tipa), na
primer handleevent, tako da za neku cm vrednost upisuje u neku globalnu
promenljivu polje bufsize iz svog objekta, a za druge vrednosti poziva
teditwindow.handleevent. Pomenuta dužina se saznaje na sledeći način:
duzina:=0; (* duzina je globalna promenljiva *)
event.command:=cmDajMiBafer;
desktop^.current^.handleevent(event);
U slučaju da je duzina ostala na istoj vrednosti, znači da aktivan
prozor nije editor, u svim ostalim slučajevima je sigurno pozvan
metod tMyeditwindow.handlevent koji radi duzina:=bufsize;
Dakle, ovako je moguće proveriti i tip aktivnog pogleda. Način je
potpuno legalan, radi uvek, a treba dopisati ne više od desetak redova.
Evo šiljem uz poruku ovako promenjen tvedit.pas , bitno je da vraća
title samo ako je u pitanju editor, što je i trebalo uraditi.
ed1.zippascal.286djelovic,
> Iako koliko sam ja uspeo da zakljucim iz fajla EDITORS.PAS MaxSize ne igra
> nikakvu ulogu.
Rekao bih da je to uvedeno čisto zbog kompatibilnosti sa TurboVisionom za
C++, koji je od C-a nasledio te nesrećne stringove.
pascal.287djanjusevic,
Evo jednog problema na pascalu:
Uz poruku ide i fajl sa source-om programa.Dati program bi trebao da
nacrta jedan svemirski brodic.U zavisnosti od ugla Alfa brodic bi trebao
da bude u sasvim drugom polozaju od pocetnog(tj. da sve koordinate budu
rotirane za ugao Alfa u odnosu na centar rotacije(xcor,ycor).
Pocetne koordinate svih tacaka nalaze se u fajlu podaci.dat,koji program
koristi.Sve koordinate su sigurno dobre,ali ja ne znam u cemu je problem.
HHHHEEEELLLPPP!!!!!!
Mansell
pascal.arjpascal.288ognjen,
Da li se pri ponovnom izvršavanju nekog programa u Pascalu stare
vrednosti promenjlivih ostaju iste izuzev ako nisu "resetovane" u
samom programu? Uf, ala sam ga zavukao... Dakle, da li se
prilikom rešavanja jednacine Z=1/2 * 2/3 *...* 99/100 dva puta
(dva puta se startuje program) dobija resenje 1/10000 umesto
1/100??? A, da, naravno, Z nije dobijalo nijednu određenu
vrednost, što znači da se jednačina ustvari rešavala _DVA_
puta...
pascal.289dejanr,
>> Da li se pri ponovnom izvršavanju nekog programa u Pascalu stare
>> vrednosti promenjlivih ostaju iste izuzev ako nisu "resetovane" u
>> samom programu?
Ne znam da li sam dobro razumeo - ako recimo imaš program TEST.EXE,
startuješ ga, on nešto mulja i završi, ili ga prekineš, pa onda ponovo
startuješ TEST, vrednosti promenljivih naravno neće biti sačuvane,
izuzev ako je sam program preduzeo neko njihovo snimanje u datoteku
itd.
pascal.290zdule,
Zna li neko kako da izmerim vreme pisanja neke reči ili rečenice
od pritiska prvog tastera do pritiskanja enter-a?
ZDule...
pascal.291ognjen,
)-> Ne znam da li sam dobro razumeo - ako recimo imaš program
)-> TEST.EXE, startuješ ga, on nešto mulja i završi, ili ga
)-> prekineš, pa onda ponovo startuješ TEST, vrednosti
)-> promenljivih naravno neće biti sačuvane, izuzev ako je sam
)-> program preduzeo neko njihovo snimanje u datoteku itd.
Da, to sam hteo da kažem... Ali vidi, kad sam startovao program:
-----------------------------------------------------------------
program Simple (input, output);
var z: real;
b,i: integer;
begin
b:=1;
i:=2;
z:=1/2;
repeat
begin
b:=b+1;
i:=i+1;
z:=z*(b/i);
end;
until b=100;
writeln (z);
writeln (1/10);
if z<1/10 then writeln ('Tacno!') else writeln ('Nije tacno!')
end.
-----------------------------------------------------------------
Koji bi, kao sto vidiš, trebao da izračuna vec pomenutu
jadnačinu, rešenje je bilo SVAKI PUT DRUGAžIJE (!?!) ! Kako je to
moguće? (Exponent se povećavao uvek za -2, što znači da se
dobijeni broj množio sa rešenjem jednačine 1/100, što znači da se
ista jednačina izračunavala više puta! (onoliko puta koliko sam
startovao program)).
pascal.292peca.st,
!-> Koji bi, kao sto vidiš, trebao da
!-> izračuna vec pomenutu jadnačinu,
!-> rešenje je bilo SVAKI PUT DRUGAžIJE (!?!)
Ako si ga startovao iz editora onda je moguće.
Ako ga kompajliraš na disk, pa startuješ ga kao exe
(ono što je dejan napisao) onda se to ne može (hvala Bogu)
desiti.
Peđa.
pascal.293a.kircanski,
_-=> Zna li neko kako da izmerim vreme pisanja neke reči ili
_-=> rečenice od pritiska prvog tastera do pritiskanja enter-a?
Lako:
Kad ovaj pritisne prvo slovo(sa npr. keypressed proveravaš),
onda uzmeš vreme sa gettime. (ne znam tačno sintaksu, ali
ima nešto kao gettime. onda, kad lupi enter, uzmeš gettime
u drugu varijablu, i onda lepo uzmeš delta(sati) i delta(minuti) B-)
poz, sale.
pascal.294zdule,
╠═══ Kad ovaj pritisne prvo slovo(sa npr. keypressed proveravaš),
Ma probao sam ja sa if keypressed then gettime() ali sam kao rezultat
dobio neke nebuloze od brojeva. :(((
ZDule...
pascal.295asterix,
Da li u MS FORTRAN-u 5.1 postoji ekvivalentna funkcija
koja vraća pritisnuti taster ? Odnoso da li se u FORTRAN-u
može napraviti sledeća struktura:
Program ... ;
uses crt;
Var c : char;
Begin
...
c:=Readkey <--- da li postoji ovakva konstrukcija u MSF5.1 ?
...
End.
Pozdrav Nenad :)
pascal.296maksa,
<><> Da li u MS FORTRAN-u 5.1 postoji ekvivalentna funkcija
<><> koja vraća pritisnuti taster ? Odnoso da li se u
<><> FORTRAN-u može napraviti sledeća struktura:
Ne znam je l' baš insistiraš na onome 5._1_ (u 5.0
definitivno ne postoji) a ako se ne pojavi neko ko
kaže da postoji, pomaže ti samo ovo:
Nađeš neku dobru dušu koja će ovo da ti izasemblira MASM-om:
(ja bih rado, al' nemam MASM)
PUBLIC GETCHR
GETCHR PROC FAR
PUSH BP
MOV AH, 08H
INT 21H
MOV BP, SP
LES BP, BP+6
XOR AH, AH
MOV ES:BX, AX
POP BP
RET 04H
GETCHR ENDPR
i ubažiš, to jest povežeš sa tvojim programom.
Koristilo bi se ovako nekako:
PROGRAM TASTPROBA
C--------------------------------- malo kozmetike :)
INTERFACE TO INTEGER*2 GETCHR(M)
INTEGER*2 M
END
C
INTEGER*2 N
WRITE(*,*) 'Pritisni nesto, sa Ctrl-C zavrsavas'
10 CONTINUE
CALL GETCHR (N)
WRITE(*,*) 'Nagazio si taster ',N,' '
GO TO 10
END
Znam, znam, strašno. :( Sve ovo da bi dobio kôd jednog
bezveznog tastera.
pascal.300andrejt,
Kako da otvorim fajl za upis/citanje u TSR-u.I, usput kako da proverim tastere
(sve sem onih koji mogu da se provere prekidom $16), takodje u TSR-u.
pascal.301ognjen,
)-> Ako si ga startovao iz editora onda je moguće.
)-> Ako ga kompajliraš na disk, pa startuješ ga kao exe
)-> (ono što je dejan napisao) onda se to ne može (hvala Bogu)
)-> desiti.
Kako da sredim da mi iz editora daje istu vrednost...?
pascal.302janko,
> Ma probao sam ja sa if keypressed then gettime() ali sam
> kao rezultat dobio neke nebuloze od brojeva. :(((
Najlakše je da napišeš svoju rutinu za input.
pascal.303a.kircanski,
Kako da pročitam sadržaj FAT-a? Ili da ga uništim.
Prilog u ASMu je dobrodošao, također :-)
poz, sale.
pascal.304bulaja,
│Kako da procitam sadrzaj FAT-a? Ili da ga unistim.
└───
Najbolje za strukturu FAT-a, Boot sektora i slicnih stvari pogledaj neki
od fajlova u INFO direktorijumu, npr. DosRef, HelpPC, TechRef i slicno.
Ukratko, FAT obicno pocinje na prvom logickom sektoru (pise u boot
sektoru gde tacno pocinje), citas ga funkcijama za absolut disk read (ne
znam koja je f() u TP za to, ali imas i INT 25h). Dakle najbolje
pogledaj opise strukture u tim INFO fajlovima, ako negde zapne pitaj :).
pascal.305bole,
>> Kad ovaj pritisne prvo slovo(sa npr. keypressed proveravas),
>> onda uzmes vreme sa gettime. (ne znam tacno sintaksu, ali
>> ima nesto kao gettime. onda, kad lupi enter, uzmes gettime
Prosto napravis 8 wordova i 4 (ili 3 zavisno od preciznosti koja ti treba)
integera pa das:
GetTime (Hour, Min, Sec, Sec100);
Pa posle
gettime (hour2, min2, sec2,sec1002)
pa das
integer1:=hour2-hour ....pa prebacujes do 60 je jedan pa....
pascal.306dr.grba,
Imam mladog druga, srednjoškolca, prilično zagrejanog za neke napredne
tehnike u programiranju. Već je prilično verziran u Turbo Pascalu, a ja
mu dođem nešto poput podstrekača, jer mu ponekad postavljam neke probleme
na razmišljanje. Iz svega toga - pre ili kasnije - treba da se izrodi i
korist, moja jer ću doći do nekog alatićA po narudžbi, a njegova jer će
nešto da nauči i to upotrebi u budućnosti...
Postavio sam mu problem u kome se još nije snašao: editovanje .EXE fajla,
pisanog u Pascalu ili čak u nepoznatom razvojnom okruženju. I to sve u dva
smera: sa jedne tačke kako pronaći neki deo koda i izmeniti mu neki if()
uslov, a sa druge strane kako postaviti nove default vrednosti "zamrzavanjem"
opcija datim na komandnoj liniji. Nešto, dakle, poput novih defaulta u
programu FDS, viđenom na Sezamu.
Stoga vas molim da ovde ili u mail na moje ime ostavite neku korisnu
referencu, savet ili primer. Zahvaljujem se unapred na pomoći bilo koje vrste.
pascal.307dejanr,
>> sa jedne tačke kako pronaći neki deo koda i izmeniti mu neki if()
>> uslov...
Ovo bi i mene zanimalo.
>> a sa druge strane kako postaviti nove default vrednosti
Nije poseban problem - pre neki dan baš to napravih u Prvoj Srpskoj
Elektronskoj Kihalici (IBMPC\FUN\KIHALICA.ZIP). Staviš neki karakterističan
string u program (npr. const default: string[12]:='TRALALA#$XXX'), onda
otvoriš EXE fajl kao i svaki drugi (imaš ime u PARAMSTR(0)), nađeš string
TRALALA#$$ i umesto XXX upišeš novu vrednost. Nije baš u duhu "čistog i
kulturnog" programiranja, ali radi posao :)
Mislim da je zzivotic pisao o ovome pre par meseci u "Računarima".
pascal.308peca.st,
!-> I to sve u dva
!-> smera: sa jedne tačke kako pronaći neki
!-> deo koda i izmeniti mu neki if() uslov,
Pa ovo ne verujem da se može uraditi bez disasemblera,
a to em što više nije pascal, em što više nije humano raditi
(u nekim malo dužim primerima).
Peđa.
pascal.309mjova,
> smera: sa jedne tačke kako pronaći neki deo koda i
> izmeniti mu neki if() uslov, a sa druge strane kako
> postaviti nove default vrednosti "zamrzavanjem"
sumnjam da ćeš išta uspeti da uradiš, naročito iz paskala. niko ne
garantuje šta će prevodilac napraviti od nekog if(), a tek kad se
umeša i exe loader stvar postaje zbrljanija ;).
ono što ja radim se svodi na običan run-time poke na pravu adresu. to
se u C-u lako izvodi, a što se tiče paskala nisam baš u toku.
pascal.310dr.grba,
>> string u program (npr. const default: stringŠ12Ć:='TRALALA#$XXX'),
>> onda otvoriš EXE fajl kao i svaki drugi (imaš ime u PARAMSTR(0)),
>> nađeš string
Hvala, pogledaću. Tj, preneću čoveku na razmatranje.
>> Mislim da je zzivotic pisao o ovome pre par meseci u "Računarima".
BTW, (nije mesto, ali... ) koliko bi trajalo da DL-jem ceo RIND?
I da li bi postojao neki valjan način dopune istog po ažuriranju
(upit po broju časopisa)?
Na kraju, odgovor u Sezam:razno ako nije teško (:
pascal.311niklaus,
(:> Elektronskoj Kihalici (IBMPCĐFUNĐKIHALICA.ZIP). Staviš neki
(:> karakterističan string u program (npr. const default:
(:> stringŠ12Ć:='TRALALA#$XXX'), onda otvoriš EXE fajl kao i
(:> svaki drugi (imaš ime u PARAMSTR(0)), nađeš string
I ne samo tako...
Moguće upisivati iza kraja fajla (pos := eof(f)+a) do mile volje...
(:niklaus:)
pascal.312dejanr,
>> Moguće upisivati iza kraja fajla (pos := eof(f)+a) do mile volje...
Hmmm... a šta kada se nešto od parametara menja, morao bi se se prvo
proveravati kraj fajla da nije već jednom dopisano. Inače bi fajl porastao
k'o da ga je napao neki loše pisan virus.
pascal.313niklaus,
(:> Moguće upisivati iza kraja fajla (pos := eof(f)+a) do mile volje...
ISPRAVKA: eof(f)+1
Šta mi bi?
(:niklaus:)
pascal.314snemcev,
>> Moguće upisivati iza kraja fajla (pos := eof(f)+a) do mile volje...
Meni se ovo nimalo ne sviđa. Šta ako (jeste da je mala verovatnoća, ali
ipak postoji) se fajl završava na samom kraju klastera? Ovako ćeš
prepisati podatke iz sledećeg i time uništiti ko zna šta.
pascal.315niklaus,
(:> Hmmm... a šta kada se nešto od parametara menja, morao bi se
(:> se prvo proveravati kraj fajla da nije već jednom dopisano.
(:> Inače bi fajl porastao k'o da ga je napao neki loše pisan
(:> virus.
Eeee, i za to ima leka...
Pre nego što se iskompajlira poslednja verzija EXE programa, ostavi
se mesta za konstantu koja označava dužinu fajla (za nas: od kog mesta smemo
da započnemo upisivanje parametara, koje želimo očuvati do sledeće upotrebe).
...zatim iskompajliramo, konstatujemo dužinu EXEa, u sorsu promenimo
vrednost dotične konstante na odgovarajuću vrednost, i eto veselja...
Naravno, sve ovo (sa konstantom) služi u korist nekog podprogramčića,
koji po želji upisuje na kraj fajla željene podatke...
Inače, da bi ustanovili da li je na kraj fajla već upisivano, postoji
nekih 3-4 načina, koji meni trenutno padaju na pamet, a i ti ćeš doći do par
njih očas posla...
Evo o'ma' jednog (zanimljivog?) predloga - promeniti redosled slova
'M' i 'Z' na početku fajla - EXE je i dalje "izvršljiv" ((:.
(:niklaus:)
pascal.316niklaus,
(:> ipak postoji) se fajl završava na samom kraju klastera? Ovako
(:> ćeš prepisati podatke iz sledećeg i time uništiti ko zna šta.
Otkud? Nije li ovo zapravo klasični "append".
Prilikom dopisivanja, u slučaju da je zadnji klaster dotičnog fajla
prebukiran, prelazi se na prvi sledeći, koji je po FATu slobodan, a ne prvi
sledeći iza klastera, koji je obeležen kao EOF (kraj fajla o kome sve vreme
govorimo).
(:niklaus:)
pascal.317vitez.koja,
#=> Moguće upisivati iza kraja fajla (pos := eof(f)+a) do
#=> mile volje...
Ne, nije. Ja probao, ne radi (tj. mogu da ti dam .exe fajl koji kad mu dodaš
4000 bajtova kaže "bad format", a kad mu dodaš još samo 13 potpuno zaglupi
računar).
pascal.318vitez.koja,
#=> Meni se ovo nimalo ne sviđa. Šta ako (jeste da je mala
#=> verovatnoća, ali ipak postoji) se fajl završava na samom
#=> kraju klastera? Ovako ćeš prepisati podatke iz sledećeg
#=> i time uništiti ko zna šta.
Nešto si se zbunio... da je tako, nikada ne bismo smeli da nastavljamo ni jedan
fajl.
pascal.319niklaus,
(:># => Moguće upisivati iza kraja fajla (pos := eof(f)+a) do
(:># => mile volje...
(:>
(:> Ne, nije. Ja probao, ne radi (tj. mogu da ti dam .exe fajl
(:> koji kad mu dodaš 4000 bajtova kaže "bad format", a kad mu
(:> dodaš još samo 13 potpuno zaglupi računar).
E, nije ni to.
Sve programe koje sam (za pare) radio imaju zaštitu, zasnovanu na
ovom sistemu... Nijedan ne puca (barem ne zbog "repa"). (;
Biće da si upisivao _preko_ zadnjeg karaktera u fajlu.
Pošalji izvorni kod, pa da vidimo...
(:niklaus:)
pascal.320snemcev,
>> Prilikom dopisivanja, u slučaju da je zadnji klaster dotičnog fajla
>> prebukiran, prelazi se na prvi sledeći, koji je po FATu slobodan, a
>> ne prvi sledeći iza klastera, koji je obeležen kao EOF (kraj fajla o
>> kome sve vreme govorimo).
Da, ali kad datoteku regularno otvoriš za WRITE, a meni se činilo da se
radi o "prljavim" metodama direktnog pisanja po disku. Jel ima neko
živaca i vremena da proba iz programa najobičnije seek na kraj, pa
write, al' kad je fajl dug tačno 4096 (ili neki sl. broj).
pascal.321niklaus,
(:> Da, ali kad datoteku regularno otvoriš za WRITE, a meni se
(:> činilo da se radi o "prljavim" metodama direktnog pisanja po
(:> disku.
Bez obzira da li fajl otvaraš za "append"-ovanje (upis _iza_ kraja
fajla) ili za (klasični) upis, ali iza zadnjeg karaktera u fajlu (dakle,
došetaš do EOF, pa šaraj), stvar radi apsolutno normalno. Da nije tako,
DOS (konkretno mislim na FAT organizaciju diska) ne bi bio ono što jeste
(nemojte reći baš "deep shit").
Inače, u pitanju nije nikakva "prljava" metoda.
Jedino što je ovde prljavo je štos o kome pričam - dozvoljeno je pisa-
ti ljubavnih pričica iza kraja "normalnog" fajla, a da se Vaša žena (ili vaša
devojka) ne naljuti. (;
(:niklaus:)
pascal.322snemcev,
>> Bez obzira da li fajl otvaraš za "append"-ovanje (upis _iza_ kraja
>> fajla) ili za (klasični) upis, ali iza zadnjeg karaktera u fajlu
>> (dakle, došetaš do EOF, pa šaraj), stvar radi apsolutno normalno.
>> Inače, u pitanju nije nikakva "prljava" metoda.
Da, ali šta se pri tome dešava sa dužinom fajla i to onim podatkom o
dužini koji je zapisan u direktorijumu? Ako se on promeni, bilo koji
antivirus program koji ima mogućnost praćenja promene izvršnih datoteka
će se pobuniti. Mislim da bi bilo mnogo bolje ovo izbeći.
pascal.323dejanr,
>> Da, ali šta se pri tome dešava sa dužinom fajla i to onim podatkom o
>> dužini koji je zapisan u direktorijumu?
Promeni se dužina, naravno. Sve to DOS sam sređuje, to je regularan način
za produženje fajla.
>> Ako se on promeni, bilo koji antivirus program koji ima mogućnost
>> praćenja promene izvršnih datoteka će se pobuniti. Mislim da bi
>> bilo mnogo bolje ovo izbeći.
Svaki antivirus program prati promenu dužine datoteka, i svakako će se
pobuniti. No, iole bolji antivirus program prati i promenu checksuma
datoteka, pa će se pobuniti i na bilo kakvu promenu bilo kog EXE fajla.
Pošto ovde diskutujemo baš o promenama u EXE fajlu, bojim se da se
takav sukob sa antivirus programima ne može izbeći.
Posle svega, i dalje ne vidim koji je argument u prilog upisu nekog statusa
na kraj (tj. iza kraja) programa u odnosu na upis negde u samom programu,
dakle u predviđeni prostor, bez promene dužine fajla. Moguća su oba metoda,
kao što smo videli, dakle imalo bi smisla prodiskutovati o tome koji je
pod kakvim okolnostima bolji.
pascal.324vitez.koja,
#=> (:> Ne, nije. Ja probao, ne radi (tj. mogu da ti dam
#=> .exe fajl (:> koji kad mu dodaš 4000 bajtova kaže "bad
#=> format", a kad mu (:> dodaš još samo 13 potpuno zaglupi
#=> računar).
#=>
#=> E, nije ni to.
#=> Sve programe koje sam (za pare) radio imaju zaštitu,
#=> zasnovanu na ovom sistemu... Nijedan ne puca (barem ne
#=> zbog "repa"). (; Biće da si upisivao _preko_ zadnjeg
#=> karaktera u fajlu.
Eh, "ni jedan ne puca". Nije događaj kad pas ujede čoveka, nego kad čovek ujede
psa.
Na žalost, ja ne mogu da argumentujem svoju tvrdnju, mogu samo još jednom da je
iznesem. Za dodavanje sam koristio dosov "copy /b", tako da poslednji karakter
u fajlu nije prepisan. U međuvremenu problem sam rešio tako što sam taj blok
ugradio u kod na "programski" način, a onih 13 dodatnih karaktera sam dodao bez
problema. Stari izvršni fajl, kao ni sors kod koga se problem manifestovao
(naravno) nemam, davno je zamenjen ovim novim.
pascal.326snemcev,
>> Svaki antivirus program prati promenu dužine datoteka, i svakako će
>> se pobuniti. No, iole bolji antivirus program prati i promenu
>> checksuma datoteka, pa će se pobuniti i na bilo kakvu promenu bilo
>> kog EXE fajla.
Apsolutno saglasan.
>> Pošto ovde diskutujemo baš o promenama u EXE fajlu, bojim se da se
>> takav sukob sa antivirus programima ne može izbeći.
Mislim da može. Šta ako ne otvoriš datoteku, već nađeš poslednji bajt
koji pripada datoteci u poslednjem klasteru iste, pa narediš pisanje po
sledećih 10 bajtova. Tada Dos ne menja podatak o dužini, a tako
zapisanim podacima se bez problema može pristupiti. Jeste da je ovo
direktno pisanje po disku, ali ko još ima rezidentan vshield? ;)
Btw, i to se može izbeći ako se zahteva da instalacija programa počne
boot-om sa diskete.
pascal.327niklaus,
(:> Posle svega, i dalje ne vidim koji je argument u prilog upisu
(:> nekog statusa na kraj (tj. iza kraja) programa u odnosu na
(:> upis negde u samom programu, dakle u predviđeni prostor, bez
(:> promene dužine fajla. Moguća su oba metoda, kao što smo
(:> videli, dakle imalo bi smisla prodiskutovati o tome koji je
(:> pod kakvim okolnostima bolji.
E, da!
Dakle, koliko sam (ne)upućen, od svih antivirus programa na domaćem
"tržištu" sa čeksumom i ostavljanjem odgovarajućih lista čeksumova za svaki
od ispitanih fajlova se bavi samo onaj Central Point-ov AntiVirus (CPAV).
Mi, tačnije velika većina nas, koristi McAfee-ove produkte (sken,klin),
kod kojih stvar (koliko ja znam - zna li tkogod detalje) ne funkcioniše na
opisani, po meni solidan, ali ne "ultimate" izbor.
Sa druge strane, dejane, upisivanje u fajl bez promene dužine dotičnog,
opet može upasti CPAVu (i sličnim) u oko, promeniti čeksum, i napraviti uzbunu.
Možda ovako -
UPUTSTVO za upoterebu našeg (bilo kojeg) programa:
"Potrebno je isključiti sve anit-virus programe, jer usporavaju rad
(našeg) programa!"
(:niklaus:)
pascal.328niklaus,
(:> Na žalost, ja ne mogu da argumentujem svoju tvrdnju, mogu
(:> samo još jednom da je iznesem. Za dodavanje sam koristio
(:> dosov "copy /b", tako da poslednji karakter u fajlu nije
(:> prepisan. U međuvremenu problem sam rešio tako što sam taj
(:> blok
Biće da DOSov "copy /b" ne čisti svu prljavštinu koji po prirodi
stvari za sobom ostavlja upis iza kraja EXEa.
Dakle, pošto je DOS misterija laicima, a nas programere ne oduše-
vljava taj poziv da jurcamo bagove po jedno OSu, preostaje nam da koristimo
naše Ce i Paskale i da se zlobno smešimo... <<;
(:niklaus:)
pascal.329jasicp,
Moze li neko na brzinu napisati koje su razlike izmedju Turbo
Pascala 6.0 i Turbo Pascala 7.0 ?
pascal.330vvelisavljev,
- 7.0 ima sintaksno farbanje programa, (ono ključne reči jednom
bojom, stringovi drugom, ...) :)
- 7.0 ima Turbo Vision 2.0 funkcije
- poneki nov svič za kompajliranje
- zauzima duplo više prostora na disku
- brzina kompajliranja je i dalje OK
- nema značajnih promena u brzini kompajliranja i u dužini koda
- što se tiče brzine koda ne znam :(
pascal.331eagle,
> - 7.0 ima Turbo Vision 2.0 funkcije
Po čemu se razlikuje od prve verzije (iz TP 6.0) ?
pascal.332vvelisavljev,
> Po čemu se razlikuje od prve verzije (iz TP 6.0) ?
Ne znam, još ne plivam u objektnim vodama. :) Da li može neko da
preporuči neku knjigu? Jel neko čitao onu elektrosnku knjigu TPRBOOK
sa Sezama?
pascal.333ndragan,
/ k'o da ga je napao neki loše pisan virus.
Za kijavicu ne bih rekao da ima takvog uzročnika. Drži se već koju
stotinu hiljada godina, preživljava sve promene OS, i redovno izbacuje
nove verzije, sve iste do istije.
Kihalica mi se sviđa, nego sam u jednoj poruci našao loš prevod prideva
sa muškog na ženski rod :)
pascal.334dzakic,
Dodaj tu i
- novie naredbe za kontrolu cikličnih struktura: break i
continue;
- null-terminated stringovi kao u C-u (pchar).
pascal.336andrejt,
Zbog malih problema postalo mi je potrebno da znam sl. stvari:
1. - Kako PKZIP pakuje sa sifrom
2. - Da li moze da se napravi program koji je skida
3. - Kako bi takav program izgledao
Pa, ako neko zna nesto od ovoga neka kaze i drugima.
pascal.337dragisha,
-> 1. - Kako PKZIP pakuje sa sifrom
Pogledaj appnote.txt koji stiže sa distribucionim .EXE.
-> 2. - Da li moze da se napravi program koji je skida
Vjerovatno. Onaj konkurs se tiho završio, možda je neko i uspio. Ja imam
sors tog šifrovanja, a i sam imam nekoliko .ZIP kojima sam zaboravio šifru.
Ako želiš da se bakćeš s time...
-> 3. - Kako bi takav program izgledao
Ehhh:)
Možda bi ličio na ono što je objavljeno u oct Računarima, pod uslovom da
posjeduješ neki od tih fajlova u original formi.
pascal.338bulaja,
**** new file ****
R:\IBMPC\BBS\*.*
----------------------
tridv300 zip 150608 TriDoor v3.00, kreiranje BBS door-ova u Turbo Pascal-u
Triumph Software's TriDoor v3.00
Create on-line doors quickly and easily in Borland Turbo Pascal 5.5, 6.0
and 7.0. Full communications support, easily adapted for use with any BBS
door support file, built-in support for PCBOARD.SYS and DORINFO1.DEF.
Many nice built-in features such as statusbar, chat-mode and complete user
time handling routines. This is the BEST software of it's kind available
on the market today!
pascal.339predragd,
> - 7.0 ima sintaksno farbanje programa, (ono ključne reči
> jednom bojom, stringovi drugom, ...) :)
Zaboravio si ono najvažnije, DPMI.
Peđa.
pascal.340predragd,
> Jel neko čitao onu elektrosnku knjigu TPRBOOK sa Sezama?
Moje mišljenje je da ova knjiga nije ništa posebno. Ono što
nije opisano u knjizi (o TV) koja stiže uz TP 6.0 nije ni ovde
opisano.
Peđa.
pascal.341jasicp,
> tridv300 zip 150608 TriDoor v3.00, kreiranje BBS door-ova u Turbo Pascal-u
Sta su to door-ovi na BBS-u ? Ne racunam ulazna vrata BIGZ-a, na primer.
pascal.342dejanr,
>> Sta su to door-ovi na BBS-u ?
Door je neka vrsta eksternog programa koji se poziva iz BBS softvera.
Procedura je obično sledeća - glavni BBS program se ukloni iz memorije,
startuje se door, on preuzme COM port, radi dok korisnik želi da radi
sa njim (ili dok mu ne istekne neka od kvota) i tada se door opet uklanja
iz memorije da bi osnovni BBS program nastavio sa opsluživanjem korisnika.
Većina door-ova radi sa svim važnijim BBS programima, a od posebnih uslova
često se zahteva instaliran fosil drajver. Imaš više door-ova u direktorijumu
BBS.
pascal.343jasicp,
> tridv300 zip 150608 TriDoor v3.00, kreiranje BBS door-ova u Turbo Pascal-u
Sta su to door-ovi na BBS-u ? Ne racunam ulazna vrata BIGZ-a, na primer.
pascal.344rvpuzovic,
Kako da na PC-jevom zvucniku "odsviram" fajl, koji sam uzorkovao AD
konvertorom (8-mo bitni).
pascal.345paki,
U programu, zavisno od vrednosti neke promenljive, treba da
pozovem određenu funkciju. Trenutno to izgleda otprilike ovako:
case Parametar of
CONST1:
...
t:=Funkc1;
...
CONST2:
...
t:=Funkc2;
...
i tako više puta (parče koda pre i posle 't:=...' je uvek isto).
Pošto mogućih vrednosti ima više od 50, nepraktično je sve to
raditi CASE naredbom. Palo mi je na pamet da koristim niz
funkcija, ali, iako pomaže, ne rešava u potpunosti problem - opet
moram da imam nešto tipa:
Funkc[CONST1]:=Funkc1;
Funkc[CONST2]:=Funkc2;
čeleo bih da potpuno eliminišem ovo, tj. da direktno pišem
Funkc[CONST1] (...) : word;
Funkc[CONST2] (...) : word;
Da li je nešto ovako moguće? Ako nije, kako bi se moglo
simulirati?
pascal.346eagle,
> U programu, zavisno od vrednosti neke promenljive, treba da
> pozovem određenu funkciju.
> FunkcŠCONST1Ć (...) : word;
> FunkcŠCONST2Ć (...) : word;
> Da li je nešto ovako moguće? Ako nije, kako bi se moglo
> simulirati?
Možeš da pamtiš u nekom nizu pokazivače na te funkcije.
Dakle, jednostavno napišeš tih pedesetak funkcija, dodaš im zbog
ovakvog pozivanja po jedno far iza zaglavlja, i njihove adrese smestiš
u taj niz. Evo, nekako sam uspeo da napišem jedan mali primer, članovi
niza su funkcije kvadrat i kub. Ako hoćeš funkcije sa različitim brojem
parametara, ne znam kako bi drugačije sem case naredbom.
function kvadrat(x:byte):byte; far;
begin
kvadrat:=x*x;
end;
function kub(x:byte):byte; far;
begin
kub:=x*x*x;
end;
const
pom:arrayŠ1..2Ć of pointer=(čkvadrat,čkub);
var
funkc:arrayŠ1..2Ć of function(x:byte):byte absolute pom;
begin
writeln( funkcŠ1Ć(3) );
writeln( funkcŠ2Ć(3) );
end.
pascal.347kriss,
Zanima me da li u .pas program mogu da se 'ulinkuju' biblioteke?
Naime, ako postoji dosta eksternih procedura, da li je moguće da
se sve 'spakuju' u jednu biblioteku koja će se kasnije
priključiti programu, znaši nešto tipa
š$L trtmrt.libć umesto
š$L blabla1.obj, blabla2.obj ... ć
Sorry na YUSCII-ju i nadam se da je neko shvatio o čemy se radi :)
pascal.348pedjak,
> Zanima me da li u .pas program mogu da se 'ulinkuju' biblioteke?
> Naime, ako postoji dosta eksternih procedura, da li je moguće da
> se sve 'spakuju' u jednu biblioteku koja će se kasnije
Ne može.
pascal.349niklaus,
(:>> Zanima me da li u .pas program mogu da se 'ulinkuju' biblioteke?
(:>> Naime, ako postoji dosta eksternih procedura, da li je moguće da
(:>> se sve 'spakuju' u jednu biblioteku koja će se kasnije
(:>
(:> Ne može.
Zašto ne, meni zvuči logično... Mada nemojte me držati za zna se šta,
jer stvarno nisam probao. Stvarno, kriss, šta ti fali da imaš $L liniju za
svaki od .OBJ fajlova.
Kratko uputstvo za krissa: COPY 1.OBJ+2.OBJ+..+n.OBJ SKUP.LIB
Sa druge strane, argument protiv (odn. da TP nije u stanju da prihvati
.LIB, kao zdudane .OBJ fajlove) bio mogao biti taj da TP nema "inteligentni"
(izem ti tak'u inteligenciju) linker.
(:niklaus:)
pascal.350kriss,
˙˙ Zašto ne, meni zvuči logično... Mada nemojte me držati za zna
˙˙ se šta, jer stvarno nisam probao. Stvarno, kriss, šta ti fali
˙˙ da imaš $L liniju za svaki od .OBJ fajlova.
Pa recimo estetika i tendencija ka gubljenju u slučaju neke
greške :) Dakle, stvar je u tome da imam nameru da u neki
veeeliki program ubacim mali milion asemblerskih rutinica koje
vrše posao brzo i zauzimaju malo memorije: recimo da želim da se
tu nalaze programčići za gašenje kursora, njegovu promenu od
veličine do oblika (polako, samo ideje :), zatim neke stvari sa
ekranom itd. Zamisli kakvo bi to zaglavlje bilo:
š$L nocursor,cursor1,cursor2,...,cursorn,scrsave,...ć
i to recimo u 7-8 redova! (dobro, za sada još ne ali ... :)))
˙˙ Kratko uputstvo za krissa: COPY 1.OBJ+2.OBJ+..+n.OBJ SKUP.LIB
Ma sve je to OK i sa jednim TLIB +1.obj +2.obj +... skup.lib što
mi je i bila zamisao u početku :) A i nekako mi deluje sigurnije,
nisam siguran da baš može da se napravi biblioteka sa jednim copy
:) No, možda još ne znam sve cake :)
˙˙ Sa druge strane, argument protiv (odn. da TP nije u stanju da
˙˙ prihvati .LIB, kao zdudane .OBJ fajlove) bio mogao biti taj da
˙˙ TP nema "inteligentni" (izem ti tak'u inteligenciju) linker.
E to baš i mene čudi ... ajd što ne može da pravi .OBJ-e, ali ni
da ulinkuje biblioteke?
pascal.351uobradovic,
Cao !Imam malo znanje iz pascala , nije da sam pocetnik,ali...
Koju mi knjigu preporucujete da kupim i gde,a iz koje se moze dosta nauciti
Pascal - ako ne i ceo.
Unapred hvala !
uobradovic :)
pascal.352djelovic,
> Cao !Imam malo znanje iz pascala , nije da sam pocetnik,ali...
> Koju mi knjigu preporucujete da kupim i gde,a iz koje se moze dosta nauciti
> Pascal - ako ne i ceo.
Preporučujetim ti neki od Dejranovih umetaka, od kojih jedan imaš u INFO
direktorijumu, a ostale (koji se bave *Turbo* Paskalom) potraži po ranijim
"Računarima". Mislim da će ti ovo biti po meri pošto nisi početnik.
pascal.353niklaus,
(:> E to baš i mene čudi ... ajd što ne može da pravi .OBJ-e, ali ni
(:> da ulinkuje biblioteke?
Nema ti druge... Probaj & referiši... (:
Probaj i Turbo Linker i COPY /B, pa ako ima razlika, obavezno reci,
da ne budem(o) u zabludi.
(:niklaus:)
pascal.354uobradovic,
Cujte !Uzeo sam vodic Pascala kao sto si rekao,ali necu to.Hocu cist Turbo
Pascal,bez prelaska sa bejzika ili nekog drugog programskog jezika.
Unapred hvala uobradovic :)
pascal.355vitez.koja,
#=> Hocu cist Turbo Pascal
Onda uzmi "Turbo Pascal 6: the complete reference". žini mi se da postoji i u
SH prevodu.
pascal.356vvelisavljev,
Primetio sam da u programima imam gomilu istih procedura koje
rade sa različitim tipovima podataka (procedure za unos). Da li
objektno programiranje omogućava da ja imam jednu proceduru za unos
koja će da obrađuje sve moje podatke. Bio bih jako zahvalan ako bi
neko ostavio neki primerčić (ako je moguće naravno).
pascal.357kriss,
˙˙ (:> E to baš i mene čudi ... ajd što ne može da pravi .OBJ-e,
˙˙ ali ni (:> da ulinkuje biblioteke?
˙˙
˙˙ Nema ti druge... Probaj & referiši... (:
˙˙ Probaj i Turbo Linker i COPY /B, pa ako ima razlika, obavezno
˙˙ reci, da ne budem(o) u zabludi.
Ok, probaću sve što mi padne napamet - da .lib preimenujem u
.obj, ba obj-e spojim sa copy /b pa da probam da ih promuvam u
TP, znači sve srpske metode ;)
žim budem imao i malo više vremena - eto izveštaja ovdi :)
pascal.358d.petrovic,
Ă> Onda uzmi "Turbo Pascal 6: the complete reference". žini mi se da
Ă> postoji i u SH prevodu.
a? di si to vid'o? koliko mu njemackih valuta to dodje?
pascal.359d.petrovic,
Rec je o RA 2.00
Zna li neko kako se koriste indeksi za RA 2.00?
Fajl USERS.BBS sadrzi sve podatke o korisniku, osim njega postoje i:
USERSIDX.BBS i
USERSXI.BBS
i imaju luuudo zabavnu strukturu ;))))
=====================================
USERSIDXrecord = record
NameCRC32,
HandleCRC32 : LongInt;
end;
USERSrecord = record
Name : MSGTOIDXrecord;
š ovo izostavljeno je valjda nebitno, ima gomila podataka ć
end;
USERSXIrecord = record
FreeSpace : ArrayŠ1..200Ć of Byte;
end;
=====================================
ocigledno je da su ova dva fajla indeksi, neznam cemu bi inace
sluzili ni kako bi inace indeksirao bazu korisnika.
Zar mu je taj CRC (ako je stvarno CRC ;)) ) koji koristi toiko
pouzdan (???!!!) da se ne moze desiti da pera mikic i mika peric
imaju isti broj?
pascal.360uobradovic,
Hi Deda mi ide za jedno desetak dana u Nemacku,koje casopise da mu trazim da
mi kupi.Podrazumaju se neki dobri.
Ako ima jos nesto korisno da se kupi recite mi,ali da nije previse skupo.
Pozdrav Uros :)
pascal.361marzi,
═> Cao !Imam malo znanje iz pascala , nije da sam pocetnik,ali...
═> Koju mi knjigu preporucujete da kupim i gde,a iz koje se moze dosta
═> nauciti Pascal - ako ne i ceo.
Ja sam bio odgovorio na slicnu poruku (nesecam se kome) sa razlikom
sto je bio u pitanju pocetnik. Imas u INFO direktorijumu fajl
BAS2PAS.ZIP i predlazem ti da njega skines a ima jedna dobra
knjiga koju imam a svakako ti je preporucujem a to je
'PASCAL Users Manual and Report' ili kako pise u prevodu
'PASCAL PRIRUCNIK' od Niklaus Wirth-a.
Pozdrav,
Marko.
pascal.362uobradovic,
Cao ! Pitanje je sledece :
- Koje su prednosti Turbo Pascala u odnosu na Turbo Basic.
NAPOMENA : Nije za mene,za druga je !!!!!!!!
Hvala Uros :)
pascal.363peca.st,
!-> Zar mu je taj CRC (ako je stvarno CRC ;)) ) koji koristi toiko
!-> pouzdan (???!!!) da se ne moze desiti da pera mikic i mika peric
!-> imaju isti broj?
Raspravu o prednostima i manama CRCa imaš u temi algoritmi, vođena je do
pre petnestak dana...
Peđa.
pascal.364uobradovic,
Cao ! Molim vas da odgovorite na sledece pitanje sto je pre moguce
- Koja je prednost Turbo Pascala u odnosu na Turbo Basic ?
Napomena ! Nije za mene, za druga je (kladio se);
Hvala Uros :)
pascal.365m.hristodulo,
>> a? di si to vid'o? koliko mu njemackih valuta to
>> dodje?
Izdanje Mikro Knjige. Manje od 10 DEM.
pascal.366dejanr,
>> - Koje su prednosti Turbo Pascala u odnosu na Turbo Basic.
Uh, vrlo je teško odgovoriti na ovo pitanje.
Pre svega, postojanje oba paketa je sumnjivo. Turbo Basic se "ne pravi"
već nekoliko godina, Borland je vratio licencu originalnim autorima i
program se prodaje (ako se uopšte prodaje) pod drugim imenom. Turbo
Pascal i dalje postoji, kao jeftinije rešenje za one koji amaterski
programiraju na paskalu. Za profesionalnu primenu zamenjen je paketom
Borland Pascal with Objects, trenutno je i dalje aktuelna verzija 7.0.
Pitanje prednosti Turbo Pascala u odnosu na Turbo Basic je u suštini
pitanje prednosti paskala nad bejzikom (obe implementacije su sasvim
pristojne). U osnovi je prednost veća koncepcijska doslednost - paskal
je u startu zamišljen kao dobro strukturiran jezik, zapravo jezik na
kome će se upoznavati tajne (tadašnje) kompjuterske nauke. Bejzik je
zamišljen kao mali interaktivni jezik, a docnije je dobijao razne
elemente modernijeg programiranja, ali je to malo po malo "krpljeno"
na njega, tako da mnoga rešenja nisu dosledna, iste stvari mogu da se
rade na razne načine itd. Mislim da za kontakt s programiranjem treba
preporučiti paskal, a ne bejzik. Za komercijalno programiranje verovatno
nisu posebno pogodni ni jedan ni drugi, ali mislim da je Turbo Pascal
(odnosno Borland Pascal) pogodniji.
pascal.367d.petrovic,
Ă> Raspravu o prednostima i manama CRCa imaš u temi algoritmi,
Ă> vođena je do pre petnestak dana...
Grrrrrrrr, ma pitao sam nešto sasvim drugo, ovo sam samo napomenuo.
Šta ga ja znam: ja sam nov u paskalu, možda je to neki standardan
način indeksiranja nekim standardnim CRC-om za koji ja u životu nisam
čuo pa da ne izmišljam toplu vodu i pravim svoje indekse pored već
postojećih. Osim toga, to mi treba za door za remote održavanje
BBS-a, da mogu brzo i efikasno da promenim neke podatke o korisniku
ili konjferenciji. To mu opet dodje na to da bih morao pri svakom
ulasku u door da reindeksiram što mu onda izlazi da mi je bolje da
čačkam po bazi brez indeksa jerbo je velika verovatnoća da u tooku
jednog poziva jednom udjem u door da bih izvršio (pogađaš ? ;) )
'jednu' inkriminisanu radnju.
pascal.368dekiper,
> a? di si to vid'o? koliko mu njemackih valuta to dodje?
E, imaš je u CET-u i to verzija na Srpskom za 20 DM :)
Pozdrav, Deki
pascal.369dr.grba,
>> Izdanje Mikro Knjige. Manje od 10 DEM.
Rekao bih da je malo skuplje.
pascal.370uobradovic,
Cao ! Deda mi ide za jedno desetak dana u Nemacku.Treba mi spisak dobrih
casopisa koje bi mu trazio da mi kupi. Ako ima jos nesto pametno slobodno
reciteů.To je bilo 1. pitanje ,a sada drugo.Na kojoj frekvenciji se nalazi
emisija BAJT92 ,u koliko sati i kojim danom.
Puno hvala
Uros
pascal.371ognjen,
)-> - Koje su prednosti Turbo Pascala u odnosu na Turbo Basic.
)-> NAPOMENA : Nije za mene,za druga je !!!!!!!!
Pa, jedna od mana TBa je što na početak svakog EXE fajla stavi
gomilu kavih "kontrolnih" karaktera (oko 50 Kb) tako da će ti
program od jedne jedine linije (npr. CLS) zauzimati oko 50 Kb, a
program od oko hiljadu linija tek koji kilobajt više...
Turbo Basic kao sâm program nema mnogo mana (možda ni jednu
izizev već navedene), ali koncepcija Basica (bilo kog - GW, Q i
sl.) je loša (u odnosu na Pascal). Zašto? Pa, kao prvo, kada
startuješ neki Basic program on se učitava liniju po liniju, tj.,
posle svake učitane linije (ili bolje reći instrukcije) se
izvršava ta linija, pa onda sledeća, itd. Dok se u Pascalu ceo
program učitava u memoriju, što prouzrokuje višestruko brže
izvršavanje programa... U nekim slučajevima i do 1000 (slovima:
hiljadu) puta! Na primer, ako napraviš (ne baš smislen) program,
koji na ekranu crta tačkice na slučajno odabranim koordinatam,
sve dok ne ispuni ceo ekran, u pascalu će se to izvršiti u roku
od 3-4 sec. dok u basicu to traje čitavu večnost (oko 7-8 min!)!
Neću mnogo da davim sa prednostima pascala nad basicom, glavnu
sam naveo, ako te baš mnogo zanimaju, nabavi umetak iz prtprošlog
broja računara ("Moja škola PASCALa") ili skini sa sezama fajl
BAS2PAS.ZIP (iliti kako preći sa BASICa na PASCAL).
Pozdravi druga, i reci mu da mu predlažem da pređe na Pascal.
Pozred svega, pascal programi su (po pravilu) mnogo pregledniji,
i nemaju zamršene GOTO "petlje" koje estetski uništavaju program.
Pozdrav, Ogi...
pascal.372a.kircanski,
_-=> i nemaju zamršene GOTO "petlje" koje estetski uništavaju
_-=> program.
Pa, ako si bejzikaš i prelaziš na paskal, onda ćeš koristiti
label-e, isto ti se 'vata. :)
pascal.373lucas,
Imam mali problem,
počeo sam da radim mali programčić u turbo pascalu v6.0, da budem precizniji
u turbo viziji, i sve ide ok ali ne mogu da ga nateram (zapravo neznam)
da mi pokaže vreme (Hr:Min) u desnom gornjem uglu gde sam mu postavio
meni liniju, jer on ne dozvoljava ništa osim novi padajućih menija.
Ako neko zna ....
p.s. Možda nisam bio jasan pa ako neko želi da pomogne detaljnjije ću opisati
šta sam radio i šta hoću.
pascal.374dvesic,
>> poceo sam da radim mali programcic u turbo pascalu v6.0, da
>> budem precizniji u turbo viziji, i sve ide ok ali ne mogu da
>> ga nateram (zapravo neznam) da mi pokaze vreme (Hr:Min) u
>> desnom gornjem uglu gde sam mu postavio
Pa sad postoje dva radikalnija resenja :
- Pogledaj TVRDEMO.PAS; u njemu ti je dat primer koriscenja
sata. Samo okvirna ideja : organizuj glavnu petlju koja
bira opcije menija tako da trenucima praznog hoda (Idle)
ispisuje sat u gornjem desnom uglu. Nije bas trivijalno,
al' se da izvesti.
- Preko ASM direktive ubaci mali programcic koji preuzima
interapt 9h i ispisuje stalno vreme. Jedan takav programcic
(istina, ne sa tom namerom :) sam poslao pre dva - tri dana
u PC.PROG (Clipper)
- Ako bas nista od ovoga ne uspes da uradis, mail write dvesic
pa cemo vec nesto smisliti
Pozdrav,
Dejan.
pascal.375eagle,
> Imam mali problem,
> počeo sam da radim mali programčić u turbo pascalu v6.0, da
> budem precizniji u turbo viziji, i sve ide ok ali ne mogu da ga
> nateram (zapravo neznam) da mi pokaže vreme (Hr:Min) u desnom
> gornjem uglu gde sam mu postavio meni liniju, jer on ne
> dozvoljava ništa osim novi padajućih menija.
Da, ako hoćeš da nešto ispišeš u redu u kom su meniji ili statusline
mora se ići ubadanjem u desktop sa writestr i sličnim metodima. Da ne
tupim, imaš primer (u stvari kompletan unit za satić i free heap) u
tvdemosĐgadgets.pas, a kako se koristi možeš videti u tvdemosĐtvdemo.pas
programu.
Ukratko: staviš inicijalizaciju negde na početak programa, a u IDLE
ubaciš pozive update metoda. Idle se poziva od strane tapplication.handleevent
svaki put kad se ne desi ništa, tj. kada getevent prijavi EvNothing.
pascal.376.bale.,
> reciteů.To je bilo 1. pitanje ,a sada drugo.Na kojoj frekvenciji se
> nalazi emisija BAJT92 ,u koliko sati i kojim danom.
žetvrtkom u 18:30 na 92.5 MHz.
pascal.377pedjak,
> Pa, ako si bejzikaš i prelaziš na paskal, onda ćeš koristiti
> label-e, isto ti se 'vata. :)
Ne, nemoj koristiti labele, trudi se da promeniš način
razmišljanja.
pascal.378pedjak,
> - Preko ASM direktive ubaci mali programcic koji preuzima
> interapt 9h i ispisuje stalno vreme. Jedan takav programcic
--
8h.
pascal.379dr.grba,
>> sl.) je loša (u odnosu na Pascal). Zašto? Pa, kao prvo, kada
>> startuješ neki Basic program on se učitava liniju po liniju, tj.,
>> posle svake učitane linije (ili bolje reći instrukcije) se
>> izvršava ta linija, pa onda sledeća, itd. Dok se u Pascalu ceo
>> program učitava u memoriju, što prouzrokuje višestruko brže
Ti govoriš o Basic interpreterima, a ovde je reč o Basic kompajlerima.
pascal.380a.kircanski,
_-=> Ne, nemoj koristiti labele, trudi se da promeniš način
_-=> razmišljanja.
Nisam rekao da koristim label-e.. nikad nisam koristio basic,
i zato mi ni ne pada na pamet da radim to, čak ni
sintaksu ne znam :)))
pascal.381dvesic,
>> 8h.
U pravu su. Hvala i izvinite zbog dezinformacije.
Pozdrav,
Dejan.
pascal.382paki,
> Pa, ako si bejzikaš i prelaziš na paskal, onda ćeš koristiti
> label-e, isto ti se 'vata. :)
Ne vredi da prelaziš na Paskal ako ćeš da koristiš labele.
pascal.383janko,
> Turbo Basic kao sâm program nema mnogo mana (možda ni
> jednu izizev već navedene), ali koncepcija Basica (bilo
> kog - GW, Q i sl.) je loša (u odnosu na Pascal). Zašto?
> Pa, kao prvo, kada startuješ neki Basic program on se
> učitava liniju po liniju, tj., posle svake učitane
> linije (ili bolje reći instrukcije) se izvršava ta
> linija, pa onda sledeća, itd. Dok se u Pascalu ceo
> program učitava u memoriju, što prouzrokuje
> višestruko brže izvršavanje programa... U nekim
> slučajevima i do 1000 (slovima:
Turbo Bejzik je kompajler, pa ne postoji baš klasična
interpretacija "linije po linije." Dosta je brz. Zar Kju bejzik
takođe nije kompajler?
> Pozred svega, pascal programi su (po pravilu) mnogo
> pregledniji, i nemaju zamršene GOTO "petlje" koje estetski
> uništavaju program.
Turbo Bejzik ima naprednije kontrolne strukture, uključujući
procedure i funkcije. Program na TB može da izgleda lepše nego
na Paskalu, jer može da bude znatno kraći.
Izbor jezika, odavno pričam, treba da zavisi od primene.
TB je za učenje programiranja (uz uputstva, ili uz pomoć nekog
ko zna) po meni, vrlo dobar. Lično sam ga "otkrio" relativno
skoro, kada sam hteo da brata naučim elementarnom programiranju.
Jedina sitna mana je slab "trejs mod" tj. TP lepše izvršava
liniju po liniju nego što to ume TB (a baš mi je tako nešto
trebalo).
> Pa, jedna od mana TBa je što na početak svakog EXE fajla
> stavi gomilu kavih "kontrolnih" karaktera (oko 50 Kb)
> tako da će ti program od jedne jedine linije (npr. CLS)
> zauzimati oko 50 Kb, a program od oko hiljadu linija tek
> koji kilobajt više...
Nije reč o kontrolnim karakterima, već o ran tajm kodu.
pascal.384vita,
EJJJJJJJJJJJJ LJUDI
BASIC je BASIC...........a PASCAL je PASCAL... nebih da navodim nista
dalje......nadam se da ste svi svesni ove cinjenice!!
Vita
pascal.385kriss,
Evo da vas pitam nešto: :)
Koji pascal mi preporučujete za upotrebu? Treba da pravi uslovno
'komercijalne' programe, znači što kraći.brži kod (posebno
akcenat na kraći) ... Hvala :)
pascal.386dejanr,
>> Koji pascal mi preporučujete za upotrebu? Treba da pravi uslovno
>> 'komercijalne' programe, znači što kraći.brži kod (posebno
>> akcenat na kraći) ... Hvala :)
Nema mnogo izbora - ili uzmi Turbo Pascal 6.0 ili, ako hoćeš da radiš
veće programe i pod Windows-om, Borland Pascal 7.0.
Da, postoji valjda i Turbo Pascal 7.0, ali ga nisam video pa ne mogu
da ga (ne)preporučujem.
pascal.387lucas,
-> Imam mali problem,
-> počeo sam da radim mali programčić u turbo pascalu v6.0, da budem p
Problem je rešen, hvala eaglu i dvesicu koji su pomogli.
Sada naravno imam novi problem koji bi trebao biti lakši ali ....
naime treba da ili
1. Ispišem tekstualni string (npr."Pera") na statusnoj liniji skroz desno i d
a
to ne reaguje ni našta (miš ili taster)
2. Da napravim prazno mesto iza poslednjeg statusnog tastera (recimo 5 m
esta)
i da ta praznina opet ne reaguje ni na šta, a da na samoj desnoj strani stavi
m
novi statusni taster koji bi reagovao kao svaki drugi.
Pozdrav LUCAS ....
p.s. Unapred hvala svima koji mi žele pomoći.
p.s.II. možda nisam bio jasan sa drugom molbom pa ću malo opširnije:
recimo:
Statusna linija izgleda ovako
F1-Help F2-Open F3-Close F4-Info F5-Edit Pera
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Prazan prostor koji ne reaguje
pascal.388d.petrovic,
Ufff, zaboravio da stavim qute ;))
TP 7.0, prvi koji sam ikad koristio :), lepo farba ključne reči (kao
BC 3.1) i radi slično kao TP 6.0. Ide na dve 1.2 diskete.
pascal.389eagle,
> Nisam rekao da koristim label-e.. nikad nisam koristio basic,
> i zato mi ni ne pada na pamet da radim to, čak ni
> sintaksu ne znam :)))
Labele mogu biti i korisne, na primer za brzo iskakanje iz velikih
petlji, kao break u C-u.
pascal.390eagle,
> naime treba da ili
> 1. Ispišem tekstualni string (npr."Pera") na statusnoj liniji
> skroz desno i da to ne reaguje ni našta (miš ili taster)
Postoji više načina. Prvi je istovetan ispisu sata u vrhu ekrana,
ostala dva se svode na redefinisanje TStatusLine u npr. TMyStatusLine
i naravno zamenom istih u InitStatusLine. Predviđeno je ispisivanje
komentara u statusnoj liniji iza poslednjeg StatusItema, i taj komentar
je odvojen vertikalnom crtom. Išlo bi otprilike ovako:
function tmystatusline.hint(AhelpCtx: Word): String;
begin
hint:='Pera';
end;
Ako statusnu liniju menjaš tokom izvršenja programa, gore ubaciš
case AhelpCtx of...itd. Drugi način je upotrebljiv ako imaš samo jednu
statusnu liniju u celom programu:
procedure tmystatusline.Draw;
var R:Trect;
begin
tstatusline.draw;
writestr(74,0,'Pera',1);
end;
> 2. Da napravim prazno mesto iza poslednjeg statusnog tastera
> (recimo 5 mesta) i da ta praznina opet ne reaguje ni na šta, a da na
> samoj desnoj strani stavim novi statusni taster koji bi reagovao
> kao svaki drugi.
Ovo je nemoguće bez ozbiljnih zahvata na tstatusline.
pascal.392kenza,
(;> Da, postoji valjda i Turbo Pascal 7.0, ali ga nisam video pa
(;> ne mogu da ga (ne)preporucujem.
TP 7.0 je deo Borland Pascal-a 7.0. (Sestica je bolja ;)
pascal.393vitez.koja,
#=> Koji pascal mi preporučujete za upotrebu? Treba da pravi
#=> uslovno 'komercijalne' programe, znači što kraći.brži
#=> kod (posebno akcenat na kraći) ... Hvala :)
Turbo Paskal, naravno.
Ako ti ne trebaju ekstravagantne opcije koje nudi BP 7.0, prava stvar za tebe
je TP 6.0. Pravi veoma kratak kod, posle njega me srce zaboli ;) kad pustim
neki C program da se kompajlira.
pascal.394spantic,
> BASIC je BASIC...........a PASCAL je PASCAL... nebih da navodim nista
> dalje......nadam se da ste svi svesni ove cinjenice!!
Xm, koji BASIC i koji Pascal? :) Ako govorimo o Visual Basic-u isti je
promenio moj tretman Basic-a.
pascal.395janko,
>>> 'komercijalne' programe, znači što kraći.brži kod
>>> (posebno akcenat na kraći) ... Hvala :)
> Nema mnogo izbora - ili uzmi Turbo Pascal 6.0 ili, ako
> hoćeš da radiš veće programe i pod Windows-om, Borland
> Pascal 7.0.
A šta beše sa onom firmom koja pravi bolje TP prevodioce od
Borlanda? Sećam se _formule_ na reklami, ali me mrzi da jurim sad
po časopisima... Znam da su skuplji od Borlanda, ali, čini mi
se, kod je kraći, pa brži, pa može .OBJ (ne .obj ;) )...
Zna li neko nešto više o tome (idealno: ima li program?)
pascal.396lucas,
-> function tmystatusline.hint(AhelpCtx: Word): String;
-> begin
-> hint:='Pera';
-> end;
Upalio je, Hvala.
-> procedure tmystatusline.Draw;
-> var R:Trect;
-> begin
-> tstatusline.draw;
-> writestr(74,0,'Pera',1);
-> end;
I ovo je upalilo.
Pozdrav LUCAS ....
pascal.397kriss,
˙˙>> Koji pascal mi preporučujete za upotrebu? Treba da pravi
˙˙>> uslovno 'komercijalne' programe, znači što kraći.brži kod
˙˙>> (posebno akcenat na kraći) ... Hvala :)
˙˙
˙˙ Nema mnogo izbora - ili uzmi Turbo Pascal 6.0 ili, ako hoćeš
˙˙ da radiš veće programe i pod Windows-om, Borland Pascal 7.0.
(Da ne bude zabune bole - Deki se zbunio, ovo je replaj na moje
pitanje :)
pascal.398dtadic,
>> A šta beše sa onom firmom koja pravi bolje TP prevodioce od
>> Borlanda?
Verovatno misliš na Stony Brook Pascal. Ima veću brzinu kompajliranja
od TP-a, 100% kompatibilan sa njim, ima memorijske modele,
pravi .OBJ fajlove...
žini mi se da je o njemu svojevremeno bilo priče na Sezamu i da je
zaključeno da ga niko nema u ovim krajevima.
pascal.399dejanr,
>> A šta beše sa onom firmom koja pravi bolje TP prevodioce od
>> Borlanda? Sećam se _formule_ na reklami, ali me mrzi da jurim sad
>> po časopisima... Znam da su skuplji od Borlanda, ali, čini mi
>> se, kod je kraći, pa brži, pa može .OBJ (ne .obj ;) )...
Stony Brook paskal? Video oglase, ali ko još oglasima veruje :)
Svojevremeno je firma izrazila raspoloženje da pošalje primerak programa
"Računarima" na test, ali upravo onda dođoše sankcije i... ništa.
žisto sumnjam da će neko "na neviđeno" da kupi program, dakle, bojim
se, ništa od neposrednih iskustava.
Ostaje Turbo Pascal i Borland Pascal.
pascal.400vita,
> Xm, koji BASIC i koji Pascal? :) Ako govorimo o Visual Basic
> promenio moj tretman Basic-a.
Svka cast Visual Basicu , ali ja pricam o ovim ostalim Basicima i Pascalima u
Dosu!!!
Jel iko ikada probo da radi 3d grafiku u Basicu??? nije???
Mislim da je stvar jasna i da dileme nema!!!!
VitaK
pascal.401djelovic,
> Jel iko ikada probo da radi 3d grafiku u Basicu??? nije???
>
> Mislim da je stvar jasna i da dileme nema!!!!
Ne vidim zašto bi za 3D grafiku dobar Basic kompajler bio nešto lošiji nego
neki Pascal kompajler? Basic je danas evoluirao do modernog, brzog i efikasnog
jezika i ne vidim zašto postoji toliko predubeđenje da on a priori ne valja.
BTW, što se tiče 3D animacije Bejzik bi tu mogao da bude isto toliko dobar
kao i Pascal. Mada, ni jedan od ta dva jezika za tako nešto nije dovoljno
dobar, čak se i C tu loše pokazuje. Ipak se neke osnovne rutine moraju napisati
u asembleru :(.
pascal.402vita,
> Ne vidim zašto bi za 3D grafiku dobar Basic kompajler bio
> neki Pascal kompajler? Basic je danas evoluirao do modernog, b
> jezika i ne vidim zašto postoji toliko predubeđenje da on a pr
Za neupuce│yow é
Za neupucene Basic je N (n tezi beskonacnosti) sporiji od C-a ... u 3D
grafici...a C je k puta (k tezi 10) sporiji od pascala!!!!!!!!!!!!!!!!!!!!
Cisto da se zna!!! ...... tako da mi molim niko ne pominje Basic kao nesto u
cemu moze da se pise noramlan software.. zato sto sam ja piso CAD u Basicu i
znam koliko je bila ista stvar brza kad sam je napiso u C-u ....
Vita
pascal.403djelovic,
> Za neupucene Basic je N (n tezi beskonacnosti) sporiji od C-a ... u 3D
> grafici...a C je k puta (k tezi 10) sporiji od pascala!!!!!!!!!!!!!!!!!!!!
> Cisto da se zna!!! ...... tako da mi molim niko ne pominje Basic kao nesto
> u cemu moze da se pise noramlan software.. zato sto sam ja piso CAD u
> Basicu i znam koliko je bila ista stvar brza kad sam je napiso u C-u ....
:)
Prvo, ti si verovatno imao neki Basic kompajler, kao što je Turbo ili
Quick Basic, a koji nije namenjen za profesionalnu upotrebu tako da mu
brzina bude jaka strana. Na tržištu postoje i kompajleri namenjeni
profesionalnim korisnicima koji daju rezultate sasvim približne najboljim C
kompajlerima.
Drugo, moja poruka se odnosila na programske jezike kao takve, a ne na
konkretne implementacije. Paskal kao programski teško da bi se i danas
primenjivao da Borland nije napravio Turbo Pascal koji je odlična
*nadgradnja* Pascala. Jedina mana Basica u odnosu na Pascal jeste
automatska deklaracija promenljivih koja se u modernim verzijama može po
želi isključiti.
Treće, C nije sporiji od Pascala već je brži. Ako i uzmemo da je to bio
lapsus, tj. da si hteo da kažeš da je "Pascal sporiji od C-a", tvoja
procena od deset puta (!) je totalno pogrešna. O onom "beskonačno" ne
vredi ni pričati.
I četvrto, tvoje poruke ne liče ni na šta. Pune su uzvičnika koje
čitaocu ostavljaju utisak da mu se dereš u lice, da ne spominjemo da
predstavljaju prave enciklopedije jezičkih anomalija. Iako nam je svima
drago što nam se priključio još jedan dobar programer, tvoj stil pisanja
čini razgovr sa tobom veoma napornim :(.
pascal.404spantic,
> Jel iko ikada probo da radi 3d grafiku u Basicu??? nije???
Kakve to veze ima? Za prikaz 3D grafike su ti neophodni algoritmi
a implementacija zavisi samo od tebe.
pascal.405zolika,
>>#=> Koji pascal mi preporučujete za upotrebu? Treba da pravi
>>#=> uslovno 'komercijalne' programe, znači što kraći.brži
>>#=> kod (posebno akcenat na kraći) ... Hvala :)
Ne mogu da odolim... :-) Uzmi TopSpeed Modulu-2, i batali Paskale, to
je preživljeno...
pascal.406vita,
> predstavljaju prave enciklopedije jezičkih anomalija. Iako nam
> drago što nam se priključio još jedan dobar programer, tvoj st
> čini razgovr sa tobom veoma napornim :(.
Pa nemoj da se vređamo. (tačka za promenu) :)
Salim se ... nisam mislio nista ozbiljno! Ne zelim nisakim da ulazim u
konflikt! Što se tiče mojih jezičkih anomalija, Svestan sam istih i trudim se
koliko toliko da ih ispravim. (opet tačka) :)
So, don't worry be happy :)
> Prvo, ti si verovatno imao neki Basic kompajler, kao što j
> Quick Basic, a koji nije namenjen za profesionalnu upotrebu ta
> brzina bude jaka strana. Na tržištu postoje i kompajleri namen
#######
Kom tržištu ??? Ja kad sam se bavio BASIC-om jurio sam neki TRUE BASIC (tako
nekako) čuvši iz pete ruke da je to neki haos BASIC.. ok ako kazes da ih ima za
prof. upotrebu, ali gde su ???
Koristio sam Microsoft Basic PROFESIONAL Dev. System 7.0... i pogodi sta...spor
je ko puz..iako je solidno dobar.
> Treće, C nije sporiji od Pascala već je brži. Ako i uzmemo
> lapsus, tj. da si hteo da kažeš da je "Pascal sporiji od C-a",
Ne, greska gusteru.. (ovo sa se tek salio i nemoj da se vređaš)
Mislio sam ono i sto sam reko. Ja se inače bavim 3D grafikom i sl. stvarima na
tom polju. Elem , isti algoritam za RAY TRACING u Pascalu i C-u se u C-u
BUKVALNO izvrsavao 10 puta sporije! ... Ni ja nisam verovo!
Mnogi ljudi mi nisu verovali, so ... morao sam da im demonstriram, ostali su
bez daha. Ali nije to jedina stvar gde mi se pokazalo da je (Turbo) Pascal
brzi od (Borland) C-a. Ima ih još.
Vita
P.S. Nemam običaj da pišem duge poruke, ali eto desilo se , so i'm very sorry!
P.P.S. Što se tiče mog pravopisam , znam da je užasan i da nestavljam šćžč itd.
tamo gde bih trebao, ali šta ću, vremenom će i to da se ispravi
(ja sam nov ovde (tek nekih 7 dana))
pascal.407.bale.,
> Ne, greska gusteru.. (ovo sa se tek salio i nemoj da se vređaš)
> Mislio sam ono i sto sam reko. Ja se inače bavim 3D grafikom i sl.
> stvarima na tom polju. Elem , isti algoritam za RAY TRACING u Pascalu
> i C-u se u C-u BUKVALNO izvrsavao 10 puta sporije! ... Ni ja nisam
> verovo!
Dobro, bre, dokle? ;-) Totalno je besmisleno reći da je Pascal brži od
C-a, isto kao i da je C brži od Pascal-a. To su programski jezici, a
kompajleri koji ih implementiraju su nešto sasvim drugo. Moguće je
napraviti (a ubeđen sam da su napravljeni i postoje) C kompajler koji
neke programe prevodi tako loše da se oni izvršavaju 10 puta sporije od
istih programa koje prevodi neki Pascal kompajler, kao i obrnuto
(dakle, dva para primera). Veruj! :)
Pozdrav,
Bale
pascal.408saricl,
Vec par dana razmisljam u koju conf da stavim ovaj problem,
a posto imam TP v6.0 odlucio sam se za ovu.
Hocu da napravim karticu sa PI/O cipom za PC.Doticna ce da koristi
samo osam bitni prikljucak.Izmadju raznih cipova odlucio sam se za Z80-PI/O.
Odgovara mi iz vise razloga a najaci je taj sto ih imam povecu kolicinu
na lageru.
Problem je u sledecem:
Doticni PI/O radi na 2.5MHz a magistrala na 8MHz (ako je neko nabudzi i vise)
Dakle procesor kada adresira cip ocekuje odziv real time odziv a cipu za tako
nesto treba cetiri puta vise vremena.Zanima me dali je moguce softverski
po adresiranju cipa zadati procesoru neku instrukciju da se vrti u mestu
dok nedobije odziv od PI/O.Nesto kao wait ili sl.
NARAVNO DOTICNA INSTRUKCIJA BI MORALA ZADRZATI SVE PODATKE NA MAGISTRALAMA
ZA VREMA IZVRSAVANJA DOTICNE WAIT INSTRUKCIJE.
Dakle prcesor adresira PI/O postavi zahtev za citanje i ceka odredjeni broj
takt ciklusa a svo vreme su mu adrese i zahtevi za citanje postavljeni.
Pre svega zanima me dali je to uopste moguce resiti softverski
ili cu morati da pribegnem hard resenjima,mozeli to iz TP v6.0 ili mora neki
drugi prog. jezik.
Svaka ideja dobrodosla .
P.S od literature imam TURBO PASKAL 6.0 OD STEPHENA O'BRIENA.
SARICL.
pascal.409ndragan,
/ izizev već navedene), ali koncepcija Basica (bilo kog - GW, Q i
/ sl.) je loša (u odnosu na Pascal). Zašto? Pa, kao prvo, kada
Ova priča nema veze sa odnosom bejzik-paskal, nego sa odnosom
interpreter - kompajler. Turbo bejzik je bio kompajler kao i turbo
paskal, prema tome nije to razlika.
Razlika je u tome što su svi sadašnji bejzici poprilične budževine,
prepuni istorije i stvari koje se više ne rade tako. Sam bog zna šta u
sadašnjim bejzicima znači "Open #3", da li to poziva neko pravljenje
FCBa, ili drške (hendl, georg fridrih), i koliko taj broj ima veze sa
nekakvim sistemskim brojevima. Da ne spominjem koncepciju komon zona,
koja se vuče još od prastarih fortran kompajlera itd.
Jedini bejzik koji se meni i dan danas sviđa je GfA bejzik. Sa novostima
koje su najavljene za poslednju verziju, to će zaista biti jezik tipa
"kome uopšte treba C". Bar je tako na Atariju, PC verziju nisam video.
Paskal je, s druge strane, formalizovan jezik, sa minimumom budževina.
Ono što je u Turbo paskalu budženo, to je prilagođavanje Virtove
koncepcije DOSovim bubama.
pascal.410vita,
> Dobro, bre, dokle? ;-) Totalno je besmisleno reći da je Pascal
> brži od C-a, isto kao i da je C brži od Pascal-a. To su
> programski jezici
Svaka čast za odgovor, podrazumeva se da sam govorio o BORLAND-u...
A ako neko zna neki Compiler (Pascal ili C) koji je brzi od gore
pomenutih, neka to javno saopšti, bio bih mu vrlo zahvalan.
Vita
pascal.411djelovic,
> Dobro, bre, dokle? ;-) Totalno je besmisleno reći da je Pascal brži od
> C-a, isto kao i da je C brži od Pascal-a.
Nije to toliko glupo. Ta dva jezika jednostavno u nekim delovima imaju
različite filozofije rada, od kojih neka može da daje bolje, a neka lošije
rezultate. Na primer, C sa stringovima operiše isključivo preko pointera za
razliku od recimo Borlandove implementacije Pascala, i tu se uvek pokazuje
brži, mada i komplikovaniji za upotrebu.
pascal.412paki,
> Svaka čast za odgovor, podrazumeva se da sam govorio o BORLAND-u...
> A ako neko zna neki Compiler (Pascal ili C) koji je brzi od gore
> pomenutih, neka to javno saopšti, bio bih mu vrlo zahvalan.
Samo nemoj reći da su spori...
pascal.414niklaus,
(:> tom polju. Elem , isti algoritam za RAY TRACING u Pascalu i C-u se
(:> u C-u BUKVALNO izvrsavao 10 puta sporije! ... Ni ja nisam verovo!
Pitanje je kolika je analogija između ta dva programa. Možda bi naj-
bolja usporedba bila ta da si C listing dobio uz pomoć jednog iole kvalitetnog
TP->TC konvertora. Index odnosa brzine TC:TP ne možeš formirati na osnovu tog
usamljenog primera.
(:niklaus:)
pascal.415niklaus,
(:> A šta beše sa onom firmom koja pravi bolje TP prevodioce od
(:> Borlanda? Sećam se _formule_ na reklami, ali me mrzi da jurim sad
Stony Brook Pascal+. Ništa extra. Što se mene tiče, bolje da ostanem
u Porcshe-u. (:
(:> Zna li neko nešto više o tome (idealno: ima li program?)
Ne, nemam ga.
Kad smo se dotakli Paskalja, evo još jednog aduta: QuikByte PASCAL
(Quik, bez 'c'). Evo čime nas mami reklama:
- Miscrodoft object code compatible
.OBJ interface to MASM, MS C, BASIC, FORTRAN, COBOL
- True Pascal - ISO/ANSI standards
Switch selectable language expresions
- Superb math library
Unequaled for the PC, in line code generation
- Ultra smart optimizing linker
for smaller .EXE files
(prim. nik. ovo bi moglo da reši krissov problem (:)
- Turbo-SC (Turbo Super-Charger)
Turbo dialect to QuikByte PASCAL translator
(:niklaus:)
pascal.416.bale.,
> Nije to toliko glupo. Ta dva jezika jednostavno u nekim delovima imaju
> različite filozofije rada, od kojih neka može da daje bolje, a neka
> lošije rezultate. Na primer, C sa stringovima operiše isključivo preko
> pointera za razliku od recimo Borlandove implementacije Pascala, i tu
> se uvek pokazuje brži, mada i komplikovaniji za upotrebu.
Hm, zaista. C je, pošto je prljav, osuđen da sa stringovima radi preko
pointera i to se teško drugačije može implementirati (?). Pascal je
malo višeg nivoa i, pretpostavljam, moguće su razne implementacije
raznih stvari. Pa sad, ako C ne može biti u radu sa stringovima brz kao
Pascal, onda Pascal može biti spor kao C :)
Ali, na kraju, ta razlika u radu sa stringovima se vidi na nivou
izvornog koda, tj. sami programi se uglavnom razlikuju. Da bi se
testirali sami kompajleri, trebalo bi napraviti iste programe: ili da
se Pascal uspori, tj. ne koriste njegovi stringovi nego pointeri, ili
da se u C-u definiše nova struktura string, ista kao ona u Pascal-u...
pascal.417ppekovic,
>> Hm, zaista. C je, pošto je prljav, osuđen da sa stringovima radi preko
>> pointera i to se teško drugačije može implementirati (?).
Koristeći C++ možeš definisati String klasu koju možeš
napraviti da radi potpuno isto kao Pascal tip string.
Paya
pascal.418vita,
> bolja usporedba bila ta da si C listing dobio uz pomoć jednog
> iole kvalitetnog TP->TC konvertora. Index odnosa brzine TC:TP
> ne možeš formirati na osnovu tog
Pa jel imas neki "iole kvalitetan TP->TC konverter" ??
BTW, original source je pisan u Pascalu, a C source je bukvalno
Pascal source sa prepravljenim jezičkim nesuglasicama(pr:begin->š)
Ajd sad..
Vita
pascal.419vita,
> izvornog koda, tj. sami programi se uglavnom razlikuju. Da bi
> se testirali sami kompajleri, trebalo bi napraviti iste
> programe: ili da se Pascal uspori, tj. ne koriste njegovi
> stringovi nego pointeri, ili da se u C-u definiše nova
> struktura string, ista kao ona u Pascal-u...
Pa zasto bi se Pascal NAMERNO usporava da bi se spustio na nivo C-a????
Ako je jezik brzi, onda je BRZI!
Merite vi brzinu algoritama i tako nekih stvari, TO presuđuje!
Uvek odaberi jezik koji će odgovarati tvom trenutnom poslu!
(i tako on odabra C iako Pascal brze renderiše :) )
Vita
pascal.420vitez.koja,
#=> Pa zasto bi se Pascal NAMERNO usporava da bi se spustio
#=> na nivo C-a????
To nije usporavanje, to je realno odmeravanje snaga pri istim uslovima. Primer
sa stringovima ide možda u korist TURBO paskala, no nije teško naći primere gde
je C 'na svome'.
#=> Ako je jezik brzi, onda je BRZI!
Ajde ?! :)
#=> Merite vi brzinu algoritama i tako nekih stvari, TO
#=> presuđuje!
To ne može da se izmeri. Merljive su jedino brzine izvršavanja IMPLEMENTACIJA
nekog algoritma u raznim programskim jezicima, gde ljudski (programerski)
faktor itekako utiče na rezultat, svakako više nego sam jezik.
pascal.421kriss,
˙˙ Kad smo se dotakli Paskalja, evo još jednog aduta: QuikByte
˙˙ PASCAL
˙˙ - Ultra smart optimizing linker
˙˙ for smaller .EXE files
˙˙ (prim. nik. ovo bi moglo da reši krissov problem (:)
Toooooo! Što manji .EXE, pa pklite, pa samoraspakujući ZIP, pa će
valjda da se sabije sve na par K a da ima menije, prozore, miša
... :)))) Šala, naravno, nego jel zna neko gde može da se nađe
taj Pascal?
pascal.422niklaus,
(:> Ajd sad..
Opet to ne mora da implicira (: zaključku da je TP 10x brži od TCa
(čudi me što uopšte postoji situacija u kojoj se to (bez namere) može postići).
Biće da se korišćene strukture bolje optimizuju (for speed) u TPu. Ako
bi se potrudio, siguran sam da bi nešto mogao da učiniš i za C "ekivalent".
(:niklaus:)
ps Da ne bude zabune, favorit Niklausa je TP. (:
pps Pošalji, pa da vidimo šta si uradio. Naravno ako je PD. (;
pascal.423.bale.,
> Koristeći C++ možeš definisati String klasu koju možeš
> napraviti da radi potpuno isto kao Pascal tip string.
Pa to sam i napisao, otprilike...
pascal.424.bale.,
> Pa zasto bi se Pascal NAMERNO usporava da bi se spustio na nivo
> C-a????
vitez.koja ti je odgovorio. Ne bih imao šta posebno da dodam. Mojne da
se žestiš, budi strpljiv :)
pascal.425ognjen,
)-> Pa, ako si bejzikaš i prelaziš na paskal, onda ćeš koristiti
)-> label-e, isto ti se 'vata. :)
Jok, ja mrzim GOTO petlje... Iako sam bej... (ne smem da
izgovorim ;) i prelazima na Pascal... :)
pascal.426ognjen,
[ja]
)-> >> je loša (u odnosu na Pascal). Zašto? Pa, kao prvo,
)-> >> kada startuješ neki Basic program on se učitava liniju po
)-> >> liniju,
[dr.grba]
)-> Ti govoriš o Basic interpreterima, a ovde je reč o Basic
)-> kompajlerima.
[ndragan]
)-> Ova priča nema veze sa odnosom bejzik-paskal, nego sa odnosom
)-> interpreter - kompajler. Turbo bejzik je bio kompajler kao i
)-> turbo paskal, prema tome nije to razlika.
Zez, sorry, pokrivam se ušima... :)
pascal.427djelovic,
> To nije usporavanje, to je realno odmeravanje snaga pri istim uslovima.
> Primer sa stringovima ide možda u korist TURBO paskala, no nije teško naći
> primere gde je C 'na svome'.
Ma ne znam kako ste uopšte došli do ovoga. C stringovi su BRčI, baš
zbog rada sa pointerima. Jedino što su i mnogo teži za upotrebu :(.
pascal.428madamov,
> Ako je jezik brzi, onda je BRZI!
Ne postoji takav kriterijum kojim bi izmerio koji je jezik brži. Možeš sam
da meriš koji kompajler pravi brže programe.
pascal.429vitez.koja,
#=> Ma ne znam kako ste uopšte došli do ovoga. C stringovi
#=> su BRčI, baš zbog rada sa pointerima. Jedino što su i
#=> mnogo teži za upotrebu :(.
################ <- unapred se ograđujem, možda i ne znam šta pričam :)
Kako se stiglo do toga da su TP operacije sas stringovi brže, ne znam.
Samo sam hteo da kažem kako, ako su stingovu u paskalu i brži, nije teško naći
nešto u Cu što šije paskal po brzini.
Drugo, kako 0 završeni stringovi mogu biti brži od TP-like stringova ?
Uzmimo kao primer kopiranje jednog stringa u drugi. Šta se dešava:
TP C
memcpy(str2, str1, *str1+1); while(*str2++=*str1++);
Prvi (TP) način se realizuje pomoću REP MOVSB instrukcije, dok je za
drugi potrebna nekakva JNZ petlja. Po mom skromnom znanju, prvi pristup je
brži.
Naravno, tu je i najdrastičniji primer - vraćanje dužine nekog stringa.
Kod Ca i njemu sličnih ;) tu je potrebna petlja, kod TPa samo naredba dodele
(len=string[0]).
pascal.430djelovic,
> Drugo, kako 0 završeni stringovi mogu biti brži od TP-like stringov
> Uzmimo kao primer kopiranje jednog stringa u drugi. Šta se dešava:
>
> TP C
>
> memcpy(str2, str1, *str1+1); while(*str2++=*str1++);
>
> Prvi (TP) način se realizuje pomoću REP MOVSB instrukcije, dok je z
> drugi potrebna nekakva JNZ petlja. Po mom skromnom znanju, prvi pristup je
> brži.
>
> Naravno, tu je i najdrastičniji primer - vraćanje dužine nekog stri
> Kod Ca i njemu sličnih ;) tu je potrebna petlja, kod TPa samo naredba dodel
> (len=string[0]).
Well, jedna string naredba je u Paskalu očigledno brža od svog C pandana,
ali prednost C-a je u tome što u jednoj ili dve kratke petlje začas može da
uradi nešto za šta u Paskalu treba mnogo više. Recimo, ako trebaš da ubaciš
neko slovo u string, ti ćeš u Paskalu preko left i right razdvojiti string pa
ga opet sastaviti. C, naprotiv, ceo posao obavlja u jednoj petlji. Koliko je to
brže od silnog kopiranja stringova (do čega zapravo dolazi pri pozivima
funkcija left & right) ne treba posebno naglašavati.
pascal.431spantic,
>#=> Merite vi brzinu algoritama i tako nekih stvari, TO
>#=> presuđuje!
>
> To ne može da se izmeri. Merljive su jedino brzine izvršavanja
> IMPLEMENTACIJA nekog algoritma u raznim programskim jezicima, gde ljudski
> (programerski) faktor itekako utiče na rezultat, svakako više nego sam
To nije baš tačno. Itekako su merljive brzine algoritama. Imaš analizu
složenosti algoritama. Možeš imati vremensku složenost i prostornu
složenost. U današnje vreme je kanda aktuelna samo vremenska ;)
Nikako ti nije svejedno da li imaš polinomijalan ili eksponecijalni
algoritam. Ma imao ti i najbolji prevodilac, isti ti nimalo neće
pomoći ako koristiš neki eksponencijalni "žderač".
pascal.432dejanr,
>> To nije baš tačno. Itekako su merljive brzine algoritama. Imaš analizu
>> složenosti algoritama. Možeš imati vremensku složenost i prostornu
>> složenost. U današnje vreme je kanda aktuelna samo vremenska ;)
Slažem se. Zapravo, kompajleri vrše optimizacije i to se vidi kroz brzinu
rada programa, ali su tu retki spektakularni dobici. Sa druge strane,
zamena algoritma *zaista* može da dovede do spektakularnog dobitka, čak
i do većeg nego kada se program sa XT-a prebaci na Pantium. Primera za
to ima puno, recimo svojevremeno je jedan od zadataka bilo pronalaženje
savršenih brojeva (broj koji je jednak zbiru svih svojih delilaca, recimo
28 = 1+2+4+7+14). "Zdravorazumskim" algoritmom je za pronalaženje svih
savršenih brojeva u numeričkom opsegu rada računara bilo potrebno recimo
par meseci "žvakanja" brojeva, a sa dobrim algoritmom par sekundi.
Time, naravno, ne želim da umanjim značaj dobrih optimizacionih kompajlera.
pascal.433uobradovic,
Ova formula mi je potrebna z Ova formula mi je potrebna za jedan
program,mislim zadatak
GLEDAJTE: a = 1 +(3 korena iz r)
Kako se to pise na Pascalu ?
)
pascal.434dejanr,
>> GLEDAJTE: a = 1 +(3 korena iz r)
Nešto kao:
a:=1+exp(log(r)/3)
pascal.435vita,
> Ne postoji takav kriterijum kojim bi izmerio koji je jezik
> brži. Možeš sam da meriš koji kompajler pravi brže programe.
Pa Naaravno, na to sam i mislio...ali ako si procito koju poruku pre ove...
(mrzi me da trazim ko je reko) rece covek..sasvim ispravno
Ideje nekih jezika su u startu slabije!, tako da ma koliko dobar komajler bio
on ce morati da radi sporije.. (pr: C i Pascal , stringovi)
Vita
pascal.436peca.st,
!-> neko slovo u string, ti ćeš u Paskalu preko left i right
!-> razdvojiti string pa ga opet sastaviti. C, naprotiv, ceo posao
!-> obavlja u jednoj petlji. Koliko je to brže od silnog kopiranja
!-> stringova (do čega zapravo dolazi pri pozivima funkcija left &
!-> right) ne treba posebno naglašavati.
Left i right? To je iz bejzika, u Pascalu to je Copy. :)
Inače, to što kažeš može se u pascalu isto uraditi u jednoj petlji!
Evo ovako:
Procedure UturiSlovo (Var S : String; Gde : Byte; Sta : Char);
Var i : byte;
Begin
Inc (SŠ0Ć);
For i := Length (S) downto Gde + 1 do
SŠiĆ := SŠi-1Ć;
S ŠGdeĆ := Sta;
End;
Ovo je onako iz glave, valjda nisam pogrešio. :)
(podrazumeva se da je ulazni string kraći od 255 karaktera,
da bi mogao nešto da uturiš ;) u njega)
Peđa.
P.S. Sori na Yuscii.
pascal.437peca.st,
!->>> GLEDAJTE: a = 1 +(3 korena iz r)
!->
!-> Nešto kao:
!->
!-> a:=1+exp(log(r)/3)
!!!
!
Zar ne ide ovde ln ?
Osim toga, mislim da je njemu trebalo ovo: a := 1 + 3*sqrt(r);
Dakle, mislim da je on tražio 3 * koren iz r, a ne treći koren iz r.
Peđa.
pascal.438eagle,
> a:=1+exp(log(r)/3)
"""
Lapsus, treba ln. Ako osnova nije navedena uzima se 10, ovde treba e.
Btw, log za navedenu osnovu bi išao ovako:
log(osnova,x) = ln(x)/ln(osnova)
pascal.439dejanr,
>> Zar ne ide ovde ln ?
Imaš pravo, sorry. Glupi Turbo Pascal ima samo ln... a i inače je dosta
siromašan sa funkcijama, ne znam što mu ne dodaše arcsin, arccos,
stepenovanje i slične potrebne stvari.
>> Dakle, mislim da je on tražio 3 * koren iz r, a ne treći koren iz r.
Možda... meni je pre ličilo na treći koren iz r. Sada ima i jedno i drugo,
pa će uzeti šta treba :)
pascal.440dejanr,
>> Lapsus, treba ln. Ako osnova nije navedena uzima se 10, ovde treba e.
U pravu si za lapsus, ali ako osnova nije navedena (a ne može se ni navesti)
uzima se e.
pascal.445madamov,
> Ideje nekih jezika su u startu slabije!, tako da ma koliko dobar komajler bio
> on ce morati da radi sporije.. (pr: C i Pascal , stringovi)
I na osnovu toga zaključuješ da je Pascal brži od C-a na nivou jezika? Hm,
nedovoljno parametara...
pascal.446vitez.koja,
#=> uradi nešto za šta u Paskalu treba mnogo više. Recimo,
#=> ako trebaš da ubaciš neko slovo u string, ti ćeš u
#=> Paskalu preko left i right razdvojiti string pa ga opet
#=> sastaviti. C, naprotiv, ceo posao obavlja u jednoj
#=> petlji.
Nisam čuo za funkcije Left i Right, a ovde govorimo isključivo o Turbo Paskalu
u kome one ne postoje. Umesto toga, tamo imaš funkciju "insert" koja radi
umetanje stringa u string, a sklon sam poverovati da je pisana u asembleru.
Inače, sada kada sam malo razmislio o celoj stvari, koristeći svoja
skromna znanja, prilično sam siguran da nećeš naći primer kod koga su C-like
stringovi brži od TPovih.
pascal.447vitez.koja,
#=> To nije baš tačno. Itekako su merljive brzine
#=> algoritama. Imaš analizu složenosti algoritama. Možeš
Da, ali nije bitno. Odgovarao sam na poruku iz čijeg konteksta se vidi da se
misli na merenje brzine jednog algoritma u više jezika, a ne više algoritama u
jednom jeziku. Nadam se da se slažeš da je u tom sučaju ljudski faktor
presudan.
pascal.448eagle,
>>> Lapsus, treba ln. Ako osnova nije navedena uzima se 10, ovde
>>> treba e.
> U pravu si za lapsus, ali ako osnova nije navedena (a ne može
> se ni navesti) uzima se e.
Rečenica se odnosila na log u tvojoj poruci :)
pascal.449vita,
> I na osnovu toga zaključuješ da je Pascal brži od C-a na nivou
> jezika? Hm, nedovoljno parametara...
Neznam da li shavats o cemu smo pricali!
Sto se tice stringova konkretno...jedan je jezik sigurno brzi od drugog
, barem malo!...nisam reko koji i za koliko , ali sigurno jeste.
Tako da u zavisnosti sta covek radi treba odabrati odgovarajuci
jezik+Compiler...
Vita
pascal.450vita,
> misli na merenje brzine jednog algoritma u više jezika, a ne
> više algoritama u jednom jeziku. Nadam se da se slažeš da je u
> tom sučaju ljudski faktor presudan.
E pa nece biti...ne zavisi sve od Ljuda :) koji se bavi programiranjem!!
Od toga koliko dobro poznaje jezike i programiranje je solidan faktor.
Ali kod klasicnog prevodjena negog algoritma iz jednog jezika u drugi
(bez vecih promena ideje) je od presudnog znacaja koliko je jezik(compiler)
dobar!!!
Valjda se sa ovime slazes.
Vita
pascal.451uobradovic,
Hvala na pomoci,ali izgleda da ja to neznam da napisem ili me pascal zeza.
Evo sta sam napisao :
var a,r : integer;
begin
writeln ('unesi r ');
readln (r);
a := 1 + exp(ln(r)/3);
writeln ('prvi broj je ',a);
writeln ('drugi broj je ',a-1);
end.
I sta.On mi napise Type mismatch.
Koji mu je K***C.
Trazio sam treci koren iz r.
Hvala na pomoci
Uros :)
pascal.452drpr,
-> Nešto kao:
->
-> a:=1+exp(log(r)/3)
Mislim da treba da se i ubaci i za znak jer treći koren se može
vaditi i od negativnog broja znači valjda ide kao
a:=1+ sgn(r)*exp(log(r)/3)
cope
pascal.453drpr,
-> var a,r : integer;
-> a := 1 + exp(ln(r)/3);
A nije integer , tj posle ove naredbe rezultat koji se
dodeljuje u a će biti realan teko da je tu greška!
cope
pascal.454eagle,
> Mislim da treba da se i ubaci i za znak jer treći koren se može
> vaditi i od negativnog broja znači valjda ide kao
Može koren, ali ne može logaritam. Treba:
a:= 1 + sgn(r) * exp(log(abs(r))/3)
pascal.455eagle,
> Evo sta sam napisao :
> var a,r : integer;
> a := 1 + exp(ln(r)/3);
var a: real;
pascal.456peca.st,
!-> Ali kod klasicnog prevodjena negog algoritma iz jednog jezika u
!-> drugi (bez vecih promena ideje) je od presudnog znacaja koliko je
!-> jezik(compiler) dobar!!!
Ne mora da bude. Kod koji si pisao u jednom kompajleru, dakle specijalno
za njega, kada prevedeš sintaksno (ako je moguće) na kod koji će biti
dostupan drugom kompajleru, ne mora da reprezentuje odnos brzine ta dva
kompajlera, zato što si ti pri pisanju koristio neke mogućnosti prvog
kompajlera, optimizovao si kod rukovodeći se kompajlerom, a u drugom
kompajleru to se, recimo, sporije izvršava, ali postoji način da uradiš
isto onako brzo kao u prvom komp., a možda postoji način da isto to uradiš
i brže. Nije dovoljno samo sintaksno prevesti, moraju se vršiti semantičke
optimizacije.
Peđa.
pascal.457peca.st,
!-> var a,r : integer;
!-> a := 1 + exp(ln(r)/3);
!-> I sta.On mi napise Type mismatch.
!-> Koji mu je K***C.
Logaritamska funkcija, tačnije u ovom slučaju funkcija korenovanja je,
jasna stvar, realna a ne celobrojna. Ti pokušavaš da celobrojnoj promenljivoj
dodeliš realan broj, a to neće ići. Promeni prvi red u "var a,r : real;"
i radiće bez problema.
!-> Trazio sam treci koren iz r.
Ok, ja sam "3 korena iz r" shvatio drugačije. :)
Peđa.
pascal.458dejanr,
Odgovor u temi PC.PROG/dizajn, poruka 2.12
pascal.459dejanr,
Prvo, pogrešno si deklarisao brojeve, treba da budu real ili još
bolje extended (ako nemaš koprocesor, moraš emulaciju da uključiš,
dakle na početku programa {$N+,E+} ili tako nešto.
Drugo, ln je definisan samo za pozitivne brojeve, nulu bi morao
da ispitaš sa if, a za negativne brojeve da koristiš abs() pa da
posle pomnožiš sa znakom od broja.
pascal.460mpaunovic,
Ova rasprava o trećem korenu me je podsetila na nešto
što se valjda učilo iz matematike, ali ja mora biti da
nisam bio na času ili sam igrao podmornica. Pa ako može
neko da me prosvetli:
Recimo x**3 = 1, rešenje je x=1, jeli tako? Jeste :)
Medjutim to je i jednačina trećeg stepena, x**3 - 1 = 0
i ona bi znači trebala da ima tri rešenja. A nema. Da li
ta jednačina je izuzetak od tog pravila, ili ima rešenja
koja su jednaka sva tri?
pascal.461dejanr,
>> Recimo x**3 = 1, rešenje je x=1, jeli tako? Jeste :)
>> Medjutim to je i jednačina trećeg stepena, x**3 - 1 = 0
>> i ona bi znači trebala da ima tri rešenja. A nema. Da li
>> ta jednačina je izuzetak od tog pravila, ili ima rešenja
>> koja su jednaka sva tri?
Dobro pitanje, ali ni jedan od dva ponuđena odgovora nije tačan ;) Prvo,
pravilo da jednačina N-tog stepena ima tačno N nula je toliko fundamentalno
da ga nazivaju "Osnovnim stavom algebre". Tu nema izuzetaka (ako izuzmemo
recimo jednačinu n-tog stepena koja uz x^n ima koeficijent 0, jer to i nije
jednačina n-tog stepena nego najviše (n-1)-og). Konkretno, jednačina trećeg
stepena (a i pomenuta x^3-1=0 je svakako jednačina trećeg stepena) ima uvek
tri nule. E sad, neke dve od te tri nule mogu izuzetno da budu jednake, a
mogu i sve tri, u kom slučaju je u pitanju jednačina koja se može svesti na
trivijalan oblik (x-a)^3=0. Međutim, data jednačina nema jednaka rešenja -
ima ih tri i sva tri su različita!
Sve to izgleda nemoguće ali nije - jedno rešenje je zaista x=1 a preostala
dva su -1/2+j(sqrt(3)/2) i -1/2-j(sqrt(3)/2). Kao što se vidi, druga
dva rešenja su kompleksni brojevi, pri čemu je j=sqrt(-1). Uopšte, ako se
uzme neki kompleksan broj z=a+bj (a i realan broj je u opštem slučaju
kompleksan, samo što je b=0) a zatim predstavi u obliku:
Z=RO*(cos FI + j*sin FI)
njegov n-ti koren imaće n vrednosti i one će glasiti
Y1,2,...n = RO'*(cos ((FI+2*k*PI)/n) + j*sin ((FI+2*k*PI)/n))
gde je RO' n-ti koren iz RO, PI je broj Pi (3.1415...) a k uzima vrednosti
1, 2, ... n.
Ako nekoga zanima, mogu da pošaljem (u PC.PROG/algoritmi) algoritam za
rešavanje jednačine trećeg stepena i program koji je rešava. Za razliku
od većine algoritama koje ćete naći po knjigama, ovde su pokriveni *svi*
slučajevi, dakle i razni trivijalni koji se obično preskaču.
pascal.462dvesic,
>> Ako nekoga zanima, mogu da posaljem (u PC.PROG/algoritmi)
>> algoritam za resavanje jednacine treceg stepena i program koji
>> je resava. Za razliku od vecine algoritama koje cete naci po
>> knjigama, ovde su pokriveni *svi* slucajevi, dakle i razni
>> trivijalni koji se obicno preskacu.
Zanima ! Zanima !
pascal.463madamov,
> Neznam da li shavats o cemu smo pricali!
Shvatam ja, ali u tvojim porukama ne piše baš ono što hoćeš da kažeš. B) A
tvoja poruka bi trebalo da bude otprilike: kada je o stringovima reč, Pascal bi
zbog svoje organizacije podataka ovakvog tipa trebalo da bude brži od C-a. I to
je diskutabilno, recimo operacija kopiranja stringa bi trebalo da bude iste
brzine, dok bi po tom rezonu funkcije tipa strcat, strrchr i slične u C-u bile
sporije, tj. sve one koje kao reper imaju kraj stringa. S druge strane,
traženje karaktera sa leve strane u nekom stringu bi opet trebalo da ide istom
brzinom. I za strcat je diskutabilno, C treba samo da nađe kraj stringa na koji
lepiš drugi string i na tom mestu uradi strcpy, dok Pascal odmah zna gde je
kraj stringa, ali mora da izbaci dužinu drugog stringa, zalepi ga na prvi i
onda sabere njihove dužine i upiše na početak prvog stringa. Sve u svemu, mnogo
priče da bi se dokazalo nešto što i pored svega navedenog ipak zavisi samo od
implementacije jezika, tj. od kompajlera.
pascal.464v.nesic,
> Ako nekoga zanima, mogu da pošaljem (u PC.PROG/algoritmi) algoritam za
Zanima :)
pascal.465paki,
> Ako nekoga zanima, mogu da pošaljem (u PC.PROG/algoritmi) algoritam za
> rešavanje jednačine trećeg stepena i program koji je rešava. Za razliku
> od većine algoritama koje ćete naći po knjigama, ovde su pokriveni *svi*
> slučajevi, dakle i razni trivijalni koji se obično preskaču.
Bilo bi fino :)
Nego, pade mi na pamet jedna stvar. Da li je operacija 'kvadratni
koren' definisana i za brojeve manje od nule?
pascal.466gavros,
> GLEDAJTE: a = 1 +(treći koren iz r)
> Kako se to pise na Pascalu ?
U Turbo Pascal-u bi to izgledalo ovako:
var
b:real;
function treci_koren(a:real):real;
begin
if(a>0)then treci_koren:=exp(ln(abs(a))/3)
else if(a<0) then treci_koren:=-exp(ln(abs(a))/3)
else treci_koren:=0
end;
begin
readln(b);
writeln(treci_koren(b)+1);
end.
Ovo je za probu,uneseš broj i rezultat će biti 1+treći koren(broj).
Pozdrav.
pascal.467spantic,
> misli na merenje brzine jednog algoritma u više jezika, a ne više
> algoritama u jednom jeziku. Nadam se da se slažeš da je u tom sučaju
> ljudski faktor presudan.
Da, upravo tako. Dejanr je izneo primer koji nam je Joza stalno
probijao uši sa časova iu PJMP-a oko alociranja manipulacije sa
matricom. Mehaničko prebacivanje algoritma tu neće nimalo pomoći.
pascal.468vita,
> isto onako brzo kao u prvom komp., a možda postoji način da
> isto to uradiš i brže. Nije dovoljno samo sintaksno prevesti,
> moraju se vršiti semantičke optimizacije.
Na to sam mislio kad sam reko "bez veše promene ideje"
Pod idejom sam smatrao program kakav je napisan u izvornom jeziku!
Prevođenje programa iz C-a u Pascal ce ici mnogo bezbolnije
i bez "veše promene ideje" nego prevođenje programa iz C-a u BASIC
Vita
pascal.469vita,
> Recimo x**3 = 1, rešenje je x=1, jeli tako? Jeste :)
> Medjutim to je i jednačina trećeg stepena, x**3 - 1 = 0
> i ona bi znači trebala da ima tri rešenja. A nema. Da li
Pa kako recimo kvadratna jednacina kad je Determinanta=0
ima samo jedno resenje! (dva ista)
Eto ti odgovor.
Vita
pascal.470vita,
> priče da bi se dokazalo nešto što i pored svega navedenog ipak
> zavisi samo od implementacije jezika, tj. od kompajlera.
Cek malo....
Ali cela ideja ANSI C-a je u tome da stringovi budu onakvi kakvi jesu
u C-u (isto vazi i za Pascal).
Pa prema tome, neke stvari jednostavno su odredjene u napred i ma koliko
dobar kompajler bio, one su jednostavno brče! (Pr: len() u C-u i Pascalu)
Vita
pascal.471pedjak,
> Nego, pade mi na pamet jedna stvar. Da li je operacija 'kvadratni
> koren' definisana i za brojeve manje od nule?
Nije u skupu realnih brojeva.
pascal.472debelijencija,
Nije da se bunim, ali radi održavanja matematičke pismenosti... :)
Ovo što si ti odgovorio čoveku odnosi se na polje kompleksnih brojeva.
U polju realnih brojeva ova jednačina ima jedno rešenje i to baš 1.
Jednostavno:
xž3-1=0 <=> (x-1)(xž2+x+1)=0 <=> x=1 ili xž2+x+1=0.
Sada imamo:
xž2+x+1=(x+1/2)ž2+3/4 > 0, dakle, nema više rešenja.
Ono što si rekao za polje kompleksnih brojeva tačno je, uz par sitnih
prepravki koje slede...
!=?> pravilo da jednačina N-tog stepena ima tačno N nula je
!=?> toliko fundamentalno da ga nazivaju "Osnovnim stavom
!=?> algebre". Tu nema izuzetaka (ako izuzmemo
Pre svega, jednačina nema nule, nego rešenja, a polinom ima nule. Ipak,
to nije toliko bitno koliko da to nije Osnovni stav algebre. Osnovni stav
algebre je:
Teorema: Svaki polinom sa realnim koeficijentima ima jednu kompleksnu
nulu.
Koristeći taj stav može se dokazati da ih ima onoliko koliki mu je stepen,
pri čemu se koristi Bezuov stav, pa posle još preneti na oblast jednačina.
Inače, vrlo je bitno da su svi koeficijenti realni!
!=?> dva rešenja su kompleksni brojevi, pri čemu je j=sqrt(-1).
U novijoj literaturi imaginarna jedinica se označava sa i, ali to nije toliko
bitno koliko da ne može da se piše sqrt(-1)! Jednostavno, koren za negativne
brojeve nije definisan. Doduše, ovo važi za realne brojeve, ali korenovanje
kompleksnih brojeva nije funkcija, jer da ima više vrednosti za isti broj.
(Interesanto je, da je u polju kompleksnih brojeva: sqrt(-1)=˝i ! :)
Dakle, i je rešenje jednačine: xř=-1, tj.:
Definicija: i je broj za koji važi iř=-1.
Uopšte, jednačina xř=-1 je vrlo važna jednačina u razvoju matematike,
jer su zbog nje izmišljeni kompleksni brojevi...
pascal.473dejanr,
>> > Recimo x**3 = 1, rešenje je x=1, jeli tako? Jeste :)
>> > Medjutim to je i jednačina trećeg stepena, x**3 - 1 = 0
>> > i ona bi znači trebala da ima tri rešenja. A nema. Da li
>>
>> Pa kako recimo kvadratna jednacina kad je Determinanta=0
>> ima samo jedno resenje! (dva ista) Eto ti odgovor.
Nije to odgovor. Kvadratna jednačina koju opisuješ zaista ima
dva jednaka rešenja, ali jednačina trećeg stepena koju je naveo
ima tri rešenja, i to različita. Jedno od njih je realan broj,
a preostala dva su kompleksni.
pascal.474peca.st,
!-> Nego, pade mi na pamet jedna stvar. Da li je operacija 'kvadratni
!-> koren' definisana i za brojeve manje od nule?
Paki, učićeš to u trećoj godini, ima da ti bude muka. ;)
So, jeste definisana u polju kompleksnih brojeva.
Kako je i = sqrt (-1) (dejanr je ovo obeležavao sa j, mada su nas učili sa i)
tako se sqrt(x), x<0, predstavlja kao i*sqrt(abs(x))
žemu ovo služi, osim da bi prvo tromesečje u trećoj godini iz algebre u MG
bilo dosadno, pojma nemam.
Peđa.
pascal.475paki,
> Teorema: Svaki polinom sa realnim koeficijentima ima jednu kompleksnu
> nulu.
Možda treba: '...ima _bar_ jednu kompleksnu nulu.'.
pascal.476maksa,
>> nule. Ipak, to nije toliko bitno koliko da to nije Osnovni
>> stav algebre. Osnovni stav algebre je:
>> Teorema: Svaki polinom sa realnim koeficijentima ima jednu
>> kompleksnu nulu.
Digresija, šum & zanimljivost - OTA je inače bila Gausov doktorat.
pascal.477niklaus,
(:> ima tri rešenja, i to različita. Jedno od njih je realan broj,
(:> a preostala dva su kompleksni.
I to da važi: x1=a+ib i x2=a-ib (x1,x2 ţ CĐR)
(:niklaus:)
pascal.478pedjak,
> Teorema: Svaki polinom sa realnim koeficijentima ima jednu
> kompleksnu nulu.
Ne. Teorema glasi: Svaki kompleksan polinom P, dg P ˛1 ima bar
jedan koren.
pascal.479vita,
> Nije to odgovor. Kvadratna jednačina koju opisuješ zaista ima
> dva jednaka rešenja, ali jednačina trećeg stepena koju je naveo
> ima tri rešenja, i to različita. Jedno od njih je realan broj,
> a preostala dva su kompleksni.
Ma ok u vezi toga.
Ali sta ce uopste ovolika rasprava u PC.PROG.pascal?????
:))))
pascal.480vita,
> Paki, učićeš to u trećoj godini, ima da ti bude muka. ;)
Za r neucismo mi to u II-oj??? kod nas u mg mislim.
pascal.481madamov,
> Ali cela ideja ANSI C-a je u tome da stringovi budu onakvi kakvi jesu u C-u
> (isto vazi i za Pascal).
Tako je bilo od početka, nema veze sa ANSI C-om.
pascal.482peca.st,
!-> Možda treba: '...ima _bar_ jednu kompleksnu nulu.'.
Ne, gosn. Neša Lazarević insistira na tome da je dovoljno reći
"ima jednu kompleksnu nulu" !
Peđa.
pascal.483dekiper,
>! -> Nego, pade mi na pamet jedna stvar. Da li je operacija 'kvadratni
>! -> koren' definisana i za brojeve manje od nule?
Možda i jeste, ko zna. Bilo bi logično da ako je sqrt(9)=3, da je onda
sqrt(-9)=sqrt(9)*sqrt(-1). Pošto se sqrt(-1) popularno zove i imagina-
rna jedinica onda sve što treba da uradiš je da promeniš predznak iz -
u + i da posle dodaš ovo sqrt(-1).
Konkretno:
program korenje; š :))))) ć
Var broj:real;
begin
readln(broj);
if broj > 0 then writeln(sqrt(broj));
else if broj=0 then writeln(0);
else if broj < 0 then writeln(sqrt(-broj),'i');
end.
Pozdrav, Deki
BTW, ne zamerite na eventualnim sintaksnim greškama u prg-u. Šta ću, na-
vikao sam se na C.
pascal.484peca.st,
!-> Za r neucismo mi to u II-oj??? kod nas u mg mislim.
Kompleksne brojeve smo učili ove godine, ili ja imam rupe u sećanju. ;)
Peđa.
pascal.485mpaunovic,
Zahvaljujem se svima na odgovoru oko kompleksnih
brojeva i jednacine treceg stepena. Mnogo sam naucio
novih stvari, a neke sam i znao ranije to jest predavane
su na fakultetu ali je to davno bilo pa sam pozaboravljao.
Inace i kod nas su imaginarnu jedinicu zvali j -
valjda je tako zovu inzenjeri, a matematicari kazu i.
Ne znam odakle razlika
pascal.486paki,
> Kako je i = sqrt (-1) (dejanr je ovo obeležavao sa j, mada su nas učili
> sa i) tako se sqrt(x), x<0, predstavlja kao i*sqrt(abs(x))
Pa ne može ovako, komšija :)
Nas profa uči da sqrt:R->R, a da je i*i=-1.
Možda ćemo u trećoj godini proširiti definiciju, ali za sada je
ovako :)
pascal.487paki,
> Možda i jeste, ko zna. Bilo bi logično da ako je sqrt(9)=3, da je onda
> sqrt(-9)=sqrt(9)*sqrt(-1). Pošto se sqrt(-1) popularno zove i imagina-
> rna jedinica onda sve što treba da uradiš je da promeniš predznak iz -
> u + i da posle dodaš ovo sqrt(-1).
E, tu sam te čekao :) A zašto je sqrt(-9) 3*i, a ne -3*i?
pascal.488paki,
> Ali sta ce uopste ovolika rasprava u PC.PROG.pascal?????
Smeta li? :)
pascal.489predragd,
> Zašto neke MS-DOS funkcije (IOCTL, čitanje/setovanje
> serijskog broja diska) ne rade u protected modu (BP 7.0).
> Dok na primer funkcija $41 - brisanje fajla, takođe u
> protected modu, radi odlično. Sa druge strane sve te
> funkcije u real modu (takođe BP 7.0) rade potpuno
> ispravno.
Prosto je neverovatno da na Sezam-u niko nije znao odgovor na
ovo pitanje. No, kako bilo da bilo uspeo sam da dodjem do
zadovoljavajuceg resenja. Ukoliko nekog interesuje ova
problematika u prilogu sam ostavio primer pozivanja real mode
interrupt-a iz DPMI-a. Programcic je skinut sa Borland download
BBS-a, autor mi je nepoznat.
Peđa.
readwrte.arjpascal.490predragd,
> Primetio sam da u programima imam gomilu istih procedura
> koje rade sa različitim tipovima podataka (procedure za
> unos). Da li objektno programiranje omogućava da ja imam
> jednu proceduru za unos koja će da obrađuje sve moje
> podatke. Bio bih jako zahvalan ako bi
Mogao bi da izvedes nesto kao to radi Turbo Vision 2. Svi podaci
se unose kao stringovi, a moguce je definisati kakav ce biti format
podataka za unos. Kasnije te podatke konvertujes u tebi potreban
oblik.
Pedja.
pascal.491peca.st,
!-> Nas profa uči da sqrt:R->R, a da je i*i=-1.
Tja, teoriju nikad nisam voleo, možda sam i pogrešio.
Priznajem da tačnu definiciju broja i ne znam. Postoje dve
mogućnosti, ili je rešenje jednačine i*i=-1, ili je i=sqrt(-1).
Peđa.
P.S. vicevi.esnafski: Ovo je pc.prog.pascal
pascal.492peca.st,
!-> E, tu sam te čekao :) A zašto je sqrt(-9) 3*i, a ne -3*i?
Paki, pazi malo! Koliko je sqrt(4)? Nemoj samo da kažeš
plus/minus 2.
sqrt(4) = 2, po definiciji koren vraća pozitivnu vrednost!
Drugo je to što je (plus/minus 2) na kvadrat = 4.
Ako imaš x na kvadrat = 4, odatle je x = +/- 2.
Ali ako imaš x = sqrt(4), odatle je x = 2.
Peđa.
pascal.493paki,
> Priznajem da tačnu definiciju broja i ne znam. Postoje dve
> mogućnosti, ili je rešenje jednačine i*i=-1, ili je i=sqrt(-1).
Ono prvo :) Pitao sam danas profu.
Inače, ovo pitanje sam postavio zbog teksta u Računarima o
MatematiKi 386 u kome se kaže otprilike 'Program je stvarno
profesionalan, umesto da prijavi grešku na 'sqrt(-9)', kao
digitroni, on vraća 3*i.', što mi je malko prismrdelo.
> P.S. vicevi.esnafski: Ovo je pc.prog.pascal
OK, nećemo više :)
pascal.494uobradovic,
Hvala na odgovorima ! Video sam u cemu je greska.
Imam dva pitanja :
-> Sta je to Turbo Vision(video sam da postoji na pascalu) ali cemu sluzi
-> kako se instalira emm386
Hvala Uros :)
pascal.495eagle,
> -> Sta je to Turbo Vision(video sam da postoji na pascalu) ali
> cemu sluzi
Turbo Vision je biblioteka za kreiranje korisničkog interfejsa.
Dakle, ako radiš u TV, programi će ti spolja izgledati isto kao
standardni Borlandov IDE (prozori, meniji, dijalozi, editor...)
Jako korisna stvar.
pascal.496dragisha,
-> Hm, zaista. C je, pošto je prljav, osuđen da sa stringovima radi preko
-> pointera i to se teško drugačije može implementirati (?). Pascal je
Itekako može. Rješenje je ASCIIZ string + pojam dinamičkog niza. Takav
sistem pri prosljeđivanju takvog niza kao parametra šalje prvo ukupnu
veličinu, zatim pointer na sam niz tako da do proboja ne može doći. To
slanje veličine je dio metoda i pravi (:) jezici to rade sami:).
(znam da si ti ovo već čitao, ali zbog ostalih i zbog tvog upitnika
ponavljam jopet:).
pascal.497dragisha,
-> To nije usporavanje, to je realno odmeravanje snaga pri istim uslovima.
-> Primer sa stringovima ide možda u korist TURBO paskala, no nije teško
-> naći primere gde je C 'na svome'.
Bilo bi zanimljivo da nam daš neki konkretan primjer kad ti već nije
teško. Ja nemam ideje:).
pascal.498dragisha,
-> Ne mogu da odolim... :-) Uzmi TopSpeed Modulu-2, i batali Paskale, to
-> je preživljeno...
(zdravo kolega:)
Moja prva reakcija je isto to:), a druga (ono što čovjeka zanima:) je
TopSpeed Pascal. TopSpeed Pascal je ISO Pascal, što znači da je "za
nijansu" kompatibilniji sa ostatkom Pascala na tržištu nego Turbo Pascal
koji je budževina koja će da radi na PCju i nigdje više! Ako je nekome
vrhunska ambicija PC programiranje, samo naprijed.
Dalje, TS Pas kompajlira u .OBJ, veže se sa C, C++, M2, ASM, ima
memorijske modele (+overlay +DLL za DOS), OOP... Zauzima par megabajta
zajedno sa IDE. Ima i TP2TS.
pascal.499dragisha,
-> Imaš pravo, sorry. Glupi Turbo Pascal ima samo ln... a i inače je dosta
??????????????????
Postaje zabavno:). žemu da zahvalimo na ovom trenutku iskrenosti?:)
pascal.500dejanr,
>> > Glupi Turbo Pascal ima samo ln... a i inače je dosta
>> > ??????????????????
>>
>> Postaje zabavno:). žemu da zahvalimo na ovom trenutku iskrenosti?:)
Ne treba nikakva posebna iskrenost da se Turbo Pascalu zameri što nema
dovoljno funkcija nego mora da se piše procedura i za takvu sitnicu kao
što je arccos. Svakom jeziku (ili bar svakom koji sam ja video) mogu se
sa pravom uputiti mnoge zamerke, i uvek ima mesta za njegova unapređenja.
Recimo, stalno unapređujući TopSpeed Modulu 2, kroz dvadesetak godina će,
ako se potrude, imati proizvod koji vredi onoliko koliko danas vredi
Turbo Pascal ;>
pascal.501lucas,
Mali problem u Turbo Visiji i Turbo Pascalu 6.0,
elem, neće da mi pozove komande u dijalog box-u već pozima samo komande sa
menija i statusne linije.
npr. komadna cmQuit mi ne radi ako pritisnem button u dialog box-u, izgleda da
sam ja glup :) a radi mi kada je pozovem na meniju ili pritisnem mišem na
stasus line
Pozdrav LUCAS ....
pascal.502.bale.,
> -> Hm, zaista. C je, pošto je prljav, osuđen da sa stringovima radi
> preko -> pointera i to se teško drugačije može implementirati (?).
> Pascal je
>
> Itekako može. Rješenje je ASCIIZ string + pojam dinamičkog niza. Takav
> sistem pri prosljeđivanju takvog niza kao parametra šalje prvo ukupnu
> veličinu, zatim pointer na sam niz tako da do proboja ne može doći. To
> slanje veličine je dio metoda i pravi (:) jezici to rade sami:).
>
> (znam da si ti ovo već čitao, ali zbog ostalih i zbog tvog upitnika
> ponavljam jopet:).
Može li malo detaljnije? Ja sam hteo da kažem da nema 'leba pored
cast-a iz ko-zna-čega u char* ...
pascal.503kriss,
˙˙ TopSpeed Pascal. TopSpeed Pascal je ISO Pascal, što znači da
GDE može da se nabavi to čudo?
pascal.504niklaus,
(:> E, tu sam te čekao :) A zašto je sqrt(-9) 3*i, a ne -3*i?
Zato što...
ű(-9) = ű(9*(-1)) = ű9 * ű(-1) = 3 * ű(-1) = 3 * i
(:niklaus:)
pascal.505niklaus,
(:>> Teorema: Svaki polinom sa realnim koeficijentima ima jednu
(:>> kompleksnu nulu.
(:>
(:> Ne. Teorema glasi: Svaki kompleksan polinom P, dg P ˛1 ima bar
(:> jedan koren.
A kasnije ćete sa izvodima tačno znati koliko je kompleksnih, a koli-
ko realnih korena... (:
(:niklaus:)
pascal.506dragisha,
-> Ne treba nikakva posebna iskrenost da se Turbo Pascalu zameri što nema
-> dovoljno funkcija nego mora da se piše procedura i za takvu sitnicu kao
-> što je arccos. Svakom jeziku (ili bar svakom koji sam ja video) mogu se
Profesionalac će da plati matematičku biblioteku ili će to napraviti
jednom za svagda u UNIT i završiti s time. Zar ne?:)
-> Recimo, stalno unapređujući TopSpeed Modulu 2, kroz dvadesetak godina
-> će, ako se potrude, imati proizvod koji vredi onoliko koliko danas vredi
-> Turbo Pascal ;>
žuo sam nešto da osvajaju tehnologiju TPU-a, i krešu opcije za rad sa
memorijskim modelima da se koliko toliko približe Turbo Pascalu:).
--
[A clear conscience is merely the result of bad memory.]
pascal.507ilazarevic,
Kako da pozovem private proceduru u objektu? Totalni sam početnik što se
objekata tiče... :)
pascal.508kriss,
˙˙ TopSpeed Pascal. TopSpeed Pascal je ISO Pascal, što znači da
GDE može da se nabavi to čudo?
pascal.509paki,
> Zato što...
> ű(-9) = ű(9*(-1)) = ű9 * ű(-1) = 3 * ű(-1) = 3 * i
žek, odakle ű(-1)=i? Zašto nije -i?
Ali OK, nije ni važno.
pascal.510dejanr,
>> Profesionalac će da plati matematičku biblioteku ili će to napraviti
>> jednom za svagda u UNIT i završiti s time. Zar ne?:)
'oće, ako radi sa floating point brojevima. Meni dosta longint.
>> > Recimo, stalno unapređujući TopSpeed Modulu 2, kroz dvadesetak godina
>> > će, ako se potrude, imati proizvod koji vredi onoliko koliko danas vredi
>> > Turbo Pascal ;>
>>
>> žuo sam nešto da osvajaju tehnologiju TPU-a, i krešu opcije za rad sa
>> memorijskim modelima da se koliko toliko približe Turbo Pascalu:).
Neka naprave da prevodi onoliko brzo koliko turbo pascal, pravi kod jednake
dužine i da se taj kod jednako brzo izvršava, pa da pričamo dalje.
pascal.511eagle,
> Kako da pozovem private proceduru u objektu?
Ako private metod pozivaš unutar istog unita (ili programa),
možeš ga pozivati kao običan metod. Izvan svog unita privatni
metodi i polja su nedostupni.
pascal.512eagle,
> Mali problem u Turbo Visiji i Turbo Pascalu 6.0,
> elem, neće da mi pozove komande u dijalog box-u već pozima samo
> komande sa menija i statusne linije.
> npr. komadna cmQuit mi ne radi ako pritisnem button u dialog
> a radi mi kada je pozovem na meniju ili pritisnem mišem na stasus line
U principu, sve komande koje napravi neki element dijaloga obrađuju
se u handleevent metodu tog dijaloga. Dakle cmquit u ovom slučaju,
ili bilo koja komanda nekog dugmeta ne bi trebala da stigne do
application.handlevent metoda, što se očigledno i ne dešava u tvom
programu. Meniji i statusna linija pozovu putevent koji ubaci komandu
u event, i tu komandu getevent pokupi u sledećem krugu i prosledi
handleventu koji reaguje, na primer prekidom programa ako je cmquit.
Dijalozi, pretpostavljam, obrišu event na kraju.
pascal.513.bale.,
> žek, odakle ű(-1)=i? Zašto nije -i?
Pa to mu je definicija...
pascal.514paki,
>> žek, odakle ű(-1)=i? Zašto nije -i?
>
> Pa to mu je definicija...
Ne, definicija mu je i*i=(-1).
pascal.515vitez.koja,
#=> Bilo bi zanimljivo da nam daš neki konkretan primjer kad
#=> ti već nije teško. Ja nemam ideje:).
Pointerska aritmetika, na primer.
pascal.516.bale.,
> Ne, definicija mu je i*i=(-1).
? Pa ja sam živeo u zabludi decenijama... :)
pascal.517dr.grba,
>> Ne, definicija mu je i*i=(-1).
Rekao bih da nisi u pravu. Definicija imaginarne jedinice jeste
"kvadratni koren iz -1". Formalno, ono što ti nazivaš definicijom
nema logičku osnovu, pošto koristiš broj i da bi izveo -1. Ne ide
tako, broj i moraš da imaš kao izvedenu vrednost.
pascal.518ilazarevic,
> možeš ga pozivati kao običan metod. Izvan svog unita privatni
> metodi i polja su nedostupni.
Hm, nisam baš najbolje shvatio :) Kad iz svog programa pozivam neki unit, da
li mogu da koristim privatne metode tog unita?
pascal.519paki,
>>> Ne, definicija mu je i*i=(-1).
>
> Rekao bih da nisi u pravu. Definicija imaginarne jedinice jeste
> "kvadratni koren iz -1". Formalno, ono što ti nazivaš definicijom
> nema logičku osnovu, pošto koristiš broj i da bi izveo -1. Ne ide
> tako, broj i moraš da imaš kao izvedenu vrednost.
Evo, citat (dobro, nije baš citat :) iz moje sveske:
"Treba rešiti jednačinu x^2=-1. Uzmimo i takvo da je i^2=-1. ..."
Jedino ako profesori iz MG loše predaju.
Inače, ovo učim u drugoj godini. Možda se kasnije menja
definicija (tj. proširuje), ali ne verujem.
pascal.520eagle,
> Hm, nisam baš najbolje shvatio :) Kad iz svog programa pozivam
> neki unit, da li mogu da koristim privatne metode iz tog unita?
Ne možeš.
pascal.521eagle,
> Rekao bih da nisi u pravu. Definicija imaginarne jedinice jeste
> "kvadratni koren iz -1". Formalno, ono što ti nazivaš
> definicijom nema logičku osnovu, pošto koristiš broj i da bi
> izveo -1.
Broj i je jedno rešenje jednačine sqr(x) + 1 = 0, iliti
broj sa osobinom da je sqr(i) = -1. Pošto jednačina ima
dva rešenja, (0,1) i (0,-1), uzima se da je i po definiciji
kompleksan broj (0,1).
pascal.522eagle,
> Evo, citat (dobro, nije baš citat :) iz moje sveske:
> "Treba rešiti jednačinu xž2=-1. Uzmimo i takvo da je iž2=-1.
Ovo je sasvim ispravno. Na primer, x=sqrt(-5) se rešava
Ovako: A ne ovako:
x=sqrt(-5) x=sqrt(-5)
x=sqrt(sqr(i)*5) x=sqrt(-1)*sqrt(5)
x=i*sqrt(5) x=i*sqrt(5)
pascal.523nikac,
>■ Dalje, TS Pas kompajlira u .OBJ, veže se sa C, C++, M2, ASM,
>■ ima memorijske modele (+overlay +DLL za DOS), OOP... Zauzima
>■ par megabajta zajedno sa IDE. Ima i TP2TS.
Sve sto si nabrojao ima i BP7.0 ... (naravno bez tp2ts ;)
pascal.524nikac,
>■> Teorema: Svaki polinom sa realnim koeficijentima ima jednu
>■> kompleksnu nulu.
>■
>■ Ne. Teorema glasi: Svaki kompleksan polinom P, dg P ˛1 ima bar
>■ jedan koren.
Jok more vec je debelijencija u pravu. Ako imas nesto protiv toga
zali profesorima iz Univerzitetu u Beogradu. Tacnije u
zvanicnom udzbeniku gorepomenutog univerziteta, konkretno
pise sledece(crno na belom):
"Glavni stav algebre: Svaki polinom mora imati jedan koren, realan
ili kompleksan"
BTW. toliko o onoj raspravi da polinom ima nule a ne korene ;)
pascal.525dragisha,
-> >> žuo sam nešto da osvajaju tehnologiju TPU-a, i krešu opcije za rad sa
-> >> memorijskim modelima da se koliko toliko približe Turbo Pascalu:).
->
-> Neka naprave da prevodi onoliko brzo koliko turbo pascal, pravi kod
-> jednake dužine i da se taj kod jednako brzo izvršava, pa da pričamo
-> dalje.
Zašto jednake dužine, zar nije fora da je kraće a brže?:) A brzina
kompilacije mi je sasvim dovoljna. Za vrijeme za koje mi prevede 600 Kb i
pametno ga ulinkuje (da! postoji i smart link bez .TPU) ne mogu do WCa da
odem kako treba. Osim toga, za onolike optimizacije, TRUE! .OBJ, vezu na
TRUE! .LIB itt mogu da mu oprostim i manju brzinu kompiliranja/linkovanja.
Osim toga, standard je standard. Meni PC nije vrhunska ambicija pa da se
ubijam sa TP.
BTW, koju si ono verziju TS ti evaluirao svojevremeno?
--
[Tagline Disabled]
pascal.526dragisha,
-> #=> Bilo bi zanimljivo da nam daš neki konkretan primjer kad
-> #=> ti već nije teško. Ja nemam ideje:).
->
-> Pointerska aritmetika, na primer.
Fakat je nema, ali je fakat i da za njome nema previše potrebe. Većinu
stvari koje se odrađuju pointerskom aritmetikom dobar optimizator će tako i
uraditi ali programer neće morati da vodi računa o tome. Dobar primjer je
ona poruka u dizajn temi od DejanR-a. Svaki C programer će da potrči i to
radi pointerskom aritmetikom, jer TAKO TREBA:), a svaki Pascal programer
će razmisliti par sekundi i odraditi ugnježđeni FOR i točka.
Nagradno pitanje, šta je čitljivije? Dvije for petlje ili neka
skalamerija sa pointerima?
--
[What is the meaning of life in 50 words or less]
pascal.527uobradovic,
Da li je problem da se na Turbo Pascalu naprave padajuci meniji i da se opcije
skroluju.Ako neko ima algoritam nek ga posalje.
Hvala :)
pascal.528peca.st,
!-> Da li je problem da se na Turbo Pascalu naprave padajuci meniji i
!-> da se opcije skroluju.Ako neko ima algoritam nek ga posalje.
Što bi ti neko slao nešto što već imaš, a nisi svestan da imaš? ;)
To se zove Turbo Vision i mnogo je dobra stvar. :) Sastavni je
deo Turbo Pascal-a.
Ako ti se to ne svidi (malkice je komplikovan za upotrebu) imaš u
dir-u neke unite za to. (recimo, tot*.*) Ako ti se i to ne svidi,
onda piši sam. :)
Peđa.
pascal.529pedjak,
>>■ Ne. Teorema glasi: Svaki kompleksan polinom P, dg P ˛1 ima bar
>>■ jedan koren.
> Jok more vec je debelijencija u pravu. Ako imas nesto protiv toga
> zali profesorima iz Univerzitetu u Beogradu. Tacnije u
Hm, teoremu sam prepisao iz Matematike I (ETF), pa sad ako oni lažu
mene... :) MIslim da sam ipak u pravu...
pascal.530dragisha,
-> >■ Dalje, TS Pas kompajlira u .OBJ, veže se sa C, C++, M2, ASM,
-> >■ ima memorijske modele (+overlay +DLL za DOS), OOP... Zauzima
-> >■ par megabajta zajedno sa IDE. Ima i TP2TS.
->
-> Sve sto si nabrojao ima i BP7.0 ... (naravno bez tp2ts ;)
Super. Ima i ISO i zauzima 2 mb na disku?
--
[Castration takes balls.]
pascal.531uobradovic,
-> To se zove Turbo Vision ....
Ja znamda imam Turbo Vision i da je on zatakve sari i pravljen.Problem je u
tome sto ja neznam da rad.Vision - u.
A sto se ttot*.* gde ti se to nalaz.
Uros :)
pascal.532uobradovic,
Izvinite na greskama pri kucanju.
pascal.533dejanr,
>> > Sve sto si nabrojao ima i BP7.0 ...
>>
>> Super. Ima i ISO i zauzima 2 mb na disku?
Zauzima 5-6 mega ako se instalira samo DOS verzija. Deo od toga su
HELP-ovi i druga on-line dokumentacija. Ako hoćeš i Windows, onda
zauzima dosta više, jer ima raznoraznih alatki.
A što se tiče ISO kompatibilnosti, ja za nju ne dajem ni koliko
crno pod noktom. Ako nećeš da koristiš ekstenzije, ne moraš da ih
koristiš. Ako ti trebaju, tu su. Doduše, tako program neće raditi
na platformama na kojima ne postoji Turbo/Borland Pascal... pa šta,
ne mora ni da radi. Ako nekome treba program za razne platforme,
dakle neki potencijalno veoma obiman projekat, verovatno će ga i
tako raditi u C++-u.
pascal.534vitez.koja,
#=> Fakat je nema, ali je fakat i da za njome nema previše potrebe.
Kako god kažeš...
pascal.535djelovic,
> Fakat je nema, ali je fakat i da za njome nema previše potrebe. Većinu
> stvari koje se odrađuju pointerskom aritmetikom dobar optimizator će tako i
> uraditi ali programer neće morati da vodi računa o tome.
Ne verujem da i jedan Pascal/Modula-2 komp ajler ima optimizator koji
bi to uradio. Dakle, C još uvek vlada na polju brzine. (BTW, i turbo Turbo
Paskal ima pointersku aritmetiku, mada nisam video još nijedan program koji
bi je koristio.)
Ono gde današnji optimizatori mogu da pomognu jeste zaista nepotrebno
pokovanje više izraza u jedan što većina C programera i danas radi. To
stvara nečitljiv kod, a, zahvaljujući optimizaciji, potpuno je nepotrebno.
pascal.536isekulovic,
>> Da li je problem da se na Turbo Pascalu naprave padajuci meniji i da
>> se opcije skroluju.Ako neko ima algoritam nek ga posalje.
Da je problem i nije, da imam proceduru i nemam. Prvo pogledaj unit
tpw60 koji ima procedure za crtkanje prozora i pravljenje menija
(neskrolujićih). Procedure za prozore su sasvim ok, a procedura za meni
je malo bagovita ako se otvori više prozora i ne podržava miša. Ja sam
napisao svoju proceduru za menije (neskrolujuće) ali nije baš mnogo
prenosiva. Osnovna ideja mi je bila da se proceduri proslede: koordinate
prozora, niz od N stringova i broj opcija. Pri čemu je N gornja granica
koliko može da se uzme opcija. I onda iscrtkaš prozor na tim koordinatama
i iz niza stringa ispišeš onoliko opcija koliko treba. Onda tu ide klasično
gore-dole vrćenje opcija dok se ne izabere jedna i onda smestiš broj te
opcije u neku globalnu promenljivu. Ne bi trebalo da bude ništa komplikovanije
napisati proceduru za skrolujuće menije, samo bi malo složenije bilo
kretanje gore-dole kroz opcije ali nije uopšte neizvedivo.
pascal.537bearboy,
>> ■ Dalje, TS Pas kompajlira u .OBJ, veže se sa C, C++, M2, ASM,
>> ■ ima memorijske modele (+overlay +DLL za DOS), OOP... Zauzima
>> ■ par megabajta zajedno sa IDE. Ima i TP2TS.
>
> Sve sto si nabrojao ima i BP7.0 ... (naravno bez tp2ts ;)
Da, ali je n puta veći (gde n teži beskonačnom), glomazniji, etc. :)
pascal.538dragisha,
-> Ne verujem da i jedan Pascal/Modula-2 komp ajler ima optimizator koji
-> bi to uradio. Dakle, C još uvek vlada na polju brzine. (BTW, i turbo
-> Turbo Paskal ima pointersku aritmetiku, mada nisam video još nijedan
-> program koji bi je koristio.)
Dobro ako ne vjeruješ. :)
Jedan primjer, prije par sati sam pričao sa Janevom iz ISP. Kaže, imali
su neki algoritam za ray tracing urađen u TP. Onda su iz zezanja stvar
preveli (prilagodili) u TS Pas i dobili su ubrzanje od 104%. U pitanju je
računanje sa ispisom rezultata u fajl. Toliko i o superiornosti TP koda,
BTW.
Drugi primjer, upravo sam pročitao tvoju poruku o Zortech C++. Kojom
crnom magijom, ako već nije moguće boljim optimizacijama, postižu toliko
bolje rezultate od konkurencije?:))
Zaključak. Oblast optimizacije nije ni blizu zasićenja tako da prostora
za ogromne razlike ima i biće još dugo.
Prijedlog, hoćemo li da nađemo te primjere kojima bismo koliko toliko
smisleno mogli da izmjerimo sposobnosti pojedinih kompajlera na
tržištu i pojedinih jezičkih konstrukcija i da utvrdimo ili pobijemo
postojanje razlika u tehnologijama koje pojedine firme/jezici koriste?
--
[I'm like a bad TSR; I keep popping up!]
pascal.539dragisha,
-> ne mora ni da radi. Ako nekome treba program za razne platforme,
-> dakle neki potencijalno veoma obiman projekat, verovatno će ga i
-> tako raditi u C++-u.
Pravovremena procjena? Previše često se ne desi na vrijeme. Ne rade se
projekti baš uvijek sa pravovremenim saznanjem o kompleksnosti ili o
konačnom izgledu proizvoda.
Osim toga, code reuse je u zadnje vrijeme vrlo moderna stvar a njome se u
suštini stimuliše sticanje "štetnih" navika. Jako teško će se odlučiti na
mijenjanje alata neko ko već ima dosta razvijenog koda koji može da
iskoristi u svakom novom projektu pod uslovom da ne mijenja jezik.
--
[Never smirk at the judge..]
pascal.540dragisha,
-> #=> Fakat je nema, ali je fakat i da za njome nema previše potrebe.
->
-> Kako god kažeš...
Na moje pitanje (konkretna prednost C-a) si odgovorio sa "pointerska
aritmetika". Pošto sam imao priliku da istu koristim kao i da se snalazim
bez nje, napisao sam šta sam napisao.
Imaš li primjer koda koji pointerska aritmetika ubrzava toliko da se to
osjeti ako pokušaš u nečemu drugom da uradiš isti posao?
U svakoj knjizi gdje se spominje optimizacija (preporučujen Dragon Book)
možeš vidjeti da su tehnike preveslavanja "običnih" indeksiranja na
pointersku aritmetiku odavno sastavni dio optimizatora koda.
--
[Boys and girls, can you say BUGGY???]
pascal.541djelovic,
> Zaključak. Oblast optimizacije nije ni blizu zasićenja tako da prostora
> za ogromne razlike ima i biće još dugo.
Naravno da nije! Ja sam samo rekao da je današnji PC kompajleri rade
loše ili nikako.
> Prijedlog, hoćemo li da nađemo te primjere kojima bismo koliko toliko
> smisleno mogli da izmjerimo sposobnosti pojedinih kompajlera na
> tržištu i pojedinih jezičkih konstrukcija i da utvrdimo ili pobijemo
> postojanje razlika u tehnologijama koje pojedine firme/jezici koriste?
Prihvaća se!
Dodouše, ja koristim C++ zato što mi odgovara kao jezik, i teško da bi
se vratio na nešto drugo i ostao bez objekata, preklapanja operatora i
sličnih poslastica, tako da mi brzina i nije mnogo bitna (20 posto
tamo-vamo korisnik retko kada primeti).
No, slažem se da je došlo kranje vreme da se utvrde gde koji današnji
kompajleri i jezici stoje. Mogli bi čak da napravimo od toga neki lep
članak za "Računare"? Evo, ja ću da pokrijem C/C++, ti TS Pascal, traži se
još neko ko radi na BP 7.0.
pascal.542djelovic,
> Drugi primjer, upravo sam pročitao tvoju poruku o Zortech C++. Kojom
> crnom magijom, ako već nije moguće boljim optimizacijama, postižu t oliko
> bolje rezultate od konkurencije?:))
Ne znam, nisam ga lično probao.
Par puta sam se zeznuo sa alatima manjih firmi koji su na prvi
pogled izgledali mnogo dobro ali su se u praksi pokazali kao nepouzdani i
bagoviti pa se sada veoma teško odlučujem da kupim nešto što nije apsolutno
provereno. Dakle, dok ne počne veća količina ljudi da ih koristi teško da
ću i ja.
Takođe, sećam se da su mnoge firme svojevremno davale benčmarke u
kojima se pokazivalo da su neuporedivo bolji od Borlanda ili Microsofta,
ali je to uvek u realnim uslovima ispadalo netačno. Ili su oni radili sa
"naštelovanim" merenjima, ili nisu podržavali IEEE standarde za brojeve sa
pokretnim zarezom, ili nešto slično, u svakom slučaju - Borland i Microsoft
su uvek ispadali bolji. No, kao što rekoh u prethodnoj poruci, sasvim sam
rad da napravimo test i utvrdimo tačno o čemu se radi.
pascal.543zolika,
Dragišo, drž' se.
>> Recimo, stalno unapređujući TopSpeed Modulu 2, kroz dvadesetak godina će,
>> ako se potrude, imati proizvod koji vredi onoliko koliko danas vredi
>> Turbo Pascal ;>
Hm, DejanRe, jesi li probao da nešto programiraš na TopSpeed Moduli-2?
pascal.544zolika,
>> Neka naprave da prevodi onoliko brzo koliko turbo pascal, pravi kod
>> jednake dužine i da se taj kod jednako brzo izvršava, pa da pričamo
>> dalje.
Samo mi nije jasno zašto da TopSpeed ubuduće pravi SPORIJE programe
nego sada?
pascal.545zolika,
>> GDE može da se nabavi to čudo?
TopSpeed Paskal je deo višejezičnog TopSpeed okruženja (tako nekako).
pascal.546dejanr,
>> Hm, DejanRe, jesi li probao da nešto programiraš na TopSpeed Moduli-2?
Pre jedno tri godine želeo sam da dam šansu Moduli 2. Mislio sam da je
to jezik na koji bih mogao da pređem, da omogućava produktivnije
programiranje nego paskal, dosta raspoloživih biblioteka itd, a opet da
i dalje bude "strog" jezik, za razliku od C-a. U taj test uložio sam
nekih mesec dana vremena, plus pare za kupovinu (verovali ili ne :) dve
implementacije Module (Logitech i JPI). Završio sam teško razočaran kako
u jezik tako (pogotovu) u implementacije, koje su se po svim parametrima
pokazale imferiornim u odnosu na tadašnji Turbo Pascal. Bilo je, naravno,
i sitnih prednosti (recimo, mogućnost generisanja .OBJ fajlova, za razliku
od "slepog creva" kao što je TPU) ali je ono sa minus strane daleko
pretezalo nad onim sa plus strane. Onda sam uradio potreban broj XRD-ova
i zaboravio na Modulu 2.
Možda su u međuvremenu napravili neke bolje implementacije (mada je i
TP napredovao... :) ali ja nemam ni vremena ni novca da ih ponovo
isprobavam.
U zadnje vreme sve više koristim C, mada sam i dalje mišljenja da Turbo
Pascal-u nema premca kada treba nešto brzo isprogramirati, testirati,
dati u upotrebu i onda "zaboraviti". Ukoliko se, naravno, to nešto baš
nikako ne može napisati na Clipper-u ;))))
pascal.547spantic,
> No, slažem se da je došlo kranje vreme da se utvrde gde koji današnji
> kompajleri i jezici stoje. Mogli bi čak da napravimo od toga neki lep
Ja mislim da bi mogli da se obratite profesoru Jozi Dujmoviću,
popularnom Hozeu :) koji je sada trenutno u Masačusetsu, čak iako
Dejan baš i nema mnogo lepe uspomene na njega :)) Joza je baš
pre godinu dana počeo merenje perfomansi prevodilaca na MSDOS
platformi. Dosad je sigurno završio. Pošto smo mu odavde slali
test primerke ovo što ste nabrojali je sigurno pokrio.
pascal.548vitez.koja,
#=> Imaš li primjer koda koji pointerska aritmetika ubrzava
#=> toliko da se to osjeti ako pokušaš u nečemu drugom da
#=> uradiš isti posao?
Nemam, još sam mlad i zelen.
#=> možeš vidjeti da su tehnike preveslavanja "običnih"
#=> indeksiranja na pointersku aritmetiku odavno sastavni
#=> dio optimizatora koda.
Ti mi daješ za pravo... Operacije sa nizovima se svode na pointersku
aritmetiku, na ovaj ili onaj način. Da li je bolje da su takve suštinske
tehnike dostupne programeru, ili ne ? Pitanje koncepcije...
Imao sam, skoro, situaciju da treba da "protrčim" kroz niz bajtova (TPW), koji
treba prethodno da napunim sa blockread. Ako tu strukturu deklarišem kao niz,
onda ne mogu da je iskoristim za blockread - jer ovaj traži pointer. Ako
definišem to kao pointer i s njim alociram potrebnu memoriju onda nema
indeksiranja :((
pascal.549bearboy,
> Jedan primjer, prije par sati sam pričao sa Janevom iz ISP.
> Kaže, imali su neki algoritam za ray tracing urađen u TP. Onda
> su iz zezanja stvar preveli (prilagodili) u TS Pas i dobili su
> ubrzanje od 104%. U pitanju je računanje sa ispisom rezultata u
> fajl. Toliko i o superiornosti TP koda,
Mada se može desiti i obrnuto. Ja sam moj seminarski rad u Petnici
"preveo" iz TP u TSP i usporilo se oko 5-6 puta (!!!). Ako se dobro sećam,
glavni razlog je bila sporija (ali preciznija) funkcija RND-a u TSP-u.
pascal.550igors,
Da li zanate kako mogu ucitati bilo koji graficki format iz Paskala,
ako ste to uspeli javite mi, pokusavao sam sa fajlovima sa Sezama ali nisam
uspeo jer im je uvek nesto nedostajalo.
Igor Stankovic
pascal.551vita,
> Sve sto si nabrojao ima i BP7.0 ... (naravno bez tp2ts ;)
Kako pravis OBJ keve ti?
pascal.552vita,
> kompajleri i jezici stoje. Mogli bi čak da napravimo od toga
> neki lep članak za "Računare"? Evo, ja ću da pokrijem C/C++, ti
> TS Pascal, traži se još neko ko radi na BP 7.0.
Watcom C 386 pokriven.
Vita
P.S. A mogli bi i bugove da uporedjujemo.
pascal.553vita,
> Mada se može desiti i obrnuto. Ja sam moj seminarski rad u
> Petnici "preveo" iz TP u TSP i usporilo se oko 5-6 puta (!!!).
> Ako se dobro sećam,
Idi bre Atila, pa to mi nikada nisi pokazo...
Ajde bre da ih testiramo.
Vita
pascal.554dragisha,
-> #=> možeš vidjeti da su tehnike preveslavanja "običnih"
-> #=> indeksiranja na pointersku aritmetiku odavno sastavni
-> #=> dio optimizatora koda.
->
-> Ti mi daješ za pravo... Operacije sa nizovima se svode na pointersku
-> aritmetiku, na ovaj ili onaj način. Da li je bolje da su takve suštinske
-> tehnike dostupne programeru, ili ne ? Pitanje koncepcije...
Ne dajem ti za pravo. Kažem, ako to već kompajler radi sam, bolje je
da ja ipak svoj dio posla radim na "malo" višem nivou.
Slijedeći gornju logiku, pravi izbor je asembler jer tamo BAŠ sve možeš (i
moraš, BTW:)) da uradiš direktno.
-> Imao sam, skoro, situaciju da treba da "protrčim" kroz niz bajtova
-> (TPW), koji treba prethodno da napunim sa blockread. Ako tu strukturu
-> deklarišem kao niz, onda ne mogu da je iskoristim za blockread - jer
-> ovaj traži pointer. Ako definišem to kao pointer i s njim alociram
-> potrebnu memoriju onda nema indeksiranja :((
TPW. Zar treba nešto više da se kaže?:)
Postoji sigurno i u TP nešto što vraća adresu proizvoljnog objekta čime
si mogao da odradiš posao. Osim toga, postoji i POINTER TO ARRAY [...], tj.
kako se već piše u TP. Sve u svemu, rješenja ima raznih, a nek to mašina
radi low level, tj. pointerskom aritmetikom.
-> Nemam, još sam mlad i zelen.
Nisi još izgubljen, misli na sebe dok imaš vremena:). Gre'ota je za
matematičara da se zamlaćuje Com:).
--
[Ahhhhhhhh, I forget what I was going to say ....]
pascal.555dragisha,
-> Prihvaća se!
Super:).
-> No, slažem se da je došlo kranje vreme da se utvrde gde koji današnji
-> kompajleri i jezici stoje. Mogli bi čak da napravimo od toga neki lep
-> članak za "Računare"? Evo, ja ću da pokrijem C/C++, ti TS Pascal, traži
-> se još neko ko radi na BP 7.0.
Prvo primjeri, tj. kodovi koje neće biti problem portovati i koji nisu
trivijalni. Ja ću da probam TS M2, Pascal, C i C++. Predlažem više
primjera, a ne samo sieve i slične. Napravićemo EXEe i UL ih ovdje tako da
može svako da proba na svojoj mašini svaki test.
--
[I AM standing.]
pascal.556dragisha,
-> Mada se može desiti i obrnuto. Ja sam moj seminarski rad u Petnici
-> "preveo" iz TP u TSP i usporilo se oko 5-6 puta (!!!). Ako se dobro
-> sećam, glavni razlog je bila sporija (ali preciznija) funkcija RND-a u
-> TSP-u.
To nema veze sa alatom, kao što si sam pojasnio. Primjer koji mi je dao
Janev je čist algoritam, jedino što se poziva iz biblioteke je ispis u
sekvencijalnu datoteku.
--
[In Case of Fire, Log off Promptly]
pascal.557dragisha,
-> i dalje bude "strog" jezik, za razliku od C-a. U taj test uložio sam
-> nekih mesec dana vremena, plus pare za kupovinu (verovali ili ne :) dve
-> implementacije Module (Logitech i JPI). Završio sam teško razočaran kako
Sjećam se pomalo tog testa, čini mi se da si imao TS 2.nešto. Razlika
između TS 2 i 3 je kao između TP 4.5 i BP 7.0, otprilike.:)
-> i sitnih prednosti (recimo, mogućnost generisanja .OBJ fajlova, za
-> razliku od "slepog creva" kao što je TPU) ali je ono sa minus strane
-> daleko pretezalo nad onim sa plus strane. Onda sam uradio potreban broj
-> XRD-ova
Koji je to broj bio, da se podsjetimo? I šta je bilo na minus strani kad
je toliko preteglo?
-> Pre jedno tri godine želeo sam da dam šansu Moduli 2. Mislio sam da je
Kad vidim šta misliš o 4dos, telemate i sličnima i koliko radiš u
Klipanu, možda je i dobro za naše malo društvo što si se obeshrabrio "na
vrijeme".:))
--
[OOPS: Not just for klutzes anymore]
pascal.559dejanr,
>> > U taj test uložio sam nekih mesec dana vremena, plus pare za
>> > kupovinu (verovali ili ne :) dve implementacije Module (Logitech
>> > i JPI). Završio sam teško razočaran kako
>>
>> Sjećam se pomalo tog testa, čini mi se da si imao TS 2.nešto.
Imao sam tekuće verzije svih kompajlera koje su postojale na tržištu.
Teško sam mogao porediti ondašnji TP sa nekom M2 koja će da izađe kroz
tri godine ;)
>> I šta je bilo na minus strani kad je toliko preteglo?
Već N puta sam rekao, ali ajmo još jednom:
(1) sporije kompajlira (u odnosu na tada aktuelni TP)
(2) pravi duži EXE fajl (u odnosu na tada aktuelni TP)
(3) EXE fajl se sporije izvršava ( -"- )
Meni više od toga ne treba.
Da bih prešao na tu platformu, uslov bi bio da po sva tri pomenuta uslova
ona postiže *znatno* bolje rezultata.
>> Kad vidim šta misliš o 4dos, telemate i sličnima i koliko radiš u
>> Klipanu, možda je i dobro za naše malo društvo što si se obeshrabrio
>> "na vrijeme".:))
Da... ovako nema ko da vam razbije iluzije o tome na šta ste sebe
osudili ;>
Inače, što se "klipana" tiče, ja ne krijem da kada programiram, uglavnom
programiram *za pare*. Dakle, najbolji jezik je onaj koji mi omogućava da
to što radim obavim najlakše, najbrže i sa najmanje problema. Kada bi jednom
programiranje na M2 bilo isplativije od programiranja na Clipper-u i C-u
(prema ranije pomenutim uslovima), o'ma bi prešao na nju.
pascal.560vitez.koja,
#=> Slijedeći gornju logiku, pravi izbor je asembler jer
#=> tamo BAŠ sve možeš (i moraš, BTW:)) da uradiš direktno.
Naravno, asembler je pravo rešenje :) Svrha kompajlera je lakše pisanje
programa, a ne "bolji mašinac od mašinca" ;)
pascal.561niklaus,
(:> Mada se može desiti i obrnuto. Ja sam moj seminarski rad u Petnici
(:> "preveo" iz TP u TSP i usporilo se oko 5-6 puta (!!!). Ako se
(:> dobro sećam, glavni razlog je bila sporija (ali preciznija)
(:> funkcija RND-a u TSP-u.
Šta si pravio? Pogađanje brojeva? (;
(:niklaus:)
pascal.562dragisha,
-> Imao sam tekuće verzije svih kompajlera koje su postojale na tržištu.
-> Teško sam mogao porediti ondašnji TP sa nekom M2 koja će da izađe kroz
-> tri godine ;)
Pitao sam te za verziju da bih sam pokušao da se prisjetim kako je to
zaista izgledalo i da uradim sam poređenja. Ti si tada dao jedan primjer, a
poznata je stvar kako se gleda na takve testove, tj. kako se komentarišu
reklame u kojima se da jedan primjer i tu je kraj.
-> >> Kad vidim šta misliš o 4dos, telemate i sličnima i koliko radiš u
-> >> Klipanu, možda je i dobro za naše malo društvo što si se obeshrabrio
-> >> "na vrijeme".:))
->
-> Da... ovako nema ko da vam razbije iluzije o tome na šta ste sebe
-> osudili ;>
? Trudio sam se, ali ovo je zaista neprobojno za mene. Šta s' hotio
rijet?:)
--
[Bill Gates, have 'em write _real_ code...]
pascal.563dejanr,
>> > Imao sam tekuće verzije svih kompajlera koje su postojale na tržištu.
>> > Teško sam mogao porediti ondašnji TP sa nekom M2 koja će da izađe kroz
>> > tri godine ;)
>>
>> Pitao sam te za verziju da bih sam pokušao da se prisjetim kako je to
>> zaista izgledalo i da uradim sam poređenja.
Tekstovi su objavljeni u "Računarima" 52, 54 i 55. Mislim da je JPI Modula
2 bila u verziji 1.12, Logitech modula 2 3.30 a Turbo Pascal 5.0. Možda
sam kod neke od tih cifara pogrešio, teško se setiti precizno posle četiri
godine.
Razlike nisu bile takve da bi se uopšte moglo govoriti o nijansama. Recimo,
TP je prevodio pola sekunda, Logitech pola minuta a JPI "negde između",
recimo 10-15 sekundi. TP je napravio duplo kraći EXE od JPI, i izvršavao
se valjda 3 puta brže. Međusobno poređenje dve Module pokazalo je da JPI
brže prevodi, ali daje sporiji kod.
Programi su takođe isprobani na velikom projektu, reda megabajt izvornog
koda. Komercijalne biblioteke namenski pisane za Turbo Pascal, Logitech
i JPI modulu 2. Odnosi što se tiče brzine prevođenja bili su još bolji,
u korist Turbo Pascala.
>> tj. kako se komentarišu reklame u kojima se da jedan primjer i tu je
>> kraj.
Reklama je ono što daje proizvođač, ovo je bio nezavisan i nepristrasan
tekst. Izvoli nađi bilo kakav primer u kome se pokazuju suprotni odnosi.
pascal.564lovro,
Kako da proveravam da li su stisnuta dva dugmeta istovremeno:
strelica gore i strelica desno, na primer.
Lovro
pascal.565peca.st,
!-> Kako da proveravam da li su stisnuta dva dugmeta istovremeno:
!-> strelica gore i strelica desno, na primer.
Zar je moguće stisnuti dva dugmeta _istovremeno_ ?
(a da to nije kombinacija sa alt ili ctrl)
Mislim da je jedini način da gledaš vremenski razmak između pritiska
na ta dva tastera, pa ako je manji od zadatog epsilon ;>>>
onda su pritisnuti "istovremeno".
Peđa.
pascal.566mjova,
> Kako da proveravam da li su stisnuta dva dugmeta
> istovremeno: strelica gore i strelica desno, na primer.
moraš napraviti novu int 9 rutinu.
pascal.567eagle,
> Kako da proveravam da li su stisnuta dva dugmeta istovremeno:
> strelica gore i strelica desno, na primer.
Ako ne postoji bolji način, možeš da dodeliš svakom tasteru
po jedan ON/OFF flag za proveru da li je pritisnut ili ne.
Onda na početku programa postaviš sve na OFF, i okačiš na
int 9 proceduru koja ih postavlja/ukida.
pascal.568lovro,
Od cega je kod 9Ch (inline($9C);)?
Koja vrednost ostaje u portu[$60] posle otpustanja dugmeta?
A za proveravanje da li su stisnuta dva odjednom ima sledeci problem:
| Port[$60]
-----------------------------------+------------------------------
pritisnem 'gore' | 72
drzim 'gore', pritisnem 'levo' | 75
otpustim 'gore' | 75
-----------------------------------+------------------------------
Kao sto vidimo, iz porta 60 se ne vidi da li je otpusteno dugme
koje je prvo pritisnuto. Medjutim, da sam u trecem koraku otpustio
'levo' umesto 'gore', u portu bi se pojavio neki _teskoprovaljivi_
bajt...
Lovro
pascal.569v.nesic,
> Mislim da je jedini način da gledaš vremenski razmak između pritiska
> na ta dva tastera, pa ako je manji od zadatog epsilon ;>>>
Jel' si ti nekada igrao neku igricu preko tastature?
pascal.570eagle,
> Od cega je kod 9Ch (inline($9C);)?
pushf
> Koja vrednost ostaje u portuŠ$60Ć posle otpustanja dugmeta?
Vrednost veća za 128 od vrednosti za isto pritisnuto.
> A za proveravanje da li su stisnuta dva odjednom ima sledeci
> problem: Kao sto vidimo, iz porta 60 se ne vidi da li je
> otpusteno dugme koje je prvo pritisnuto. Medjutim, da sam
> u trecem koraku otpustio 'levo' umesto 'gore', u portu bi
> se pojavio neki _teskoprovaljivi_ bajt...
Vidi se u jednom trenutku, i onda tastatura nastavi da šalje
signal za ono drugo (poslednje pritisnuto). Dovoljno da ga
tvoja procedura iskljuci.
pascal.572bearboy,
>> Mada se može desiti i obrnuto. Ja sam moj seminarski rad u
>> Petnici "preveo" iz TP u TSP i usporilo se oko 5-6 puta (!!!).
>> Ako se dobro sećam,
>
> Idi bre Atila, pa to mi nikada nisi pokazo...
Jesam, zar se ne sećaš koliko sam jadikovao Ma$ketu zbog toga ? Mada pazi
ovo - kad sam doneo programčiće kući, ponovo ih iskompajlirao (ovog puta na
moju mašinu, tj. 486/33), TS verzija je bila oko 10-20% brža (uz zadržanu veću
preciznost slučajnih brojeva).
pascal.573bearboy,
> (:> Mada se može desiti i obrnuto. Ja sam moj seminarski rad u
> Petnici (:> "preveo" iz TP u TSP i usporilo se oko 5-6 puta
> (!!!). Ako se (:> dobro sećam, glavni razlog je bila sporija
> (ali preciznija) (:> funkcija RND-a u TSP-u.
>
> Šta si pravio? Pogađanje brojeva? (;
Još gore - simulacija telekomunikacionog kanala & testiranje algoritama za
detekciju & korekciju grešaka :)
pascal.574bearboy,
> 2 bila u verziji 1.12, Logitech modula 2 3.30 a Turbo Pascal
> 5.0. Možda
Vreme je za novo poređenje. v1.12 - Brrrrr :)
pascal.575pedjak,
> moraš napraviti novu int 9 rutinu.
Hm, a kako pročitati sa porta 60h da su pritisnuta dva tastera ?
Uopšte, može li tastatura da pošalje takvu informaciju ?
pascal.576dzakic,
> Hm, a kako pročitati sa porta 60h da su pritisnuta dva tastera ?
> Uopšte, može li tastatura da pošalje takvu informaciju ?
Tastatura generiše prekid (int 9) u trenutku kad taster pritisneš
i u trenutku kad ga pustiš. Na portu se u prvom slučaju nađe scan
vrednost pritisnutog tastera a u drugom slučaju (otpuštanje) ista
vrednost samo sa setovanim sedmim bitom (+128). Treba dakle da
napraviš tabelu (kao što je neko ovde pomenuo), postaviš sve na
početku na 0 i okačiš se na int 9. Kad primiš vrednost manju od 128,
setuj odgovarajući element niza, a ako je na portu 60h setovan sedmi
bit, vrati ga na nulu. Kasnije u programu testiraj da li su ta_i_ta
vrednost istovremeno postavljene na keca. Tako znaš da su oba
tastera u tom trenutku pritisnuta. Na ovu foru i bios vodi računa o
shift, ctrl i alt.
Obrati samo pažnju na 'sive' tastere koji kod extended tastatura
znaju da šalju po čitavu povorku signala, najčešće sa prefixom E0,
ili sl. već sam zaboravio. žini mi se da je taster za pauzu
rekorder: 4 int-a 9 za jedno stiskanje tastera i 4 za otpuštanje.
zak
ps. Srećna Nova!
pascal.577eagle,
> Hm, a kako pročitati sa porta 60h da su pritisnuta dva tastera
> ? Uopšte, može li tastatura da pošalje takvu informaciju ?
Ne može. Evo ide mali primer preuzete int9 procedure, prikazuje
sva četiri pritisnuta arrows tastera a da pritom ne smeta ostatku
programa (može se držati pritisnuta strelica i kucati u pozadini).
Jedino pravi probleme u slučajevima kad su istovremeno pritisnuti
levi i desni sivi taster, inače za bele (2,4,6,8) radi normalno.
arrows.zippascal.578bearboy,
>> Mislim da je jedini način da gledaš vremenski razmak između
>> pritiska na ta dva tastera, pa ako je manji od zadatog epsilon
> ;>>>
>
> Jel' si ti nekada igrao neku igricu preko tastature?
E, to je već druga priča (video sam negde rutine za to) - kad se pritisne
taster za gore, to se zabeleži negde, a ako se pusti, mark obriše. E sad,
ako je markiran taster na gore, a stigne signal za još neki taster, znači
da su pritisnuti odjednom. Nadam se da je bilo razumljivo :)
pascal.579andrejt,
Kako iz Turbo Pacala 6.0 napraviti .OBJ fajl ?
pascal.580dejanr,
>> Kako iz Turbo Pacala 6.0 napraviti .OBJ fajl ?
Nema načina.
pascal.581lucas,
>> Kako iz Turbo Pacala 6.0 napraviti .OBJ fajl ?
Nikako!
pascal.582kriss,
Da li neko zna da li se pri 'linkovanju' unita u EXE ubacuju sve
procedure, ili je kompajler dovoljno inteligentan pa 'vidi' one
koje se u programu koriste, i samo njih 'vadi'?
Naravno, TP 6.0 :)
pascal.583niklaus,
(:> Kako iz Turbo Pacala 6.0 napraviti .OBJ fajl ?
1) Iz TP verzije 6.0, ja (za sada) nisam uspeo, ali moguće je za 5.0-
verzije. Modifikovati .PAS fajl ubacivanjem INTERFACE dela (samo deklaracije
svih procedura/funkcija) i službene reči IMPLEMENTATION.
2) Nakon toga sa SEZAMa skinuti fajl R:ĐIBMPCĐPASCAL.TPU2ASM.ZIP, i
uz njegovu pomoć kovertovati .TPU u .ASM
3) TASMovati .ASM u .OBJ.
4) Voila!
(:niklaus:)
ps Program je napravila već veoma poznata firma u domenu TP biblioteka
TurboPower, negde sredinom '89. Sigurno je da su razvijene i verzije za
novije formate .TPU fajlova. Registracijom (ili sličnom metodom tipa
'money giveaway') ćeš verovatno doći do istih. (:
pascal.584bole,
HI!
Imam jedno interesantno pitanje (!) i TRAZIM KONKRETAN ODGOVOR ne neke ovo
ovo.. :)
Ovako, ocu da recimo na neki EXE zalepim parce koje ce se pustati pre svega,
namena:
Da recimo imam neki SJKL program i ocu kada ga pustim da se ispise DOBROJTRO pa
da nastavi dalje... :)
nesto kao virus ali da ne bude rezidentno...
:)
e sada lepo na posao, ja odo da se odmaram u Soko Banju vi lepo resite i
iznenatite me.. recimo neka mi to bude za novu godinu ili za rodjendan!
CU!
pascal.585dejanr,
>> Da li neko zna da li se pri 'linkovanju' unita u EXE ubacuju sve
>> procedure, ili je kompajler dovoljno inteligentan pa 'vidi' one
>> koje se u programu koriste, i samo njih 'vadi'?
Dovoljno je inteligentan, zato mu Borland tepa "Smart linker". Tako
bar piše u uputstvu, ali nisam nešto mnogo detaljno proveravao.
pascal.586vvelisavljev,
BP 7.0
Ako u Borland Pascalu 7.0 stavim compiler direktivu
Target na Protected, imam izvesnih problema sa memorijom.
Veći program koji usput koristi NEW i DISPOSE naredbe pri samom
startovanju javlja Runtime error 216 (General Protection fault).
Manje programe sam probao da kompajliram ovako i na prvi pogled rade
dobro. Da li možda treba da intervenišem na nekim kompajler
prekidačima?
Da li je ikako moguće korišćenje prekidnih
tačaka i postupnog izvršavanja programa ako se program kompajlira u
protected modu?
Primetio sam da BP ne trpi baš druge menadžere za memoriju. Kakva su
vaša iskustva?
pascal.587ognjen,
Kako reciti citanje recorda iz fajla?
Naime, sta sam ja probao:
---------------------------
type ReadLin = record
broj: integer;
str1: string[8];
str2: string[9];
str3: string[10];
end;
var fi: file of ReadLin;
Linija: ReadLin;
pomocni: String;
---------------------------
I, kako u programu da mu kazem da procita jedan record, ili da ga
"pitam" sta se nalazi u stringu STR2 na tekucem recordu ili
slicno...?
pascal.588dejanr,
>> I, kako u programu da mu kazem da procita jedan record,
>> ili da ga "pitam" sta se nalazi u stringu STR2 na
>> tekucem recordu
Recimo da bi učitao slog broj 10 (broji se od nula):
seek(fi, 10);
read(fi, linija);
pomocni:=linija.str2;
pascal.589predragd,
> Veći program koji usput koristi NEW i DISPOSE naredbe pri
> samom startovanju javlja Runtime error 216 (General
Da li je tvoj program izvršio te naredbe ili je pukao pre
njih. Meni su se 216 greške najčešće javljale kod programa,
pisanih za real mod, koji direktno pristupaju memoriji. Ako hoćeš
pošalji deo source-a na kom program puca, pa ćemo da vidimo.
> Da li možda
> treba da intervenišem na nekim kompajler prekidačima?
Do sada nisam imao uspeha sa njima. Uvek se ispostavilo da je
problem u mom programu (nepoznavanju DPMI-a).
> Da li je ikako moguće korišćenje prekidnih
> tačaka i postupnog izvršavanja programa ako se program
> kompajlira u protected modu?
Ako koristiš TDX moguće je.
> Primetio sam da BP ne trpi baš druge menadžere za
> memoriju.
HIMEM, QEMM ili bez ikakvih memory manager-a, BP mi do sada
nije pravio probleme ni sa jednim od navedenih.
Peđa.
pascal.590niklaus,
(:> Veći program koji usput koristi NEW i DISPOSE naredbe pri samom
(:> startovanju javlja Runtime error 216 (General Protection fault).
Evo šta kaže BPov help...
┌─
│ ┌───────────────────────────┐
│ │ General Protection fault │
│ └───────────────────────────┘
│
│ his error results if you try to access memory that is not legal for your
│ pplication to access. The operating system halts your application and tells
│ ou that a general protection (GP) fault occurred, but your system does not
│ rash.
│
│ he following practices cause GP faults:
│
│ ■ Loading constant values into segment registers
│
│ ■ Performing arithmetic operations on segment registers of selectors
│
│ ■ Using segment registers for temporary storage
│
│ ■ Writing to code segments
│
║║ ■ Accessing memory beyond the local address space given to your application
│
│ ■ Derefencing nil pointers
└─
Verovatno si ovo video i sam, al' hteo_ne_ hteo prekršio si neki od ovih
zakona. (:
Tipujem na označeni...
(:> Primetio sam da BP ne trpi baš druge menadžere za memoriju. Kakva
(:> su vaša iskustva?
Ja se u principu trudim da program najpre savršeno radi u 'Real' modu, a
tek onda ga kompajliram za 'Protected' mod.
Preporučujem ti da koristiš QEMM zajedno sa DPMI dodatkom za DPMI.
(:niklaus:)
pascal.591niklaus,
(:> var fi: file of ReadLin;
(:> Linija: ReadLin;
(:> pomocni: String;
(:> I, kako u programu da mu kazem da procita jedan record, ili da ga
(:> "pitam" sta se nalazi u stringu STR2 na tekucem recordu ili
(:> slicno...?
Read( fi, linija );
pomocni := linija.str2; (* Slično ide i za ostala polja u slogu *)
(:niklaus:)
pascal.592vvelisavljev,
> Do sada nisam imao uspeha sa njima. Uvek se ispostavilo da
> je problem u mom programu (nepoznavanju DPMI-a).
DPMI ?? Da li ima negde na Sezamu nešto detaljnije o ovome? žega bi
trebalo da se pridržavam u svom programu?
> Ako koristiš TDX moguće je.
Ne, koristim BP.EXE.
>> Primetio sam da BP ne trpi baš druge menadžere za
>> memoriju.
>
> HIMEM, QEMM ili bez ikakvih memory manager-a, BP mi do
> sada nije pravio probleme ni sa jednim od navedenih.
Izgleda da nisam dobro objasnio šta me muči. Nešto mi olako BP javlja
poruke da nema dovoljno memorije i sl. Imam 2 MB RAMa, a moj exe
kompajliran u Real modu ima oko 130 kB a u protected oko 150 kB.
Najbolje mi radi bez ikakvih menadžera, čak i bez HIMEMa.
Kako treba da izgleda $M direktiva za protected mod? U real modu mi
izgleda ovako : {$M 32768,0,131072}.
pascal.593vvelisavljev,
> ║║ ■ Accessing memory beyond the local address space given
> to your application
> Verovatno si ovo video i sam, al' hteo_ne_ hteo prekršio
> si neki od ovih zakona. (:
Da video sam. :( Po mom prevodu to znači: "Pristup memoriji pre nego
što je lokalni adresni prostor dodeljem mojoj aplikaciji." Tako
nekako, ako sam dobro preveo. (?) Pa, kako ovo da izbegnem?
> Ja se u principu trudim da program najpre savršeno radi u
> 'Real' modu, a tek onda ga kompajliram za 'Protected' mod.
U tome i jeste problem što on radi u Real modu, sad, dal je savršen
ili ne. (?)
pascal.594vvelisavljev,
> BP 7.0
Trebao sam biti nešto konkretniji.
Program javlja:
Runtime error 216 at 0002:31B2
pre nego što izvrši i jednu naredbu programa. :(
Ustvari, i nije baš da ne izvši ni jednu nardbu. Našao sam grešku.
:) :( :) :( :) :(
Greška je u junitu TPW60 i to u proceduri TPWfill koja se
izvršavala u inicijalnom delu junita. Procedura je definisana kao
external. Verovatno da gađa direkt video memoriju i da ovaj zbog toga
javlja grešku. :(
Šta da radim? Da bacim TPW60 ili da ispravljam greške. Da li da
napišem svoje ekvivalentne procedure za prozore ili ima nešto slično
već napisano. Do sada nisam koristio ništa iz TVizije. :) Da li moguće
bezbolno iskoristiti par procedura za rad sa prozorima iz TVa? Bio bih
veoma zahvalan ako bi mi neko ovde napisao primerčić za pozivanje
takvih procedura.
pascal.595dejanr,
>> DPMI ?? Da li ima negde na Sezamu nešto detaljnije o ovome? žega bi
>> trebalo da se pridržavam u svom programu?
Imaš u direktorijumu INFO fajl DPMI_TXT.ZIP (ili tako nešto) sa DPMI
specifikacijom. Takođe, mogli bi te zanimati tekstovi iz prošlih i
ovih "Računara" koji se upravo time bave.
pascal.596eagle,
> Šta da radim? Da bacim TPW60 ili da ispravljam greške. Da li da
> napišem svoje ekvivalentne procedure za prozore ili ima nešto
> slično već napisano. Do sada nisam koristio ništa iz TVizije.
> Da li je moguće bezbolno iskoristiti par procedura za rad sa
> prozorima iz TVa?
Ili će ceo program biti u TV ili ništa od toga.
Ako ćeš se baviti TV-om slobodno baci TPW60 i njemu slične.
pascal.597ilazarevic,
> I, kako u programu da mu kazem da procita jedan record, ili da ga
> "pitam" sta se nalazi u stringu STR2 na tekucem recordu ili
> slicno...?
Evo ti primer kako da otvoriš fajl i čitaš iz njega:
š$I-ć
Assign(fi,'proba.dat');
Reset(fi);
š$I+ć
if IOResult<>0 then
begin
WriteLn('Greška pri otvaranju fajla!');
Halt(1);
end;
Read(fi,linija);
pomocni:=linija.str1;
Izvini na juskiju.
pascal.598kriss,
Ux, malo sam se igrao sa TP 6.0 i izgleda da ipak nije toliko
pametan :( Međutim, nadam se da grešim :)
Sledi izvod iz .MAP fajla (program je kompajliran sa TPCX) i
koliko vidim, tu se nalazi ceo CRT unit, a ne samo delovi koji se
koriste u programu. E sad, opet se nadam da grešim. Međutim:
Start Stop Length Name Class
00000H 004B7H 004B8H TRTMRT CODE
004C0H 0051FH 00060H MAINUNIT CODE
00520H 017E5H 012C6H TPWX CODE (poboljšani tpw60)
017F0H 037A6H 01FB7H MMAGACIN CODE
037B0H 041C3H 00A14H MAGUNIT CODE
041D0H 047E3H 00614H CRT CODE
047F0H 05BD2H 013E3H SYSTEM CODE
05BE0H 06163H 00584H DATA DATA
06170H 0A16FH 04000H STACK STACK
0A170H 0A170H 00000H HEAP HEAP
Address Publics by Value
0000:004F HEADER
0000:006A MKWIN
0000:01C4 MAG
.
.
.
041D:0000 č
041D:016B TEXTMODE
041D:0180 WINDOW *
041D:01C0 CLRSCR
041D:01DA CLREOL *
041D:01EE INSLINE *
041D:01F3 DELLINE *
041D:0213 GOTOXY
041D:023F WHEREX *
041D:024B WHEREY *
041D:0257 TEXTCOLOR
041D:0271 TEXTBACKGROUND
041D:0289 LOWVIDEO
041D:028F HIGHVIDEO
041D:0295 NORMVIDEO
041D:029C DELAY
041D:02C7 SOUND
041D:02F4 NOSOUND
041D:02FB KEYPRESSED
041D:030D READKEY
041D:032F ASSIGNCRT *
...
Procedure sa zvezdicama *sigurno* nisu korišćene, ali ipak su tu,
tj. zauzimaju prostor (!?!). Zato sam i pitao pre par dana da li
je kompajler dovoljno _smart_ pa da ume da profiltrira kôd.
Međutim, pošto se ne razumem baš puno u te MAP fajlove ;) ostaje
na nekom ko se razume. :) Odgovor mi je važan jer u slučaju da je
pred AmNoM ne_smart kompajler, odoh da pravim svoj crt ...
pascal.599kriss,
Ipak je glup.
Dokaz je zakačen, da ne ovako, pa ko hoće nek se uverava.
P.S. A sad na KrissCrt ;)
glupi_tp.zippascal.600peca.st,
Kako najbrže staviti pixel na ekran u rezoluciji 640*480*256?
Mem Š$a000:xĆ radi samo do određene granice, zato što, naravno,
obuhvata samo jedan segment od 64k. Dakle, koje su adrese ostalih
segmenata video memorije?
Peđa.
pascal.601markom,
■■■ DPMI ?? Da li ima negde na Sezamu nešto detaljnije o ovome?
■■■ žega bi trebalo da se pridržavam u svom programu?
Bilo je u nekom od prošlih Računara ...
Marko
pascal.602markom,
■■■ U tome i jeste problem što on radi u Real modu, sad, dal je
■■■ savršen ili ne. (?)
Reci mi iskreno, da li si IKADA vide savršen program?
Marko
pascal.603markom,
■■■ external. Verovatno da gađa direkt video memoriju i da ovaj
■■■ zbog toga javlja grešku. :(
žekaj, stani malo... Kaži mi da ako sa BP 7.x program prevedeš u protected
modu, i iz njega probaš direktno da gađaš video memoriju, ovaj će da pukne ?!?
Ako je to istina onde ću morati da pišem 99% programa iz početka :(((
Marko
pascal.604peca.st,
!-> Procedure sa zvezdicama *sigurno* nisu korišćene, ali ipak su tu,
!-> tj. zauzimaju prostor (!?!). Zato sam i pitao pre par dana da li
!-> je kompajler dovoljno _smart_ pa da ume da profiltrira kôd.
O ovome je mislim već bilo reči... Uglavnom, ako se dobro sećam,
zaključili smo da crt unit ima neku svoju inicijalizaciju i obavezno
ubacuje parče koda. Napiši program koji izgleda ovako:
uses crt;
begin
end.
Onda napiši ovo: uses dos; begin end.
I na kraju: begin end.
Videćeš da su posledna dva .exe ista po dužini, a prvi je nešto duži.
Peđa.
pascal.605markom,
■■■ pred AmNoM ne_smart kompajler, odoh da pravim svoj crt ...
Ajd' pa ga okači ;))
Marko
pascal.606dejanr,
>> Ux, malo sam se igrao sa TP 6.0 i izgleda da ipak nije toliko
>> pametan :( Međutim, nadam se da grešim :)
>> Sledi izvod iz .MAP fajla (program je kompajliran sa TPCX) i
>> koliko vidim, tu se nalazi ceo CRT unit, a ne samo delovi koji se
Ne grešiš, što se CRT unit-a tiče. Ali, mislim da je on, kao sistemski
unit, ipak priča za sebe. Probaj sa nekim svojim procedurama, recimo
napraviš par potprograma koji u sebi imaju neke karakteristične tekstove
ali se nikada ne pozivaju, prevedeš pa pogledaš ima li tih tekstova u
EXE-u.
Javi šta si ustanovio... da vidimo lažu li u dokumentaciji :)
pascal.607kriss,
I još samo nešto O:)
Da li postoji tpu2obj. Važno mi je da bude OBJ kako bi se
sačuvale kompletne f-je (mislim sa sve imenima)? Tpu2asm iz dira
radi samo sa tp 5.0 :(
pascal.608markom,
■■■ Javi šta si ustanovio... da vidimo lažu li u dokumentaciji :)
Ne znam šta kažu u dokumentaciji ;>>, ali nema ih :)
Marko
pascal.609ognjen,
)-> Read( fi, linija );
)-> pomocni := linija.str2;
Ne radi. :(
Daklem, procita ga Ok, ali kad mu kazem writeln(linija.str2)
on ispise neke gluposti... Recimo umesto 3 karaktera, porcita 10
i ispise ih 4 puta... ???
pascal.610andrejt,
Pa imas binobj nisam mnogo gledao ali trevalo bi
da radi .
pascal.611kriss,
Uh, moraću da se izvinim TP-u :)
Glup je, al samo za crt. Inače je kompajler pametan, sad je
provereno. :) MeĐuTiM ;) nije mi jasno zašto je tako. Neko je
rekao da je CRT sistemski unit, međutim po tpumover-u su
sistemski i DOS i PRINTER, pa ih ipak ne 'gura' u .EXE? Evo šta
kaže isti:
D:ĐTPĐUTILS>tpumover d:ĐtpĐturbo.tpl
TPU Mover Version 6.00 Copyright (c) 1987,90 Borland International
Unit Code Data Uses
SYSTEM 21585 676
OVERLAY 1855 26 SYSTEM
CRT 1556 20 SYSTEM
DOS 1594 6 SYSTEM─┐
PRINTER 54 256 SYSTEM─┴ i ovi su/koriste system?
P.S. E vala ću biti uporan ;)
pascal.612vvelisavljev,
> žekaj, stani malo... Kaži mi da ako sa BP 7.x program
> prevedeš u protected modu, i iz njega probaš direktno da
> gađaš video memoriju, ovaj će da pukne ?!?
To je samo pretpostavka. Zbog čega bi drugog pukla procedura koja
puni deo ekrana jednim karakterom?
pascal.613markom,
■■■ To je samo pretpostavka. Zbog čega bi drugog pukla procedura
■■■ koja puni deo ekrana jednim karakterom?
Ako je iz TPW6, onda me ne čudi, jerbo je to PUNO bagova, ali direktno gađanje
video memorije je osnova 60% mojih programa pisanih u TP 6 !! Ako to ne radi u
sedmici, ostadoh ja na 6 :))
Marko
pascal.614markom,
■■■ Daklem, procita ga Ok, ali kad mu kazem
■■■ writeln(linija.str2) on ispise neke gluposti... Recimo umesto
■■■ 3 karaktera, porcita 10 i ispise ih 4 puta... ???
žekaj malo, nadam se da si tu promenljivu FI, definisao kao FILE OF type, a
ne kao TEXT, jerbo ako si je tako definisao nije ni čudo što ti ne radi ;)
Marko
P.S. Uz poruku je program koji SIGURNO radi!
P.P.S. Naravno, podrazumeva se da fajl nije prazan :)
slog.paspascal.615ilazarevic,
> Daklem, procita ga Ok, ali kad mu kazem writeln(linija.str2)
Ovo ne može da radi zato što je fajl sastavljen od rekorda. Dakle, ti možeš
da upišeš samo jedan ceo rekord, čijim elementima dodeljuješ vrednosti.
Da je tekst fajl, moglo bi.
pascal.616isekulovic,
Da li je moguće kopirati sadržaj jedne grafičke stranice na drugu?
Razmišljao sam o kopiranju video memorije, ali ne znam kako bi
to išlo na ega/vga.
I šta znači kad RegisterBGIFont javi grešku -13 InvalidFont, zaglavlje
fonta nije prepoznato ?!?!
pascal.617paki,
> Glup je, al samo za crt. Inače je kompajler pametan, sad je
> provereno. :) MeĐuTiM ;) nije mi jasno zašto je tako. Neko je
> rekao da je CRT sistemski unit, međutim po tpumover-u su
> sistemski i DOS i PRINTER, pa ih ipak ne 'gura' u .EXE? Evo šta
Da nije zbog toga što CRT ima i inicijalizaciju?
pascal.618vvelisavljev,
> Ako je iz TPW6, onda me ne čudi, jerbo je to PUNO bagova,
> ali direktno gađanje video memorije je osnova 60% mojih
> programa pisanih u TP 6 !! Ako to ne radi u sedmici,
> ostadoh ja na 6 :))
To ne radi jedino ako u BP kompajliraš u protected modu. Ako radiš sa
turbo ili ako u BP staviš Real sve će raditi isto kao i u TP 6.0.
pascal.619peca.st,
!->> Daklem, procita ga Ok, ali kad mu kazem writeln(linija.str2)
!->
!-> Ovo ne može da radi zato što je fajl sastavljen od rekorda. Dakle,
!-> ti možeš da upišeš samo jedan ceo rekord, čijim elementima
!-> dodeljuješ vrednosti. Da je tekst fajl, moglo bi.
Il, nisi dobro video šta je napisao čovek. :)
Piše: writeln(linija.str2), dakle, nije u fajl, nego na ekran.
Peđa.
pascal.620markom,
■■■ To ne radi jedino ako u BP kompajliraš u protected modu. Ako
■■■ radiš sa turbo ili ako u BP staviš Real sve će raditi isto
■■■ kao i u TP 6.0.
Pa mene baš zanima da li mogu direktno da pucam u VM u protected modu, ako ne
može, je*em ti taj program koji prozore crta sa WriteLn ;)
Marko
pascal.621kriss,
˙˙ Da nije zbog toga što CRT ima i inicijalizaciju?
Misliš jedno Begin End. kao 'startujući deo'?
pascal.622peca.st,
!-> Misliš jedno Begin End. kao 'startujući deo'?
I nešto između tog Begin End. :)
To sam ti rekao u klubu, i mislim da je to u pitanju.
A šta tu radi - pojma nemam, verovatno nešto bitno, čim je tu. :)
Peđa.
pascal.623jovca.car,
/* Reci mi iskreno, da li si IKADA vide savrsen program?
Windows 3.1? ;))))))))
pascal.624markom,
■■■ Windows 3.1? ;))))))))
HAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHA, reče on ;>
Marko
pascal.625mzdravkovic,
Pisem jedno programce u Pascalu, ali zbog nedovoljnog znanja, potrebna
mi je pomoc. Kako da program bude rezidentan u memoriji i da se stalno
izvrsava ?
HVALA !
pascal.626andrejt,
===> Pisem jedno programce u Pascalu, ali zbog nedovoljnog znanja, potrebna
===>mi je pomoc. Kako da program bude rezidentan u memoriji i da se stalno
===>izvrsava ?
U memoriju ga ostavljas sa Keep.Rezidentni programi se izvrsavaju
tako sto se promeni vektorska tabela prekida,koja sadrzi adrese
procedura koje se izvrsavaju posle odredjenog prekida.
Recimo imas neku proceduru u tom tsru koja se zove
proc_1 i hoces da se ona izvrsava na int9(tastatura)
onda uradis :
Getintvec(9,@StaraProcedura); {Gde je StaraProcedura : Procedure}
Setintvec(9,@proc_1);{procedura koja se izvrsava na int9}
Keep(0);
Takodje je pametno posle izvrsenja proc_1 pustiti i StaraProcedura.
pascal.627markom,
■■■ Pisem jedno programce u Pascalu, ali zbog nedovoljnog znanja,
■■■ potrebna mi je pomoc. Kako da program bude rezidentan u
■■■ memoriji i da se stalno izvrsava ?
Koliko ja znam, sa KEEP ga napraviš rezidentnim, a to da se stalno izvršava mo-
žeš da postigneš tako što ćeš da napraviš jednu interapt proceduru koja će da
se izvršava recimo na svakom petom otkucaju sistemskog sata. Kako ovo uraditi
i ne znam baš najbolje ...
Marko
pascal.628dr.grba,
>> /* Reci mi iskreno, da li si IKADA vide savrsen program?
>>
>> Windows 3.1? ;))))))))
...
Trgom se prolomi uzvik.
"Tako je", povikaše seljaci, "ja i narod ćemo vikati!"
...
(;║■
pascal.629isekulovic,
Da li postoje neki neželjeni efekti ukoliko se umesto:
st:=copy(st,1,x);
uradi:
st[0]:=x;
ivan
ps
var st : string;
pascal.630andrejt,
Evo tebe da dopunim to se radi (valjda) sa INT 8.
(Mada postoje i neke funkcije za sat koje prate
ta otkucavanja ali ovako je najlakse)
pascal.631andrejt,
===>Da li postoje neki nezeljeni efekti ukoliko se umesto:
===>st:=copy(st,1,x);
===>uradi:
===>st[0]:=x;
Za copy bas i ne znam ali st[0]:=x; sigurno nista nece da
uradi zato sto(valjda) charovi u stringu idu od 1 do 255.
P.S.
Ali cini mi se da ti i ono st:=copy(st,1,x); nece raditi
(valjda nije ta sintaksa) pa posto verovatno oba ne rade
nista korisno nezeljenih efekata nece biti (u odnosu na
st := copy(st,1,x);
pascal.632predragd,
> DPMI ?? Da li ima negde na Sezamu nešto detaljnije o ovome?
INTER37*.*
> žega bi trebalo da se pridržavam u svom programu?
Da ne pristupaš direktno memoriji (ako baš moraš poželjno bi
bilo da pre toga konvertuješ segment adresu u descriptor, int
31h), da real mode interrupt-e pozivaš funkcijom koju sam nedavno
ostavio u ovoj temi.
Programi pisani u asembleru za real mode će morati pretrpeti
neke izmene. Moguće je da ima još nekih pravila kojih se treba
pridržavati, ali ja bar za sada nisam uspeo da ih pronađem.
> Izgleda da nisam dobro objasnio šta me muči. Nešto mi
> olako BP javlja poruke da nema dovoljno memorije i sl.
> Imam 2 MB RAMa, a moj exe kompajliran u Real modu ima oko
> 130 kB a u protected oko 150 kB. Najbolje mi radi bez
> ikakvih menadžera, čak i bez HIMEMa.
Da bi se uopšte pokrenuo BP zahteva minimum 2 Mb RAM-a, tako
da nije ni malo čudno što se BP buni. U ovakvoj sutuaciji
najbolje je raditi bez ikakvih menadžera i drajvera (ukoliko je
to moguće).
> Kako treba da izgleda $M direktiva za protected mod? U
> real modu mi izgleda ovako : š$M 32768,0,131072ć.
U protected modu se definiše samo veličina steka (max 64Kb).
Ostale dve stavke se ne uzimaju u obzir.
Peđa.
pascal.633predragd,
> Preporučujem ti da koristiš QEMM zajedno sa DPMI dodatkom
> za DPMI.
Kako ti je uspelo da nateraš QEMM-ov QDPMI da radi da BP-om.
Meni BP uvek pukne po startovanju i javi cd QDPMI sa nekom
porukom o grešci.
Peđa.
pascal.634predragd,
> žekaj, stani malo... Kaži mi da ako sa BP 7.x program
> prevedeš u protected modu, i iz njega probaš direktno da
> gađaš video memoriju, ovaj će da pukne ?!?
>
> Ako je to istina onde ću morati da pišem 99% programa iz
> početka :(((
Mislim da nećeš imati toliko posla oko prepravljanja programa.
Već sam to negde napomenuo, potrebno je samo konvertovati segment
adresu u descriptor.
INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
AX = 0002h
BX = real mode segment
Return: CF clear if successful
AX = selector corresponding to real mode segment (64K limit)
CF set on error
AX = error code (DPMI 1.0+) (8011h) (see AX=0000h)
Notes: multiple calls for the same real mode segment return the same selector
the returned descriptor can never be modified or freed
not supported by MS Windows 3.0 in Standard mode
Peđa.
pascal.635markom,
■■■ U protected modu se definiše samo veličina steka (max 64Kb).
U TP-u 6.0 ne može svih 64K, već _samo_ 65520 b :)
Marko
pascal.636markom,
■■■ Mislim da nećeš imati toliko posla oko prepravljanja
■■■ programa. Već sam to negde napomenuo, potrebno je samo
■■■ konvertovati segment adresu u descriptor.
Na žalost nisam te baš najbolje razumeo, ali ajde :(
Pazi ovo: Definišem promenljivu VM, tipa ARRAY[1..4000] OF BYTE na adresi
$B000:$8000, znači na adresi video memorije. Ako probam da pišem u taj niz, da
li će prijavljivati grešku ?
Marko
pascal.637markom,
■■■ st[0]:=x;
Ako ti je x integer, byte, ili slično, a to je iz datog primera očigldeno ;),
onda postoje :))
Moraš da napišeš st[0] := Chr(x), jer st[0] je char, a ne broj :)
Marko
pascal.638peca.st,
!-> Da li postoje neki neželjeni efekti ukoliko se umesto:
Ne bi trebalo, pod uslovom da je x <= Length (st)
Ako je veće, onda se ćeš u ostatku stringa dobiti razno đubre.
Inače, promena dužine stringa preko stŠ0Ć je, po meni, sasvim
legalan put.
Peđa.
pascal.639dzakic,
> Da li postoje neki neželjeni efekti ukoliko se umesto:
> st:=copy(st,1,x);
> uradi:
> st[0]:=x;
Apsolutno ne! Drugi metod je daleko brži, kraći, meni i pregledniji.
Nedavno sam gledao neke sorseve junita koje je sâm Borland pablikovao
(ne mogu sad da se setim o čemu se radi) i vidim da i oni obilato
koriste trikove tipa:
inc(s[0]);
s[length(s)]:=' '; umesto s:=s+' ';
Drugi način je za početnike, kompajler tu poziva procedure za
konkatenaciju ;) stringova, u code segmentu čuva konstantni string
' ' i brdo nepotrebnih stvari oko sitnice kao što je ova. Prvi način
je daleko kraći, bukvalno se uradi jedan inc na bajt koji čuva
dužinu stringa i na kraj se upiše potreban znak. Ne treba se plašiti
'funkcije' length koja izgleda rogobatno kad se kuca, njom se samo
čita nulti bajt stringa, nije potprogram kao što mora da bude u C-u.
Jedina razlika između ove dve stvari je što ne postoji kontrola
dužine dobijenog stringa. U drugom slučaju se sigurno ne bi desilo
ništa ružno: dodavanje na već pun string ne bi ga izmenilo, dok ako
se ti onim s[0]:=chr(x) zaletiš pa upišeš dužinu veću od dozvoljene
(deklarisane), može da bude svašta. Ukoliko si siguran šta radiš i
naknadno proveravaš dužinu novodovijenog stringa, nema nikakvih
problema.
pascal.640dzakic,
>> st:=copy(st,1,x);
>> st[0]:=x;
Sad nešto gledam. Ovo će da radi samo ako string st treba
skratiti. Ukoliko je x veće od prethodne dužine st, nije
svejedno. Pretpostavljam da ti je jasno zašto.
pascal.641dejanr,
>> Da li postoje neki neželjeni efekti ukoliko se umesto:
>> st:=copy(st,1,x);
>> uradi:
>> st[0]:=x;
Treba chr(x), inače će da prijavi grešku. Ako se to ne računa,
metod ne da ne pravi štetu, nego izaziva ubrzanje. Koristi ga
i Borland u raznim Toolkit-ima.
Jedino moraš biti oprezan da tako ne "produžiš" string, pošto
će "rep" imati slučajan sadržaj. Za razliku od toga, copy naredba
kontroliše sve što treba.
pascal.642markom,
■■■ Inače, promena dužine stringa preko stŠ0Ć je, po meni, sasvim
■■■ legalan put.
Štaviše, ponekad i neophodan ;)
Marko
pascal.643markom,
■■■ dužinu stringa i na kraj se upiše potreban znak. Ne treba se
■■■ plašiti 'funkcije' length koja izgleda rogobatno kad se kuca,
■■■ njom se samo
Da, ali se Length(s) lepo zameni sa jednim Ord(s[0]), a to je još lepše i kraće
ze kucanje ;)
Marko
pascal.644bulaja,
**** new file ****
R:\IBMPC\PASCAL\*.*
----------------------
tspa3370 zip 107638 Timo Salmi's TPU collection (Turbo Pascal 7.0)
Prof. Timo Salmi's TPU collection of nearly 200 useful Turbo Pascal 7.0
routines for text-mode programs.
pascal.646andrejt,
s[0] := 'A';
Ovo nista ne radi sem sto u s ubaci i neke
dodatne charove.Zasto ?(s je string)
Ja sam mislio da je to zbog toga sto su charovi
od 1-255 ali onda stvarno nista ne bi trebalo da uradi
ili bi izbacio gresku.
pascal.647markom,
■■■ s[0] := 'A';
Ovo postavlja dužinu stringa s na 65 znakova. (ASCII kod 'A' = 65)
Marko
pascal.648pedjak,
> Da li postoje neki neželjeni efekti ukoliko se umesto:
> st:=copy(st,1,x);
> uradi:
> stŠ0Ć:=x;
Verovatno si mislio stŠ0Ć:=chr(x). Ekvivalentna stvar onom
copy(st,1,x), samo brža.
pascal.649dzakic,
> s[0] := 'A';
> Ovo nista ne radi sem sto u s ubaci i neke
> dodatne charove.Zasto ?(s je string)
Zato što jse u nultom bajtu stringa čuva njegova dužina.
pascal.650eagle,
> Inače, promena dužine stringa preko stŠ0Ć je, po meni, sasvim
> legalan put.
A kako se inače menja dužina stringa? ;)
pascal.651eagle,
> inc(sŠ0Ć); sŠlength(s)Ć:=' '; umesto s:=s+' ';
> Drugi način je za početnike, kompajler tu poziva procedure za
> konkatenaciju ;) stringova, u code segmentu čuva konstantni string
Dobar kompajler bi sve izraze s:=s+... preveo na prvi način, kad već
ne postoji funkcija adds(s1,s2) koja inline nadovezuje s2 na s1.
TP slabo optimizuje, čak je i move potprogram.
pascal.652isekulovic,
>> Getintvec(9,@StaraProcedura); {Gde je StaraProcedura : Procedure}
>> Setintvec(9,@proc_1);{procedura koja se izvrsava na int9}
>> Keep(0);
Ima tu još dosta stvari da se uradi. Kao prvo proc_1 treba da se
definiše kao interapt procedure tj.
Procedure proc_1; interrupt;
Dalje na početku procedure mora da se uradi Inline($9c); tj. pushf.
Pošto DOS koristi isti prostor za stek za sve funkcije od $00 do $0C
početak izvršavanja jedne funkcije dok se izvršava druga će izazvati
blokiranja kompa kada se memorija bude vratila drugog funkciji da
nastavi rad. Da se to ne bi dogadjalo potrebno je proveriti da li je
aktivna već neka funkcija, a to se radi tako što se proverava vrednost
tkzv. InDos flega. Ukoliko je 0 nijedna funkcija nije aktivna. Njegovu
adresu vraća funkcija $34 u registrima ES:BX.
Ipak ukoliko je InDos<>0 ipak u jednom specificnom slucaju smemo
da izvrsimo nasu funkciju, a to je ako se trenutno izvrsava funkcija $06
koja čeka da korisnik nešto otkuca. Tada DOS (a i neki programi koji
ne koriste dos-ove funkcije za ocitavanje tastature, npr. TP) stalno poziva
prekid $28 tkzv. DOS Idle ili DosOK.
Treba još preusmeriti i vektore koji su zaduženi za poruke o greškama,
npr. $24 za presretanje greske u radu sa datotekama, da command.com ne bi
ispisao ono nesretno Retry, Abort, Ignore, Fail?
>> Takodje je pametno posle izvrsenja proc_1 pustiti i StaraProcedura.
Zavisi od interpta koji preuzimamo. Npr. u slučaju $08, $09 mora se
obavezno pozvati stara procedura. Ako program startujemo preko PrintScreen
tastera ($05) onda nema potreba da zovemo staru proceduru. Kod $09 je jos
kvaka da se stara procedura mora pozvati POSLE ocitavanja tastera sa porta $60
(ako hoćemo da program radi i na XT-u).
Ivan
pascal.653andrejt,
I jos da dodam da bi bilo pametno da se na pocetak
stavi {$M} da ogranici koriscenu mem. na steku.
(ako se ne stavi nece da radi uopste)
pascal.654peca.st,
!->>> st:=copy(st,1,x);
!->>> stŠ0Ć:=x;
!->
!-> Sad nešto gledam. Ovo će da radi samo ako string st treba
!-> skratiti. Ukoliko je x veće od prethodne dužine st, nije
!-> svejedno. Pretpostavljam da ti je jasno zašto.
Pa da, ali ni ono prvo ne bi ništa uradilo ako je x veće od prve dužine.
Peđa.
pascal.655dzakic,
> Pa da, ali ni ono prvo ne bi ništa uradilo ako je x veće od prve dužine.
Copy('sezam',1,200) opet će biti 'sezam'. A ne 'sezamďň╠┼ž...' kao
što bi bilo kad bi u s[0] upisao chr(200).
pascal.656vitez.koja,
#=> Dalje na početku procedure mora da se uradi Inline($9c);
#=> tj. pushf.
Ne mora, čak ne sme. pushf treba ubaciti neposredno pred poziv rutine koja je
ranije opsluživala prekid, i to samo ako je pozivaš pointerom na funkciju koji
je implementiran u samom jeziku; ako koristoš neki drugi način potivanja, ko
zna...
pascal.657eagle,
> Dalje na početku procedure mora da se uradi Inline($9c); tj. pushf.
Pushf se radi neposredno pre poziva _stare_ procedure, zato što se
ista završava sa iret (ret far + popf). Pozivi preko proceduralnog
tipa su uvek far, ostaje ti još da pokriješ popf. Ako ne pozivaš
staru proceduru ne treba ti ni pushf.
> Tada DOS (a i neki programi koji ne koriste dos-ove funkcije za
> ocitavanje tastature, npr. TP) stalno poziva prekid $28.
QEdit, na primer. Na osnovu čega si zaključio da TP poziva int 28h?
pascal.658isekulovic,
>> QEdit, na primer. Na osnovu čega si zaključio da TP poziva int 28h?
Pročitao u nekoj knjizi/časopisu/fajlu ne sećam se više.
pascal.659peca.st,
!-> A kako se inače menja dužina stringa? ;)
U, pa ima dosta načina:
delete, copy, s1 := s1 + s2...
O:)
Peđa.
pascal.661bearboy,
> Kako najbrže staviti pixel na ekran u rezoluciji 640*480*256?
> Mem Š$a000:xĆ radi samo do određene granice, zato što, naravno,
> obuhvata samo jedan segment od 64k. Dakle, koje su adrese
> ostalih segmenata video memorije?
A000:x, naravno :) Samo što treba da koristiš rutinu za menjanje stranica.
Odmah da odgovorim na sledeće pitanje :) - Skini VGADOC2 sa Sezama, tamo
imaš opis dosta video kartica & kako treba na njima menjati stranice.
pascal.662andrejt,
Ako stavim finddirst('*.*',directory,dir); i posle
par puta findnext(dir);write(dir.name); ispisace
ne samo direktorijume.Pa pitanje je zasto ne razlikuje
te ostale fajlove od direktorijuma ?(ako ih ne razlikuje)
A 2. pitanje je dal' postoji neki nacin da ispisuje samo
dirove a ne i ostale fajlove(sem da se stavi: if dir.attr = directory
then write(dir.name);)?
pascal.663isekulovic,
Ima li neko Timo Salmijeve unite, ali za TP 6.0?
pascal.664peca.st,
!-> A000:x, naravno :) Samo što treba da koristiš rutinu za menjanje
!-> stranica. Odmah da odgovorim na sledeće pitanje :) - Skini VGADOC2
!-> sa Sezama, tamo imaš opis dosta video kartica & kako treba na
!-> njima menjati stranice.
Hvala puno, skinuću, ako nešto bude nejasno biću slobodan da priupitam. :).
Peđa.
pascal.666eagle,
> Ako stavim finddirst('*.*',directory,dir); i posle
> par puta findnext(dir);write(dir.name); ispisace
> ne samo direktorijume.Pa pitanje je zasto ne razlikuje
Obične fajlove sa atributom $20 uvek nalazi, a parametar
attrib u findnext definiše dodatne flegove koje uzima u
obzir, pored pomenutog. Verovatno nije bag u TP-u već
tako radi odgovarajuća dosova funkcija.
pascal.667dejanr,
>> Ako stavim finddirst('*.*',directory,dir); i posle
>> par puta findnext(dir);write(dir.name); ispisace
>> ne samo direktorijume.Pa pitanje je zasto ne razlikuje
>> te ostale fajlove od direktorijuma ?(ako ih ne razlikuje)
Tako je napravljena DOS funkcija - imaš mogućnost da maskiraš šta
da se *ne* prikazuje ali fajlovi su uvek tu. Dakle, moraće sa IF
pascal.668andrejt,
===>Tako je napravljena DOS funkcija - imas mogucnost da maskiras sta
===>da se *ne* prikazuje ali fajlovi su uvek tu. Dakle, morace sa IF
Ipak nece morati sa IF jer (primetio sam) da ako stavim
FindFirst('',Directory,Dir);
...
FindNext(Dir);
Write(Dir);
...
ispisivce samo direktorijume.
pascal.669andrejt,
Kako da izbacim TSR iz memorije ?
pascal.670niklaus,
(:> A000:x, naravno :) Samo što treba da koristiš rutinu za menjanje
(:> stranica. Odmah da odgovorim na sledeće pitanje :) - Skini VGADOC2 sa
(:> Sezama, tamo imaš opis dosta video kartica & kako treba na njima
(:> menjati stranice.
Neophodno je (po potrebi) menjati banke video memorije (64kb blokovi),
pa se upisuje normalno po apsolutnoj adresi $A000:0000.
Ovo za VGADOC2 stoji, valja ga pročitati...
(:niklaus:)
pascal.671niklaus,
(:> ispisivce samo direktorijume.
A ako ne budeš hteo da ne prikazuješ fajlove sa jednim atributom manje
(recimo ARS, kada želiš samo Hidden i Direktorijume), moraćeš sa IFom...
(:niklaus:)
pascal.672predragd,
> Pazi ovo: Definišem promenljivu VM, tipa ARRAYŠ1..4000Ć OF
> BYTE na adresi $B000:$8000, znači na adresi video
> memorije. Ako probam da pišem u taj niz, da li će
> prijavljivati grešku ?
Naravno da hoće. Potrebno je da uz pomoc funkcije, koju sam ti poslao
u prethodnoj poruci, konvertuješ segment adresu (u ovom slučaju $B000) u
descriptor i tvoj program bi trebalo da radi bez problema. Ako ti ovo
nije baš razumljivo, možda će ti primer koji sledi pomoći.
Uses
Dos;
var
Descriptor: Word;
function Segment_to_Descriptor (RealModeSegment: Word;
var DPMISegment: Word): Boolean;
var
Regs: Registers;
begin
FillChar (Regs, Sizeof (Regs), 0);
Segment_to_Descriptor:=TRUE;
With Regs do
begin
Ax:=$0002;
Bx:=RealModeSegment;
Intr ($31, Regs);
If (Flags and 1) = 1 then
š Error in Ax ć
Segment_to_Descriptor:=FALSE
else š No error ć
DPMISegment:=Ax;
end;
end;
begin
If Segment_to_Descriptor ($B800, Descriptor) then
Mem ŠDescriptor:$0000Ć:=Ord ('A');
end.
Peđa.
pascal.673ppekovic,
>> Kako da izbacim TSR iz memorije ?
Ako sam tsr nema opciju uninstall, onda uz pomoć programa mark
i release. Nalaze se u arhivi TSR???.zip. Potraži sa dir /s
tsr*.*.
Paya
pascal.674andrejt,
Verovatno sam ja lose postavio pitanje ali to nije
ono sto sam ja hteo da znam,mene zanima kako da
izbacim svoj tsr iz memorije(uninstall) posto vratim
sve int vektore kako su bili.
pascal.675ndragan,
/ Da video sam. :( Po mom prevodu to znači: "Pristup memoriji pre nego
/ što je lokalni adresni prostor dodeljem mojoj aplikaciji." Tako
Ne, nego _izvan_ lokalnog adresnog prostora dodeljenog aplikaciji.
Profurao tarabu, zaglavio u jendek.
Bue_ Ndragan
pascal.676ndragan,
/ Glup je, al samo za crt. Inače je kompajler pametan, sad je
Ne bih bio siguran. Ko zna šta koja od procedura iz crt.tpu poziva
unutar samog crt.tpu? Uostalom, ubaci i neko farbanje ekrana i neko
skrolovanje, pa ako se pojave neke nove rutine na mapi, onda znači da ti
ipak nije onog prvog puta ubacio ceo crt.
Bue_ Ndragan
pascal.677dragisha,
-> Verovatno sam ja lose postavio pitanje ali to nije
-> ono sto sam ja hteo da znam,mene zanima kako da
-> izbacim svoj tsr iz memorije(uninstall) posto vratim
-> sve int vektore kako su bili.
Tako što oslobodiš memoriju koju isti zauzima odgovarajućim DOS pozivima.
Prvo korak je da utvrdiš PSP koji je identifikacija tvog programa i kojim
su potpisani MCBovi koje owniraš (ha:). Onda nedokumentovanim DOS pozivom
52H uhvatiš head spiska MCB-ova i nađeš svoj (ha2:) MCB. Kad hoćeš da to
počistiš, počisti taj nađeni MCB. Mislim da i sljedeći MCB isto treba
počistiti, ali najbolje da ovim kodom ispod prođeš *sve* MCBove i da ondak
čistiš sve što je potpisano tvojim MCB.
Ovo ispod su neki fragmenti koda iz mog TSR modula, a ako to nije
dovoljno, mail me za ostatak. Sintaksa [mcb:3] je za mcb=03cH ustvari
adresa 03ch:3.
PROCEDURE NextMCB(mcb: CARDINAL): CARDINAL;
TYPE
CP=POINTER TO CARDINAL;
BEGIN
RETURN (mcb+[mcb:3 CP]^+1);
END NextMCB;
(* Get PSP
*)
R.AX:=5100H;
Lib.Intr(R, 21H);
ProgPSP:=R.BX; (* Current PSP *)
(* Get first MCB
*)
R.AH:=52H;
Lib.Intr(R, 21H);
s:=[R.ES:R.BX-2 CP]^;
(* Nađi MCB od PSP
*)
WHILE [s:0 BP]^=4DH DO
IF [s:1 CP]^=ProgPSP THEN
ProgMCB:=s;
END;
(* Next MCB
*)
INC(s, [s:3 CP]^+1);
END;
(* žišćenje.
*)
R.AH:=49H;
R.ES:=ProgMCB+1; (* MCB+1 su podaci, sam Memory Control Block je
jedan paragraf prije podataka.
*)
Lib.Intr(R, 21H);
--
[Pave the bay.]
pascal.678dragisha,
-> počistiš, počisti taj nađeni MCB. Mislim da i sljedeći MCB isto treba
-> počistiti, ali najbolje da ovim kodom ispod prođeš *sve* MCBove i da
Prvi MCB na koji naletiš je environment, drugi je program. Ili tako
nešto:)). Zavisno od toga kako radi heap manager možeš da naletiš na još
koji MCB, ali ne vjerujem da će to da ti se desi u TSR.
-> ondak čistiš sve što je potpisano tvojim MCB.
Tvojim PSP, ali nema veze:)).
--
[There are so many upgrades, I am bankrupt.]
pascal.679luks,
> Ima li neko Timo Salmijeve unite, ali za TP 6.0?
Šta ima u tim unit-ima. Da ne skidam badava?
pascal.680ognjen,
)-> Cekaj malo, nadam se da si tu promenljivu FI, definisao kao
)-> FILE OF type, a ne kao TEXT, jerbo ako si je tako definisao
)-> nije ni cudo sto ti ne radi ;)
Naravno!!!! I dalje ne radi! ;(
)-> P.S. Uz poruku je program koji SIGURNO radi!
Ne radi!!!! Utata... :9 :P :b :)
)-> P.P.S. Naravno, podrazumeva se da fajl nije prazan :)
Prvo, kad sam mu dao fajl od 32b otptilige ovakav:
------------------
abcd efghijkl
1234 56789000
------------------
Prijavio je da fajl ima 0 bajtova!!!! Dobro, gledam source, i
mislim "Gde li je greska???!?!", ali greske prosto, naprosto,
nema!!!!!!!! Jebote (sorry, moram :), kad mu kazem falesize(f)
on kaze 0!!!! Kako NULA kad ima TRIDEST I DVA!!!!
Dobro, kad sam se malo smirio, :) ubacio sam mu neki TEXTPAD
(umesto proba.fil) od 170 Kilobajta, i uradio je isto sranje, kao
program koji sam ja ranije napisao... Ispisivao je neke delove
fajla...
Tad sam uvideo gresku. Definisao si record od 2 stringa
nedefinisane duzine... Probao sam da stavim s1, s2: string[5],
ali je tad uradio sranje, koje ja u zivotu nisam video... Ispisao
je (pomesano) delove fajla, i neke naucnofantasticne karaktere!
Odokativno sve zajedno je iznosili 200 bajtova, ali kako 200
(!?!) kad sam mu ja rekao da ispise dva stringa po 5 bajtova....
U cemu je greska ("iksovati" tacan odgovor):
[ ] U meni
[ ] U programu
[ ] U pascalu
[ ] U wirthu
[ ] Duhovi?
[ ] Virus nove generacije?
[ ] Nesto sedmo?
pascal.681ognjen,
Ima li neko elegantnije resenje odo ovoga:
var linija: integer;
read_lin:string;
f: text;
bagin
pardon, begin ;)
assign (f, 'file.ext');
reset (f);
while not eof(f) do
begin
readln(f, read_lin);
linija:=linija+1
end;
writeln ('U fajlu ima ', linija, 'linija :) ');
end.
Da se prebroje linije u fajlu?
pascal.682dejanr,
>> Ima li neko elegantnije resenje odo ovoga:
>> ...
>> Da se prebroje linije u fajlu?
Nema naročito elegantnijih, ali ima bržih. Najlakše je da napraviš
jedan bafer, ili sa:
var buf: array[1..10000] of byte
ili, ako nećeš da opterećuješ data segment, na heap-u (ono sa getmem)
i onda:
assign (f, 'file.ext');
settextbuf(f,buf[1], 10000);
reset(f);
Ostalo je isto.
pascal.683markom,
■■■ [X] U meni <-- tebi
■■■ [ ] U programu
■■■ [ ] U pascalu
■■■ [ ] U wirthu
■■■
■■■ [ ] Duhovi?
■■■ [ ] Virus nove generacije?
■■■ [ ] Nesto sedmo?
Kao prvo, ne možeš sam da napraviš fajl tipa File of <tip>, zato što ni sam ne
znam kako to Pascal radi. Napravi jednu proceduru koja će u taj fajl da upiše
slog. Filesize NE VRAĆA veličinu fajla u bajtovima, već u slogovima, i to
isključivo za tipske i netipske datoteke, tj. neće da radi (prijavljuje grešku)
sa fajlovima tipa TEXT. Dakle, ako već pričaš -- utata, ne radi --, moraš i
znati neke stvari. Ako budeš imao još ovakvih problema, mailni me pa da ti na
mail okačim program ...
Marko
pascal.684ajankovic,
Hi 2 all.
Hitno potreban originalni Borlandov paket "Turbo Pascal for Windows v 1.5"
Nov ili polovan :)
Ponude na mail ..ma wr ajankovic..:)
ili na 011/101-728 Sale...
pascal.685ognjen,
Aha, dakle, malo mi se razbistrilo ono sa recordima...
Pascal sâm ubacuje bajtove koji oznacavaju koliko je dugacak
record... Npr:
------------------------------
[chr(3)]abc[chr(7)]1234567
------------------------------
itd...
Ali, sta ako imam fajl otprilike ovakvog izgleda:
Petar Petrovic Njegos
Jovan Bulajic Bulaja isl.
──────┬─────── ───┬──
│ └── Nadimak
└────────────── Ime (banalan primer)
Racunajuci i space char izmedju ova dva recorda... Mogu li ovde
da koristim recorde (u pascalu)?
Tacnije da li je moguce rad sa recordima primeniti na DBF
fajlovima?
pascal.686kriss,
˙˙ Prijavio je da fajl ima 0 bajtova!!!! Dobro, gledam source, i
˙˙ mislim "Gde li je greska???!?!", ali greske prosto, naprosto,
˙˙ nema!!!!!!!! Jebote (sorry, moram :), kad mu kazem falesize(f)
˙˙ on kaze 0!!!! Kako NULA kad ima TRIDEST I DVA!!!!
Eh, gde li mi se samo zaturi taj kod ;)
U sred programa stoji jedno Readln(x); -> pri izvršavanju se
preskoči (!!?!?!)
Kada se stavi još jedno iza ovog prvog -> pita te 2 puta !!!!!!!!
Zona sumraka, Turbo Pascal 6.0 :)
pascal.687nikac,
Imas u nekom od dir-ova poveliki program (i to za c) za rad sa dbf bazama.
I lepo neko rece NE MOZES ti da napravis file of nesto. Moze
s da napises
program koji ce pravi konverziju ascii->file_of.
Na primer:
...
Readln(S);
i:=pos(' ',s));
slog.ime:=copy(s,1,i);
s:=copy(s,i,length(s)-i));
slog.prezime:=...
...
write(f,slog);
...
pascal.688peca.st,
!-> U cemu je greska ("iksovati" tacan odgovor):
!->
!-> Š Ć U meni
Dafinitivno u tebi. :).
Najbolje pošalji kompletan source i fajl nad kojim si ga probao
(okači uz poruku, zipovano) pa ćemo da vidimo...
Peđa.
pascal.689peca.st,
!-> Kao prvo, ne možeš sam da napraviš fajl tipa File of <tip>, zato
!-> što ni sam ne znam kako to Pascal radi.
Pascal to radi ko i svi kompajleri. (i ne samo kompajleri)
Slog je jednostavno skup bajtova, on te bajtove upiše u fajl i kraj.
To što ti vidiš u fajlu kuke i kvake, to je druga stvar. Svaki broj
zauzima 1, 2, ili 4 bajta (zavisno od tipa) pa to kad se pretvori u
neki(e) znak(ove) ne izgleda baš kao broj.
Peđa.
pascal.690peca.st,
!-> I lepo neko rece NE MOZES ti da napravis file of nesto.
Nije da ne može, ali će ići malo teže. :))).
Peđa.
pascal.691markom,
■■■ Pascal to radi ko i svi kompajleri. (i ne samo kompajleri)
■■■ Slog je jednostavno skup bajtova, on te bajtove upiše u fajl
■■■ i kraj.
Hmm, mora da sam se pogrešno izrazio. Ovoliko sam i ja zna, ali ajde ti napravi
fajl tipa Word i u njega upiši četiri prizvoljna broja, ali ručno iz nekog edi-
tora. To sam mislio pod onim da ni meni nije jasno kako Pascal to radi :)
Marko
pascal.692markom,
■■■ Tacnije da li je moguce rad sa recordima primeniti na
■■■ DBF fajlovima?
Teško, ali imaš u sezamovom direktorijumu, a i u nekom od FON-ovih TPU(ove) za
rad sa DBF fajlovima. Ali ako već radiš iz TP-a, bolje ti je da praviš sam svo-
je baze ...
Marko
pascal.693markom,
■■■ Nije da ne može, ali će ići malo teže. :))).
Dobro, file of String će lako napraviti, ali ajde napravi file of word...
Marko
pascal.694markom,
■■■ ˙˙ nema!!!!!!!! Jebote (sorry, moram :), kad mu kazem
■■■ falesize(f) ˙˙ on kaze 0!!!! Kako NULA kad ima TRIDEST I
■■■ DVA!!!!
■■■
■■■ Eh, gde li mi se samo zaturi taj kod ;)
Nemoj komentarisati nešto što ne znaš. Filesize NE VRAĆA veličinu fajla u
bajtovima nego u SLOGOVIMA. FileSize može da vrati 1 i na fajlu od 50 K, ako
napraviš toliki slog..
Marko
pascal.695eagle,
> Dobro, file of String će lako napraviti, ali ajde napravi file
> of word...
Kod stringova moraš uneti i dužinu, i napraviti razmak pre
sledećeg stringa. File of word je lako napraviti ako imaš
hex editor.
pascal.696eagle,
> U sred programa stoji jedno Readln(x); -> pri izvršavanju se
> preskoči (!!?!?!)
Verovatno imaš negde pre toga još neko read ili readln.
pascal.697ognjen,
Kad se vec govori o TSR programima, jasno je kako da se startuje
na pritisak (bilo kog tastera), ali kako srediti da se startuje
na pritisak odredjene kompinacije (Npr: Shft+Shft+Space), a kako
da se startuje posle tacno odredjenog vremena...
pascal.698ognjen,
)-> Nema narocito elegantnijih, ali ima brzih. Najlakse je da
)-> napravis jedan bafer, ili sa:
)-> ...
Da, radi. :) Ali, mogu li sad da znam zasto? :) Mislim, zasto
je ovo resenje brze...?
pascal.699ognjen,
)-> Kao prvo, ne mozes sam da napravis fajl tipa File of <tip>,
)-> zato sto ni sam ne znam kako to Pascal radi.
Da, shvatio sam. :(
)-> Napravi jednu proceduru koja ce u taj fajl da upise slog.
E, to mi ne treba, jer fajl ne pravi _moj_ program, on je vec
napraljen (mislim, fajl iz koga se cita), i najvise lici na DBF
fajl...
)-> Dakle, ako vec pricas -- utata, ne radi --, moras i znati
)-> neke stvari.
Ok, sorry, pretendovalo je da bude sala... :)
)-> Ako budes imao jos ovakvih problema, mailni me pa da ti na
)-> mail okacim program ...
Ok... :)
pascal.700andrejt,
Ne znam za ostale ali neke tastere imas na adresi $40:$17
(po bitovima : insert,caps-lock,num-lock,scroll-lock,alt,
ctrl,levi shift,desni shift) pa njih mozes da proveris i
kad je vise njih pritisnuto,za ostale ne znam :(.Posle
tacno odredjenog vremena mozes da ga startujes ako radi
na INT 8(ako napravis proceduru koja uvecava neku prom.
za recimo 1 i kad dostigne recimo 200 pustis tsr da radi-
ovo verovatno moze i bolje ali ne mogu da se trenutno setim
niceg pametnijeg.
pascal.701andrejt,
...
===> Da, radi. :) Ali, mogu li sad da znam zasto? :) Mislim, zasto
===>je ovo resenje brze...?
Zato sto inace pri svakom citanju iz fajla on cita char po char,
a ovako smesti recimo 512 charova u mem. pa radi sa memorijom
sto je mnogo brze.
pascal.702dejanr,
>> Da, radi. :) Ali, mogu li sad da znam zasto? :) Mislim, zasto
>> je ovo resenje brze...?
Zato što onako pozivaš DOS za svaki karakter (? ili nekoliko karaktera?)
a ovako odmah prenese po 10-tak kilobajta (ili više) pa posle samo čita
iz bafera. Dakle, štedi se pakovanje parametara, pozivi DOS funkcija itd.
Razlika ume da bude drastićna.
Plaćena je i određena cena... u tekst datoteci ne možeš da radiš seek!
Osim pomoću trikova ;)
pascal.703isekulovic,
>> Šta ima u tim unit-ima. Da ne skidam badava?
Gomila stvari, ali veoma malo pametnih. Nažalost pobrisao sam verziju
za sedmicu tako da nemam spisak svih procedura. Ono što mene interesuje
je procedura SetEnv (kao pandan TP-ove GetEnv).
pascal.704kriss,
˙˙ ■■■ Eh, gde li mi se samo zaturi taj kod ;)
˙˙
˙˙ Nemoj komentarisati nešto što ne znaš. Filesize NE VRAĆA
˙˙ veličinu fajla u bajtovima nego u SLOGOVIMA. FileSize može da
˙˙ vrati 1 i na fajlu od 50 K, ako napraviš toliki slog..
Kao prvo nisam komentarisao filesize, već Bug turbo pascala koji
se javljao na 3 (tri) različite mašine. Kao drugo - nema drugo :)
pascal.705peca.st,
!-> fajl tipa Word i u njega upiši četiri prizvoljna broja, ali ručno
!-> iz nekog edi-
Word? žetiri broja?
Ovako: Dopiši na kraj tog fajla 8 (4*2) bilo kojih znakova, i, eto,
dopisao si mu 4 broja. A koje si brojeve dopisao, znaćeš tako što
uzmeš prva dva broja, pa onda druga dva... i prvi od njih pomnožiš
(Ord (ch1)) sa 256 i dodaš mu drugi (Ord (ch2)).
Peđa.
pascal.706peca.st,
!-> Plaćena je i određena cena... u tekst datoteci ne možeš da radiš
!-> seek!
Pa... za šta bi služilo seek u tekstualnoj? Mislim, na koju poziciju bi
to trebalo da pomeri pointer? Eventualno da se kao jedna pozicija računa
jedan red, ali je to onda teško (nemoguće?) izvodljivo. (zbog promenljive
dužine reda)
Peđa.
pascal.707markom,
■■■ Ok, sorry, pretendovalo je da bude sala... :)
Opraštam ti :)
Marko
pascal.708markom,
■■■ Kod stringova moraš uneti i dužinu, i napraviti razmak pre
■■■ sledećeg stringa. File of word je lako napraviti ako imaš
■■■ hex editor.
Arrrrgggggghhhh!!!! Zar ti nije lakše da napraviš proceduru koja će to da radi?
Ja sve vreme o tome pričam bre !!
Marko
pascal.709markom,
■■■ Kao prvo nisam komentarisao filesize, već Bug turbo pascala
■■■ koji se javljao na 3 (tri) različite mašine. Kao drugo - nema
■■■ drugo :)
Ali to nije bug, to tako radi i gotovo...
Marko
pascal.710ognjen,
)-> Imas u nekom od dir-ova poveliki program (i to za c) za rad
)-> sa dbf bazama.
Ne programiram u cu :)
pascal.711ognjen,
)-> Najbolje posalji kompletan source i fajl nad kojim si ga
)-> probao (okaci uz poruku, zipovano) pa cemo da vidimo...
Neah. Nije ni bitno, odustao sam od recorda... :)
pascal.712isekulovic,
>> Tacnije da li je moguce rad sa recordima primeniti na DBF
>> fajlovima?
Ako ti već treba nešto za rad sa .dbf fajlovima potraži fajl dbasendx.arj
uz poruku pc.prog.2 6.632 by pedjak.
pascal.713isekulovic,
>> ali kako srediti da se startuje na pritisak odredjene kompinacije
Npr. shift-ctrl-alt-spc kombinacija.
Proveravaš port[$60] i registruješ svako pritiskanje/otpuštanje
crtl/shift/alt tastera u nekim Boolean promeljivima, tako da znaš
stalno šta je pritisnuto a šta nije. Kad se pritisne space proveriš
da li su pritisnuti ctrl i shift i alt i ako jesu treba da se aktivira.
>> a kako da se startuje posle tacno odredjenog vremena...
Postaviš da procedura na int $08 uvećava neki brojač svaki put kada
okine (18.2 puta u sekundi) i kada brojač dostigne neku vrednost tada
program treba da se aktivira.
pascal.714eagle,
> Postaviš da procedura na int $08 uvećava neki brojač svaki put
> kada okine (18.2 puta u sekundi) i kada brojač dostigne neku
> vrednost tada program treba da se aktivira.
SIgurnije je svaki put pročitati vreme sa 40h:6Ch adrese.
pascal.715eagle,
> uzmeš prva dva broja, pa onda druga dva... i prvi od njih
> pomnožiš (Ord (ch1)) sa 256 i dodaš mu drugi (Ord (ch2)).
Obrnuto.
pascal.716markom,
■■■ Npr. shift-ctrl-alt-spc kombinacija.
Ajde ako te ne mrzi nabaci primer ...
Marko
pascal.717kriss,
˙˙ Ali to nije bug, to tako radi i gotovo...
Nije bug? Ok, možda ti to zoveš nekim drugim imenom, ali to je
bag. Sad sam se setio da sam zbog toga i morao da pišem sopstvenu
proceduru unos, tako da je definitno taj deo koda transformisan
:( Šteta, inače bih ga poslao da se uveriš ;)
pascal.718ognjen,
Znaci, SetTextBuf() sluzi za izdvajanje dela memorije u koji
ce se citati x bajtova fajla... I, prvo se ucita u taj bafer
prvih x bajtova, pa kada se oni privedu kraju, sledecih x... do
kraja fajla... Jesam li dobro razumeo?
pascal.719ognjen,
Kako se moze odsvirati neka melodijica u pascalu, ali tako da
se ne koristi primitivno sound, nego, da li ima neka komanda,
ekvivalentna basic komandi play?
pascal.720andrejt,
QUOTE>> Kako se moze odsvirati neka melodijica u pascalu, ali tako da
QUOTE>>se ne koristi primitivno sound, nego, da li ima neka komanda,
QUOTE>>ekvivalentna basic komandi play?
Ja mislim da nema niceg slicnog play,ali i sa sound mozes svasta
da odsviras ako se potrudis,no imas negde(valjda na FENIXu a verovatno
i na jos nekim mestima) neki tpu za odsviravanje pa cu videti da
ga skinem i da ti dostavim preko maila.
pascal.721isekulovic,
>> Ajde ako te ne mrzi nabaci primer ...
Ceo program? Nemam ništa gotovo, što bi ličilo na nešto, a ni vremena
da pišem. Evo kako bi izgledao delić koji bi trebao odlučivati da li da se
aktivira.
var Activate : Boolean;
Ctrl, Shift, Alt : Boolean;
InDos : ^Boolean;
Old_Int9, Old_Int8, Old_int28 : procedure;
Procedure posao;
begin
ovde_radis_sta_vec_hoces;
activate := false;
end;{posao}
Procedure My_Int9; interrupt;
begin
case Port[$60] of
29: Ctrl := true;
157: Ctrl := false;
42: Shift := true;
170: Shift := false;
56: Alt := true;
184: Alt := false;
57: Activate := true;
end;{case}
Inline($9C); Old_Int9;
end;{My_Int9}
Procedure My_Int8; interrupt;
begin
Inline($9C); Old_Int8;
if activate and not (InDos^) then posao;
end;{My_Int8}
Procedure My_Int28;
begin
Inline($9C); Old_Int28;
if activate then posao;
end;{My_Int28}
var r:registers;
begin
r.ah := $34; MsDos(r);
InDos := Ptr(r.es,r.bx);
activate := false;
Ctrl := false; Shift := false; Alt := false;
Swapvectors;
GetIntVec($08,@Old_Int8);
GetIntVec($09,@Old_Int9);
GetIntVec($28,@Old_Int28);
SetIntVec($08,@My_Int8);
SetIntVec($09,@My_Int9);
SetIntVec($28,@My_Int28);
Keep(0);
end.
pascal.722isekulovic,
>> SIgurnije je svaki put pročitati vreme sa 40h:6Ch adrese.
A ako korisnik šteluje sat u medjuvremenu?
pascal.723markom,
■■■ i na jos nekim mestima) neki tpu za odsviravanje pa cu videti
■■■ da ga skinem i da ti dostavim preko maila.
Imaj i mene na umu ;)
Marko
pascal.724andrejt,
...
QUOTE>>Imaj i mene na umu ;)
Imam te ... ;)
pascal.725ognjen,
)-> tpu za odsviravanje pa cu videti da ga skinem i da ti
)-> dostavim preko maila.
E, ejde, molim te, bas bi mi trebalo... Imam gomilicu pesmica
iz Basica, pa mi zao da ih brisem...
BTW, kako da saznam komande iz TPU-a? Ima li neki nacin (ne
mislim na citanje txt fajla :)?
pascal.726mzdravkovic,
Kako iz pascala da ocitam seriski broj diska ?
Hvala
pascal.727andrejt,
QUOTE>> Kako iz pascala da ocitam seriski broj diska ?
Malo sam priglup,kakav serijski broj ?(Jel' iz setupa ?)
pascal.728markom,
Potrebna mi je procedura za sortiranje dvostruko povezane liste pointera. Ako
neko ima (zna) neka nabaci ovde ili na mail. Jako mi je hitno.
Unapred zahvalan,
Marko
pascal.729mzdravkovic,
>> QUOTE>> Kako iz pascala da ocitam seriski broj diska ?
>>
>> Malo sam priglup,kakav serijski broj ?(Jel' iz setupa ?)
Mislio sam na onaj serijski broj koji daje chkdsk .
pascal.730postmast,
Path: fon!Osmeh.FON.Uni-BG.YU!dex
From: dex@Osmeh.FON.Uni-BG.YU (Dejan Jakovljevic)
Subject: Re: pascal
Organization: Fakultet Organizacionih Nauka, Beograd
Date: Fri, 28 Jan 1994 11:08:14 GMT
Message-ID: <CKC6xr.251@fon>
X-Newsreader: TIN [version 1.2 PL1]
References: <sezam$pascal:01.095.3591@sezam>
Sender: news@fon (News)
Marko Mandic (markom@sezam.UUCP) wrote:
: Potrebna mi je procedura za sortiranje dvostruko povezane liste pointera. Ako
: neko ima (zna) neka nabaci ovde ili na mail. Jako mi je hitno.
daj josx malo 'data' o listi, nekad sam znao...mog'o bi' da pomognem...
ako vecy neko nije
..dex..
pascal.731andrejt,
...
QUOTE>>Mislio sam na onaj serijski broj koji daje chkdsk .
Dakle to je ... Po HelpPCu 2.1 to ti je Boot Sector offset 27h.
pascal.732janko,
> Mislio sam na onaj serijski broj koji daje chkdsk .
Meni chkdsk ne daje nikakav serijski broj. Jesi li siguran da bi
taj program radio na mom računaru? ;)
pascal.733andrejt,
QUOTE>>Meni chkdsk ne daje nikakav serijski broj. Jesi li siguran da bi
QUOTE>>taj program radio na mom racunaru? ;)
Jesi li ti siguran da si chkdsk probao na 'pravom disku',
to jest ne stacker drajvu i slicnim ?
pascal.734markom,
■■■ Marko Mandic (markom@sezam.UUCP) wrote:
^^^^^^^^^^^^ ^^^^^^
AAAAAA, pa ja sam Marko Milivojević !!! :))
■■■ daj josx malo 'data' o listi, nekad sam znao...mog'o bi' da
■■■ pomognem... ako vecy neko nije
Bilo šta, treba mi samo algoritam i ništa više, ja ću to da preradim za moju
listu.
Marko
pascal.735dejanr,
>> Meni chkdsk ne daje nikakav serijski broj. Jesi li siguran da bi
>> taj program radio na mom računaru? ;)
Mora biti da koristiš neku stariju verziju DOS-a (3.30? 3.31?).
Inače, algoritam za čitanje serijskog broja diska dat je prošlog
januara, u "Bajtovima lične prirode" ("Računari"). Preuzet je sa
Sezama, ali ko bi sada našao poruku...
pascal.736djelovic,
> Bilo šta, treba mi samo algoritam i ništa više, ja ću to da preradim za
> moju listu.
Ako znaš da "čitaš" C, onda pogledaj SNIPPETS arhivu u C direktorijumu. Ako
me sećanje dobro služi, tamo ima alogritam za shell-sort duplo uvezanih lista.
pascal.738eagle,
> Potrebna mi je procedura za sortiranje dvostruko povezane liste
> pointera. Ako neko ima (zna) neka nabaci ovde ili na mail.
Napravi proceduru za ubacivanje čvora u sortiranu listu
na određenu poziciju, tako da lista ostane sortirana.
Ako hoćeš da kreiraš sort. listu ubacuj nove članove
preko te procedure. Ako već imaš listu i treba da je
sortiraš, to bi išlo otprilike ovako:
procedure SortList(var Pocetak: PList);
var Old, Poc: PList;
begin
Poc := Pocetak;
Pocetak := nil;
while Poc <> nil do
begin
Old := Pocž.Sledeci;
SortInsert(Pocetak, Poc); (* var Pocetak: PList; P: PList *)
Poc := Old;
end;
end.
pascal.739janko,
> QUOTE>>Meni chkdsk ne daje nikakav serijski broj. Jesi li
> siguran da bi QUOTE>>taj program radio na mom racunaru? ;)
>
> Jesi li ti siguran da si chkdsk probao na 'pravom disku',
> to jest ne stacker drajvu i slicnim ?
Sigurno sam siguran.
Serijski broj je izmišljotina novijih verzija Mesi dosa. Koliko je
pametno onda pisati programe koji ne rade na starim dobrim verzijama?
pascal.740janko,
>>> Meni chkdsk ne daje nikakav serijski broj. Jesi li
>>> siguran da bi taj program radio na mom računaru? ;)
>
> Mora biti da koristiš neku stariju verziju DOS-a (3.30?
> 3.31?).
:) A baš su ljudi počeli da se pitaju kako to. Kvariš im zabavu. ;)
> Inače, algoritam za čitanje serijskog broja diska dat je
> prošlog januara, u "Bajtovima lične prirode" ("Računari").
> Preuzet je sa Sezama, ali ko bi sada našao poruku...
Ma ja sam to pisao zbog toga, što sam se odmah pomislio, šta takve
stvari daju kada čitaju 3.31 diskove i diskete (i diskete imaju SN, ili
ne)? Da li zbog takve "pametne" mogućnosti iskaču sa porukom "treba vam
dos 5.0?" Da neki programi domaćih programera ne pokušavaju i da pišu po
tome? But sektor i susedstvo? Zgroz.
Sad se setih. Kao, to su jedinstveni brojevi i tralala. Zna li neko
algoritam po kome DOS pravi te brojeve? Da li negde drži neku semenku
(seed) i od koliko bajtova, pa je lepo apdejtuje svaki put kad generiše
novi broj? Ili izračunava fazu meseca pa nju upiše?
pascal.741dr.grba,
>> Sad se setih. Kao, to su jedinstveni brojevi i tralala. Zna li neko
>> algoritam po kome DOS pravi te brojeve? Da li negde drži neku
>> semenku (seed) i od koliko bajtova, pa je lepo apdejtuje svaki put
>> kad generiše novi broj? Ili izračunava fazu meseca pa nju upiše?
Jednom sam otvorio 4 kutije novih disketa i krenuo u iscrpljujući posao
formatiranja... DOS 6.0, njegov FORMAT, "format another" = "Yes"...
Posle izvesnog vremena sam primetio da se jedan broj (valjda prvi)
menja po nekom na prvi pogled neprepoznatljivom ključu, dok se drugi
broj uredno inkrementirao za jedan u heksadekadnom sistemu, pri čemu
je prvoizabrani bio neki random broj. Kada bih prekinuo FORMAT, pa
startovao ponovo, samo bi se izabrao novi random, a slika bi se ponovila.
Mnogo važno, uostalom (:
pascal.742dejanr,
>> Kada bih prekinuo FORMAT, pa startovao ponovo, samo bi se izabrao
>> novi random, a slika bi se ponovila.
I kod mene se slično ponaša kada formatiram diskete, ali sada vidim
da su mi serijski brojevi na svim particijama (C, E, F i G, particija
D je drugi disk) jednaki. E sad kako je to uspelo, pojma nemam, ali
tako kaže CHKDSK :) Bug ili feature? :)
pascal.743dragisha,
-> Sad se setih. Kao, to su jedinstveni brojevi i tralala. Zna li neko
-> algoritam po kome DOS pravi te brojeve? Da li negde drži neku semenku
-> (seed) i od koliko bajtova, pa je lepo apdejtuje svaki put kad generiše
-> novi broj? Ili izračunava fazu meseca pa nju upiše?
Datum+vrijeme kreiranja volumeta. Po jedan word, tj standardni DOS format
za iste. Izuzetno naivan način zaštite, ako mene neko pita:).
--
[Woman who stays long on bedspring may get offspring.]
pascal.744kenza,
Hi!
Ima li neko unit(e) za rad pod novelom?
Otvaranje fajlova sa lockovanjem,... itd.. Tnx
pascal.745dragisha,
-> Pa... za šta bi služilo seek u tekstualnoj? Mislim, na koju poziciju bi
-> to trebalo da pomeri pointer? Eventualno da se kao jedna pozicija računa
-> jedan red, ali je to onda teško (nemoguće?) izvodljivo. (zbog
-> promenljive dužine reda)
Analiziram tekst file u kome su podaci paragrafi (dvije i više linija)
a u zadnjoj liniji se nalazi time+date stamp. Počinjem od početka i tražim
određeni datum da bih uradio neki posao. Tekst fajl ima preko 10Mb.
Poanta, kad nađem stamp moram da obradim i paragraf koji je upravo
završio.
Ubio bih se (tj korisnik:)) bez baferisanja+seek-a istovremeno.
--
[Life is a sexually transmitted and terminal disease.]
pascal.746dragisha,
-> Datum+vrijeme kreiranja volumeta. Po jedan word, tj standardni DOS
-> format za iste. Izuzetno naivan način zaštite, ako mene neko pita:).
Da demantujem:). Ovo je slučaj na mojim disk particijama, ali ne i na par
disketa koje sam probao. Izgleda da je bitan i program kojim se to radi,
diskove sam čini mi se formatirao sa DOS 5.0, a sada imam 6.0. Kako
izgleda, nema DOS poziva koji generiše taj broj (?) već to radi program za
formatiranje.
--
[Do married women make the best wives?]
pascal.747dr.grba,
>> I kod mene se slično ponaša kada formatiram diskete, ali sada vidim
>> da su mi serijski brojevi na svim particijama (C, E, F i G,
>> particija D je drugi disk) jednaki. E sad kako je to uspelo, pojma
>> nemam, ali tako kaže CHKDSK :) Bug ili feature? :)
Aman, i kod mene! MS DOS 6.2, tri particije, ser. broj svake je 1B6C-946F.
Ne, ne reci da je isti broj i kod tebe... (:
pascal.748rower,
Cuo sam da Paskal moze da cita slike PCX ili BMP formata.
Da li neko zna kako se to radi (ako moze). Kakve jos
postoje fore sa slikama u Paskalu ????
Pozdrav ROWER
pascal.749darone,
Par pitanja:
a) koja je najbolja mouse biblioteka, a da je ima na sezamu? ili već neki sors,
nije važno
b) da li je moguće ulinkovati .chr font fajlove u .exe?
c) da je potrebno isporučivati .bgi fajlove uz program ili se linkuju u .exe?
d) nema više ;)
Unapred hvala :)
pascal.750djelovic,
> b) da li je moguće ulinkovati .chr font fajlove u .exe?
> c) da je potrebno isporučivati .bgi fajlove uz program ili se linkuju u .ex
U oba slučaja odgovor je "može, ali ne mora". I fontovi i BGI drajveri se
mogu ulinkovati u EXE, ali i ne moraju.
pascal.751bearboy,
> b) da li je moguće ulinkovati .chr font fajlove u .exe?
> c) da je potrebno isporučivati .bgi fajlove uz program ili se
> linkuju u .exe?
Baci pogled u BGILINK.PAS i sve će ti se samo ka'sti...
pascal.752darone,
>> > b) da li je moguće ulinkovati .chr font fajlove u .exe?
>> > c) da je potrebno isporučivati .bgi fajlove uz program ili se linkuju u
>> .ex
>>
>> U oba slučaja odgovor je "može, ali ne mora". I fontovi i BGI drajveri se
>> mogu ulinkovati u EXE, ali i ne moraju.
b1) kako se .chr fajlovi linkuju u .exe? (može i okvirno broj poruke, ili
datum, kopaću)
c1) bear reče da to ima negde u bgilink.pas, jel to deo TP paketa?
p.s. valjda vidite da to nije za mene :)
pascal.753janko,
> c1) bear reče da to ima negde u bgilink.pas, jel to deo TP
> paketa?
Da. To je u direktorijumu sa CHR fajlovima, primer kako se linkuju ta
čuda.
Usput, mogao si da lupiš jedno FF BGILINK.PAS :)
pascal.754vitez.koja,
#=> a) koja je najbolja mouse biblioteka, a da je ima na
#=> sezamu? ili već neki sors, nije važno
Na znam koja je najbolja, ali ima jedna (na sezamu, naravno) koja omogućava
onaj fancy klizeću kursor kao u Nortonu :=
#=> b) da li je moguće ulinkovati .chr font fajlove u .exe?
Jeste, ali moraš da praviš nekakav make fajl. Ma, pređi na C :)
#=> c) da je potrebno isporučivati .bgi fajlove uz program
#=> ili se linkuju u .exe?
Po želji, može i jedno i drugo.
Fontovi i drajveri se po 'defaultu' ne linkuju, nego to moraš odlično da
zahtevaš. U okviru TPa dati su fajlovi bgilink.* - pogledaj i kazaće ti se
samo.
pascal.755peca.st,
!-> Cuo sam da Paskal moze da cita slike PCX ili BMP formata.
Za PCX imaš unit u Pascal direktorijumu.
BMP je vrlo prost format. U prvih ne znam napamet kolko bajtova je
visina, širina slike, broj boja i još neki manje važni podaci. Onda sledi
paleta (3 * broj boja). Posle toga ti ide slika koja nije ni na kakav način
kriptovana, bajt za bajtom. I to je sve. Ako je potrebno, mogu da pošaljem
source koji čita BMP.
Peđa.
pascal.756markom,
■■■ kriptovana, bajt za bajtom. I to je sve. Ako je potrebno,
■■■ mogu da pošaljem source koji čita BMP.
Baš bi mogao ... :)
Marko
pascal.757skerl,
│# => a) koja je najbolja mouse biblioteka, a da je ima na
│# => sezamu? ili vec neki sors, nije vazno
│
│ Na znam koja je najbolja, ali ima jedna (na sezamu, naravno) koja
│ omogucava onaj fancy klizecu kursor kao u Nortonu :=
└─────
mouslib8.zip
pascal.758bigbrada,
!##! kriptovana, bajt za bajtom. I to je sve. Ako je potrebno,
!##! mogu da pošaljem source koji čita BMP.
Ili, preciznije, pola bajta po pola bajta. :)
Brada.
pascal.760lovro,
=- 6.1051->1027 pascal m.hristodulo 14.05.93.
=- 18:06 allgraph.zip
U PC.PROG.2, fina stvar.
pascal.761darone,
>> Jeste, ali moraš da praviš nekakav make fajl. Ma, pređi na C :)
Ja da programiram? Nikada :)))
Hvala svima na odgovorima, pokupio sam sve što mi treba :)
pascal.762predragd,
> Na znam koja je najbolja, ali ima jedna (na sezamu,
> naravno) koja omogućava onaj fancy klizeću kursor kao u
> Nortonu :=
Kako je ime toj arhivi, i gde se nalazi.
Peđa.
pascal.763almi,
Evo jednog ostvarenja u pascalu.Mine Sweeper for DOS.
Uz poruku ide source koji treba prevesti.
Sve primedbe saljite almi-u.
Pozdrav Almi.
minepas.zippascal.764ognjen,
Evo jednog problema (bez obzira na jezik, ali meni treba za
pascal:):
Daklem, recimo:
Repeat
{posao...}
Until KeyPressed
E, taj "posao..." :) mora da se izvrsi ceo, dakle da dodje do
kraja, pa tak onda da se "pobegne" iz njega. To i nije problem,
ako je posao kratak, ali, ako isti traje 10ak sekundi, moram da
cekam celih deset sekundi (posle pritiska nekog tastera) da bi se
izaslo iz petlje. Ali, kako da "podesim" da mogu u svakom
trenutku iz nje da izdjem? Jedino sto ja "vidim" je da posle
svake komande stavim If PressedKey then... ali ni to nije nesto
jer ako imam Delay (10000) (10sec) opet nece raditi, a i mnogo je
primitivno...
I pod broj 2, kad je ovo Until KeyPressed tik ispred end
(dakle, program se zavrsava kad se pritisne tipka), taj
pritisnuti taster ostaje u baferu, i ispisuje se na komandnoj
liniji (ili, recimo ako ste koristili NC, pa pritisnuli ENTER,
program ce se zavrsiti i ponovo startovati). Ali, kako isprazniti
taj Keyboard bafer? Ima jedno resenje u vidu ch := ReadKey, ali
to je dosetka, a ne resenje...
PS: Ovo drugo sam malo zavrnuo, ali je valjda, jasno... :)
pascal.765almi,
Evo ispravne arhive sa Úmine sweeperom
Pozdrav Misel
minepas.zippascal.766bigbrada,
*>> E, taj "posao..." :) mora da se izvrsi ceo, dakle da dodje
*>> do kraja, pa tak onda da se "pobegne" iz njega. To i nije
*>> problem, ako je posao kratak, ali, ako isti traje 10ak
*>> sekundi, moram da cekam celih deset sekundi (posle pritiska
*>> nekog tastera) da bi se izaslo iz petlje. Ali, kako da
*>> "podesim" da mogu u svakom trenutku iz nje da izdjem?
*>> Jedino sto ja "vidim" je da posle svake komande stavim
*>> If PressedKey then... ali ni to nije nesto jer ako imam
*>> Delay (10000) (10sec) opet nece raditi, a i mnogo je
*>> primitivno...
"Rešenje" koje bih ja primenio bi bilo nešto u stilu:
I := 0;
Repeat
Delay (100);
Inc (I);
Until KeyPressed Or (I = 100);
Ne kažem da je to najbolje (čak suprotno - veoma je primitivno),
ali radi posao. Ne moraš baš posle svake naredbe stavljati
If KeyPressed. Stavi na svaku treću ;)
*>> taj Keyboard bafer? Ima jedno resenje u vidu ch := ReadKey,
*>> ali to je dosetka, a ne resenje...
Dosetka ili rešenje, ali to radi posao, kao i malopre. I ja koristim
isti štos.
Brada.
pascal.767postmast,
Path: fon!buefhp.etf.uni-bg.yu!jd53492d
From: jd53492d@buefhp.etf.uni-bg.yu (Dejan Jakovljevic)
Subject: Re: pascal
Organization: Fakultet Organizacionih Nauka, Beograd
Date: Thu, 17 Feb 1994 21:58:43 GMT
Message-ID: <CLE2Dv.Lzt@fon>
X-Newsreader: TIN [version 1.2 PL1]
References: <sezam$pascal:01.095.3879@sezam>
Sender: news@fon (News)
Ognjen Blagojevic (ognjen@sezam.UUCP) wrote:
<*> Evo jednog problema (bez obzira na jezik, ali meni treba za
<*> pascal:):
<*> Daklem, recimo:
<*> Repeat
<*> {posao...}
<*> Until KeyPressed
otprilike ovako : KeyPressed ti samo kazxe DA LI u baferu
ima karaktera...na tebi ostaje da vidisx sxta cyesx sa njima.
Zato ti pri zavrsxetku programa karaktr 'iskocxi' na ekran...
..dex..
ps: a za drugi deo odgovora ?!? ne znam L:(((
--
Jakovljevic Dejan, Sokobanja O:-) ////// yours (?),
(try me at osmeh.FON.Uni-Bg.YU as dex) ////// ..dex..
pascal.768sale,
> Repeat
> šposao...ć
> Until KeyPressed
>
> trenutku iz nje da izdjem? Jedino sto ja "vidim" je da posle
> svake komande stavim If PressedKey then... ali ni to nije nesto
> jer ako imam Delay (10000) (10sec) opet nece raditi, a i mnogo je
> primitivno...
Može ovako: a) napraviš svoj delay koji proverava i pritisak na tastaturu
b) napraviš svoj handle keyboard interrupta koji će da natera
program da skoči na određeno mesto ako pritisneš taster.
(ako hoćeš ovako, daj da razradimo.)
> program ce se zavrsiti i ponovo startovati). Ali, kako isprazniti
> taj Keyboard bafer? Ima jedno resenje u vidu ch := ReadKey, ali
> to je dosetka, a ne resenje...
KeyPressed nikada ne dira buffer - on i treba samo da javi da li ima nečega
ili ne. Najelegantnije je upravo to da se stavi ch:=readkey; ali ima i to
manu: ako pritisneš neki funkcijski taster, u buffer stižu dva znaka - prvi je
0 a drugi zavisi od toga koji je taster pritisnut. Tako da i ovo ch:=readkey
će da ostavi ovo drugo.
Zato: while keypressed do ch:=readkey; tik iza unitl keypressed;
Sale
pascal.769lovro,
=- I pod broj 2, kad je ovo Until KeyPressed tik ispred
procedure clbuf;
var kbdhead: word absolute $40:$1A;
kbdtail: word absolute $40:$1C;
begin
kbdtail:=kbdhead;
end;
pascal.770lovro,
=- 0 a drugi zavisi od toga koji je taster pritisnut. Tako da
=- i ovo ch:=readkey ce da ostavi ovo drugo.
Nece.
pascal.771ognjen,
)-> Ne kazem da je to najbolje (cak suprotno - veoma je
)-> primitivno), ali radi posao.
Da, lepo radi. :) Tnx! :)
pascal.772ognjen,
)-> a) napravis svoj delay koji proverava i pritisak na tastaturu
Kako? :)
)-> b) napravis svoj handle keyboard interrupta koji ce da natera
)-> program da skoci na odredeno mesto ako pritisnes taster.
Kako? :)
pascal.773ognjen,
)-> procedure clbuf;
)-> var kbdhead: word absolute $40:$1A;
)-> kbdtail: word absolute $40:$1C;
)-> begin
)-> kbdtail:=kbdhead;
)-> end;
E, a da li bi mogao da objasnis sta stâ radi...
pascal.774markom,
*** E, a da li bi mogao da objasnis sta stâ radi...
Isprazni bafer tastature ;)
Marko
pascal.775peca.st,
!-> E, a da li bi mogao da objasnis sta stâ radi...
kbdhead ti je početak tastaturnog bafera, a
kbdtail je kraj. Kada postaviš da kraj bude na početku,
znači da u baferu neće biti ništa.
Peđa.
pascal.776dzakic,
> )-> a) napravis svoj delay koji proverava i pritisak na tastaturu
>
> Kako? :)
Recimo:
Procedure MyDelay(i:word);
begin
repeat
delay(1);
dec(i)
until KeyPressed or (i=0);
end;
Mada, bojim se da vreme izvršavanja ove procedure neće biti baš
jednako vremenu izvršavanja pravog Delay-a, pogotovu na XT-u :).
> )-> b) napravis svoj handle keyboard interrupta koji ce da natera
> )-> program da skoci na odredeno mesto ako pritisnes taster.
>
> Kako? :)
Mora da se sale šalio :). Nije baš preporučljivo u paskalu tek
tako iz interapt hendlera skakati na proizvoljno mesto u
programu. Ima brdo razloga, siguran sam da problem možeš rešiti
i bez toga. Osim, naravno, ako ne želiš da tim pritiskom na
taster iskočiš načisto iz programa...
pascal.777dzakic,
> )-> procedure clbuf;
> )-> var kbdhead: word absolute $40:$1A;
> )-> kbdtail: word absolute $40:$1C;
> )-> begin
> )-> kbdtail:=kbdhead;
> )-> end;
>
> E, a da li bi mogao da objasnis sta stâ radi...
Bafer za tastaturu je običan kružni bafer, od inicijalno 16
wordova u biosovom data segmentu (40h). Pokazivač na početak i
kraj bafera se takođe nalaze među tim biosovim promenljivama na
adresama 1Ah i 1Ch. Uprošćeno, kada stisneš taster, bios njegov
scan i ascii kod stavi na mesto gde pokazuje kbdhead i uveća ga
za dva (word), a kada neki program traži da pročita šta je
pritinsuto (ReadKey), bios pokupi sadržaj lokacije na koju
ukazuje kbdtail i uveća ga za dva. Kad je bafer prazan, kbdhead
je jednak kbdtail-u, i na taj način radi KeyPressed - proverava
da li su jednaki.
Procedura clbuf je koliko se sećam objavljena u bajtovima i radi
ovo izjednačavanje pointera na 'glavu' i 'rep'. Pošto se radi o
promenljivama koje ne pripadaju paskal programu, već su 'negde
daleko' - u biosovom segmentu, korišćena je absolute direktiva
koja kazuje kompajleru gde se one nalaze.
pascal.778ndragan,
/ Zato ti pri zavrsxetku programa karaktr 'iskocxi' na ekran...
Koji je Set Code za korisnika postmast?
Bue_ Ndragan
pascal.779dpriest...,
Problem(?):
Pascal (7.0) kada se uradi OVRInit(xxx.ovr) ostavi
.ovr fajl nedostupan za mrezu, sto rezultira time
da ako je taj .ovr fajl na serveru a neko hoce da ga
kopira, dobija gresku File share violation. Ista greska
se desava i ako pokusam da radim OVRInit sa stanice na
.ovr file na serveru... normalno... I STA SAD?
Znam da ima neka konstanta u overlay unit-u koja se
zove filemode ili nesto slicno, ali ne znam na sta da
je postavim da bi goreopisani problem bio resen...
ako iko nesto zna o ovome neka mi ma wr ili ako
mislite da je problem zanimljiv pomagajte ovde! Da li
ima razlike ili nekih ogranicenja kada se omoguci da
vise programa koristi jedan .ovr na mrezi?
HELP!
DPriest...
P.S. postavio sam taj fajl u setovanju mreze da ga
mogu u isto vreme otvoriti vise korisnika tako
da problam ne pravi mreza vec pascal!
pascal.780dejanr,
>> Pascal (7.0) kada se uradi OVRInit(xxx.ovr) ostavi
>> .ovr fajl nedostupan za mrezu, sto rezultira time
>> da ako je taj .ovr fajl na serveru a neko hoce da ga
>> kopira, dobija gresku File share violation.
Probaj da tom .ovr fajlu staviš read only atribut pre startovanja
programa. Trebalo bi da pomogne.
pascal.781ognjen,
Kako da u pascalu dobijem "spisak" svih fajlova, a kako
"spisak" direktorijuma. Recimo, hocu da obrisem sve fajlove & sve
direktorijume da uklonim, kako to da uradim (ne, ne sa XRD :)?
pascal.782ognjen,
Kako u pascalu resiti View nekog fajla (osnovne komande: Up,
Down, PgUp, PgDn, Home, End) velicine (do) 32 Kb? (A kako vece
fajlove?)
pascal.783dzakic,
> Pascal (7.0) kada se uradi OVRInit(xxx.ovr) ostavi
> .ovr fajl nedostupan za mrezu, sto rezultira time
Promenljiva filemode je u system unitu, i pre otvaranja datoteke
postaviš je na vrednost koju dobiješ sabiranjem po jedne iz ove
dve grupe:
const
readonly = 0;
writeonly = 1;
readwrite = 2;
compatibility = 0;
exclusive = 16;
denywrite = 32;
denyread = 48;
permitall = 64;
Probaj da pre inicijalizacije overlay manager-a staviš
filemode:=readonly+denywrite; Ako filemode nisi dirao, biće
compatibility, a to nekad zna da pravi probleme. Sa share-om iz
dosa radi u desqview-u a neće u windowsima. Na mreži nije bilo
problema.
pascal.784peca.st,
!-> Kako da u pascalu dobijem "spisak" svih fajlova, a kako
!-> "spisak" direktorijuma. Recimo, hocu da obrisem sve fajlove & sve
!-> direktorijume da uklonim, kako to da uradim (ne, ne sa XRD :)?
Pomoću FindFirst i FindNext. Za sve fajlove i direktorijume na disku
najlakše je uraditi rekurzijom.
Peđa.
pascal.785peca.st,
!-> Kako u pascalu resiti View nekog fajla (osnovne komande: Up,
!-> Down, PgUp, PgDn, Home, End) velicine (do) 32 Kb? (A kako vece
!-> fajlove?)
Za fajlove do 64k pamtiš ih cele u nekoj strukturi, sad zavisi kako
ti odgovara. A za šetanje kroz fajl... Jedini savet je da ideš direktno
u video memoriju, nemoj slučajno write. Ostalo već moraš sam da smisliš,
zavisno od potreba. Možeš da pogledaš kako je to urađeno u Turbo Vision-u,
ili ako ti odgovara okolina (a i programiranje u TV) i da koristiš to.
Peđa.
pascal.786dvesic,
>>
>> Kako da u pascalu dobijem "spisak" svih fajlova, a kako
>> "spisak" direktorijuma. Recimo, hocu da obrisem sve fajlove &
>> sve direktorijume da uklonim, kako to da uradim (ne, ne sa XRD
>> :)?
Mozda ovako :
uses Dos;
var
DirInfo: SearchRec;
begin
FindFirst('*.*', AnyFile, DirInfo);
while DosError = 0 do
begin
{ If (DirInfo.Attr And Directory)<>0 Then } <-- Obrada za dir-ove.
WriteLn(DirInfo.Name);
FindNext(DirInfo);
end;
end.
pascal.787dzakic,
> Kako da u pascalu dobijem "spisak" svih fajlova, a kako
> "spisak" direktorijuma. Recimo, hocu da obrisem sve fajlove & sve
Pogledaj u helpu procedure FindFirst i FindNext. Dobijaćeš redom
datoteke i direktorijume iz dir-a, a proverom atributa ćeš
ustanoviti o čemu od to dvoje se radi.
pascal.788dzakic,
> Kako u pascalu resiti View nekog fajla (osnovne komande: Up, Down,
> PgUp, PgDn, Home, End) velicine (do) 32 Kb? (A kako vece fajlove?)
Sad, problem je malo obimniji da ti šaljem ovde gotovu proceduru. Do
32k ne bi trebalo da je problem. Učitaš celu datoteku u toliki
bafer, i za svaku liniju usmeriš po jedan pointer na njen početak u
baferu. Kod pomeranja na dole, poslednji pointer uvećavaš dok ne
nađeš sledeću liniju a ostale pointere pomeriš na gore (text ide
gore). Slično je i za scroll u suprotnom smeru.
Uz malo truda će tih 32k... (ili možda bolje 48, tako sam ja radio
kad sam pisao Z za herkules) biti 'prozor' za pogled na neku
veeeliku datoteku. Treba samo da prilikom traženja sledeće linije
proveriš da li si ispao iz bafera i ako jesi, onda poslednjih 16k
prebaciš na početak, a od 16-tog kilobajta učitaš sledećih 32...
Opet, isto važi i za vraćanje unazad. Naravno, ima tu posla. Možda
da probaš sa turbovizijom?
pascal.789peca.st,
!-> Mozda ovako :
Ovako samo u trenutnom direktorijumu.
Za čitav disk je potrebna rekurzija.
Peđa.
pascal.790almi,
Ovo je unit za korišćenje fontova koji idu uz VGAMax (vidi YU-dir na SEZAM-u).
Postoje sledeće procedure:
Procedure InitFont(s:String;si:Byte);
-inicijalizacija fonta iz fajla S ,cija su slova visine SI
pr.:Hoćemo da inicijalizujemo font swiss.f16 -> InitFont('swiss.f16',16);
Procedure DrawChar(CurX,CurY:Word;ch:Char);
-Crta znak Ch na koordinatama (CurX,CurY)
pr.:DrawChar(100,100,'C');
Procedure WriteTextXY(CurX,CurY:Word;S:String);
-Crta string S na koordinatama CurX,CurY
Procedure DoneFont;
-Dispose Fonta (***OBAVEZNO URADITI NA KRAJU PROGRAMA***)
Procedure SetFontSize(z:Byte);
-Uvećavanje Fonta
Procedure SetInversFont;
-Invertuje BitMapu Fonta;
Pozdra Almi.
vfont.zippascal.791boris,
> Pomoću FindFirst i FindNext. Za sve fajlove i direktorijume na
> disku najlakše je uraditi rekurzijom.
Mislim da mu može pomoći članak Vlade Kostića iz nekih starih računara
pod nazivom "Rekurzivna trka po disku". Tamo se radi samo sa
direktorijumima (ako se ne varam) ali nije teško ukapirati princip i
proširiti i na fajlove.
Boris
pascal.792mjova,
> -inicijalizacija fonta iz fajla S ,cija su slova visine SI
dužinu datoteke podeli sa 256 i dobićeš visinu fonta.
pascal.793peca.st,
!-> Mislim da mu može pomoći članak Vlade Kostića iz nekih starih
!-> računara pod nazivom "Rekurzivna trka po disku". Tamo se radi samo
!-> sa direktorijumima (ako se ne varam) ali nije teško ukapirati
!-> princip i proširiti i na fajlove.
Ma evo otprilike skicirano kako bi to trebalo da izgleda:
Procedure KrozCeoDisk (...);
Begin
FindNext (...);
Ispis (...);
If "direktorijum" Then Begin
ChDir (Ime);
KrozCeoDisk (...);
ChDir ('..');
End;
If DosError = 0 Then KrozCeoDisk (...);
End;
I to je sva mudrost.
Još pre poziva procedure treba uraditi FindFirst i preći u root.
Peđa.
pascal.794ognjen,
)-> Pomocu FindFirst i FindNext. Za sve fajlove i direktorijume
)-> na disku najlakse je uraditi rekurzijom.
Moze li jedan primercic... Please...
pascal.795ognjen,
Kako da iskljcim / ukljcim / promenim velicinu kursora u pascalu?
pascal.796dvesic,
>> Procedure KrozCeoDisk (...);
>> Begin
>> FindNext (...);
>> Ispis (...); <--- (1)
>> If "direktorijum" Then Begin
>> ChDir (Ime);
>> KrozCeoDisk (...);
>> ChDir ('..'); <---- (2)
>> End;
>> If DosError = 0 Then KrozCeoDisk (...);
>> End;
>>
>> I to je sva mudrost.
>> Jos pre poziva procedure treba uraditi FindFirst i preci u
>> root.
Pa sad, nisam bas siguran :))
Ko ti garantuje da ce struktura koju je dos formirao na
mestu (1) biti ista kao na mestu (2) tako da dos zna gde
da nastavi ?
Probaj ovaj prgram i videces da bas i ne radi !
Pozdrav,
Dejan.
pascal.797dzakic,
> Kako da iskljcim / ukljcim / promenim velicinu kursora u pascalu?
Evo procedura za gašenje i paljenje kursora. Potrebno je prvo
sačuvati njegovu veličinu pozivom StoreCursor, i nakon toga sa
Hide i ShowCursor ga isključuješ i uključuješ. Za promenu veličine
izmeni ShowCursor tako da se ch i cl pune vrednostima za liniju u
kojoj kursor počinje i prestaje...
var cursorstatus:word;
Procedure StoreCursor; assembler;
asm mov ah,3
int 10h
mov cursorstatus,cx
end;
Procedure HideCursor; assembler;
asm mov ah,1
mov cx,$2000
int 10h
end;
Procedure ShowCursor; assembler;
asm mov ah,1
mov cx,cursorstatus
int 10h
end;
Zak
pascal.798dzakic,
> Probaj ovaj prgram i videces da bas i ne radi !
U pravu si. Rekurzivna procedura treba prvo da pozove samu sebe
za sve poddirektorijume pa onda da ispiše sve datoteke u tekućem
diru.
pascal.799peca.st,
!-> Probaj ovaj prgram i videces da bas i ne radi !
Da, u pravu si, probao sam i pre nego što sam pročitao
poruku. Ono sam kucao iz glave. Treba ipak opaliti findfirst
kad se pređe u novi direktorijum.
Peđa.
pascal.800ognjen,
)-> Procedure StoreCursor; assembler;
~~~~~~~~~
Moze li se to uradiri malo vise "pascalski"?
pascal.801markom,
*** Moze li se to uradiri malo vise "pascalski"?
Mnogo oćeš, nije ovo C :(
Marko
pascal.802ilazarevic,
> Moze li se to uradiri malo vise "pascalski"?
Može isto to, samo u paskal sintaksi:
uses dos;
var cursorstatus:word;
regs:registers;
procedure StoreCursor;
begin
regs.ah:=3;
intr($10, regs);
cursorstatus:=regs.cx;
end;
i tako dalje, za sve ostale procedure.
pascal.803dzakic,
> )-> Procedure StoreCursor; assembler;
> Moze li se to uraditi malo vise "pascalski"?
Može, ali bi opet išlo sa deklarisanjem Registers strukture koju
bismo napunili određenim vrednostima za registre (r.ax, r.cx...)
i na kraju pozvali interapt sa Intr($10). Ako već koristiš
TP 6.0 ili veći, nema razloga da procedura ne bude 'assembler' -
kraći je kod. Dakle, ako baš hoćeš:
uses dos;
var cursorstatus:word;
Procedure HideCursor;
var r:registers;
begin
r.ah:=3;
Intr($10,r);
cursorstatus:=r.cx;
end;
itd.
Nešto mi i ne izgleda mnogo paskalskije :)
pascal.804almi,
Znam ali to je čisto onako parametar tako da se to da izmeniti u source-u
Pozdrav Almi
pascal.805paki,
> Moze li se to uradiri malo vise "pascalski"?
Teško, ali šta smeta ovome? Em je brzo, em je kratko :)
pascal.806tij.ma.ta.,
cvcxvxc xcvzxcv
pascal.807ognjen,
)-> Tesko, ali sta smeta ovome? Em je brzo, em je kratko :)
Fali sto nista ne kapiram... :(
pascal.808markom,
*** Fali sto nista ne kapiram... :(
Za početak je odlično! Zamisli da sve znaš, onda nije zanimljivo, zar ne :))
Marko
pascal.809peca.st,
!-> Fali sto nista ne kapiram... :(
Uzmi Norton Guide za asembler i malo čeprkaj tamo po
DOS funkcijama, interaptima i BIOS pozivima, ako baš želiš da ukapiraš.
Možeš usput i da naučiš nešto od asemblera. :)
Peđa.
pascal.810dzakic,
> )-> Tesko, ali sta smeta ovome? Em je brzo, em je kratko :)
> Fali sto nista ne kapiram... :(
Što ne kažeš da hoćeš da ukapiraš :). U BIOSu postoji potprogram
koji je zadužen za promenu veličine kursora. Poziva se tako što
se registri napune određenim vrednostima i onda pozove int 10h.
> 01H set cursor size/shape (text modes).
> Input: AH = 01H
> CH = start line (0-1fH; 20H=no cursor)
> CL = end line (0-1fH)
Sad, veličina kursora se zadaje ovako:
˙˙˙˙˙˙˙˙˙˙˙˙
˙˙˙˙˙˙˙˙˙˙˙˙
˙˙˙˙˙˙˙˙˙˙˙˙
˙˙˙˙˙˙˙˙˙˙˙˙
˙˙˙˙˙˙˙˙˙˙˙˙
˙˙˙˙˙˙˙˙˙˙˙˙
xxxxxxxxxxxx <-- End line
xxxxxxxxxxxx
xxxxxxxxxxxx <-- Start line
Da bi se kursor isključio, postaviš da je start line 'iznad' end
line i na taj način kursor postaje nevidljiv. U techelpu se
preporučuje da start linija bude 32. Kako izgled kursora zavisi
od video karte (na cga je visina znaka 8, na ega 14, na vga
16...) uradili smo čuvanje originalnog izgleda u promenljivoj
cursorstatus, da bismo kad nam treba ponovno paljenje vratili
vrednosti kako su bile.
Dakle, iz paskala direkno ne može. Pozivanje biosa je neizbežno.
A mislim da je najbezbolnije pomoću 'procedure assembler'.
pascal.811paki,
> )-> Tesko, ali sta smeta ovome? Em je brzo, em je kratko :)
>
> Fali sto nista ne kapiram... :(
Äta da kapiraä? Stvar radi, i . :)
pascal.812markom,
*** Äta da kapiraä? Stvar radi, i . :)
Paki, set kode :))
Marko
pascal.813ognjen,
)-> Uzmi Norton Guide za asembler i malo ceprkaj tamo po . . .
Gde je? :)
pascal.814ognjen,
)-> Sto ne kazes da hoces da ukapiras :). U BIOSu postoji
)-> potprogram koji je zaduzen za promenu velicine kursora.
)-> Poziva se tako sto se registri napune odredenim vrednostima i
)-> onda pozove int 10h.
Ma nije problem ukapiati kad bih ja znao nesto o memoriji &
biosu & adresama... Ali, posto o tome definitvno nemam veze, ne
ostaje mi nista drugo, nego da radim "suvi" pascal.
Imate li neke predloge iz literature o memoriji?
pascal.815peca.st,
!-> Gde je? :)
Pa... moraćeš da ga nabaviš sa strane, Nortonove stvari nisu PD.
Peđa.
pascal.816peca.st,
!-> Imate li neke predloge iz literature o memoriji?
Konkretno za ovo ti treba znanje o interaptima više nego o
memoriji. E, sad, neko ko ume lepo da objašnjava (a to je Zak ;)
bi ukratko mogao u par rečenica da ti kaže šta su interapti,
to nije nešto specijalno teško.
Peđa.
pascal.817lovro,
=- Dakle, iz paskala direkno ne moze. Pozivanje biosa je
=- neizbezno. A mislim da je najbezbolnije pomocu 'procedure
Mislim da moze direktnim pisanjem u memoriju, negde na 0:4xx
pascal.818drpr,
Haj,
potreban mi je algoritam za rešavanje dseterminanti bilo kog reda, recimo
<10 pa molim dobru dušu da znanje podeli samnom :).
cope
pascal.819paki,
> Paki, set kode :))
Sorry :( Ovaj put sam ubacio '..set code custom2' u autoexec.
Nadam se da više neće biti ovakvih brljotina.
pascal.820ilazarevic,
> Ma nije problem ukapiati kad bih ja znao nesto o memoriji &
> biosu & adresama... Ali, posto o tome definitvno nemam veze, ne
Uzmi lepo DOS Referens, ili Interapt list, i prelistaj. Ima mnogo lepih i
korisnih stvari.
pascal.821nick,
Moj mladjani komsija me je zamolio da ovde zamolim
vas, poznavaoce pascala da mu na nekom elementarnom
primeru objasnite upotrebu pointera. Najbolje bi bilo
isti problem resen sa i bez upotrebe pointera.
hvala.
pascal.822ognjen,
)-> E, sad, neko ko ume lepo da objasnjava (a to je Zak ;) bi
)-> ukratko mogao u par recenica da ti kaze sta su interapti
Cekam(o?) objasnjenje... :)
pascal.823ognjen,
)-> Uzmi lepo DOS Referens, ili Interapt list, i prelistaj. Ima
)-> mnogo lepih i korisnih stvari.
To su, pretpostavljam knjige. :) Imas li ih?
pascal.824markom,
*** primeru objasnite upotrebu pointera. Najbolje bi bilo
*** isti problem resen sa i bez upotrebe pointera.
*** hvala.
Pamćenje sadržaja ekrana:
-------------------------
program SaPointerom;
uses
Crt;
type
VMEM = array [1..4000] of Byte;
var
x,
y : Byte;
VM,
ZE : ^VMEM;
begin
VM := Ptr($B000, $8000); { Za hercules promeniti $8000 u $0000 }
New(ZE);
x := WhereX;
y := WhereY;
ZE^ := VM^;
ReadLn;
ClrScr;
ReadLn;
VM^ := ZE^;
GoToXY(x, y);
Dispose (ZE);
end.
program BezPointera;
uses
Crt;
var
i : Word;
x,
y : Byte;
VM : array [1..4000] of Byte absolute $B000:$8000;{ Opet isto ono za herca }
ZE : array [1..4000] of Byte;
begin
for i := 1 to 4000 do
ZE[i] := VM[i];
x := WhereX;
y := WhereY;
ReadLn;
ClrScr;
ReadLn;
for i := 1 to 4000 do
VM[i] := ZE[i];
GoToXY(x, y);
end.
Ovo radi samo u 80*25 tekst modu. Moguće je da se potkrala neka greškica jerbo
sam ovo kucao onako napamet, bez probe O:)
Marko
pascal.825peca.st,
!-> To su, pretpostavljam knjige. :) Imas li ih?
To nisu knjige, ili bar nisu u papirnom obliku. :)
Mislim da ih ima na Sezamu, ali je to u stvari samo
spisak koji služi onima koji znaju šta su interapti i
tako te stvari...
Peđa.
pascal.826pedjak,
> potreban mi je algoritam za rešavanje dseterminanti bilo kog reda,
> recimo <10 pa molim dobru dušu da znanje podeli samnom :).
Gausov metod ?
pascal.827ilazarevic,
> To su, pretpostavljam knjige. :) Imas li ih?
Ne, to su DOC-ovi kojih ima i na Sezamu. U njima je popisano šta koji
interapt sve radi, po funkcijama, koje vrednosti vraća itd. Sve
sistematizovano i pregledno, dušu dalo za slučajno pretraživanje jednom
dnevno :)
pascal.828eagle,
> potreban mi je algoritam za rešavanje dseterminanti bilo kog
> reda, recimo <10 pa molim dobru dušu da znanje podeli samnom
Može recimo ovako - matrica se svede Gausovim postupkom na
trougaonu, i onda se determinanta dobije množenjem elemenata
sa glavne dijagonale.
det.zippascal.829drpr,
>Može ovako recimo - .... Gausov metod
To je ok, samo mi izgleda nekako neprecizno za cele brojeve koliko se
ja sećam Gausovog metoda :(
cope
pascal.830postmast,
Path: fon!buefhp.etf.uni-bg.yu!td00491d
From: td00491d@buefhp.etf.uni-bg.yu (Terzic Dragan)
Subject: Re: pascal
Organization: Fakultet Organizacionih Nauka, Beograd
Date: Tue, 15 Mar 1994 14:38:16 GMT
Message-ID: <CMpnBt.2H5@fon>
X-Newsreader: TIN [version 1.2 PL1]
References: <sezam$pascal:001.0095.4279@sezam> <sezam$pascal:01.095.4282@sezam>
Sender: news@fon (News)
Imam kod kuce gotov algoritam, kad sledeci put sednem za hp. poslacu ga.
(najkasnije do petka)
Terza
pascal.831eagle,
> To je ok, samo mi izgleda nekako neprecizno za cele brojeve
> koliko se ja sećam Gausovog metoda :(
Ne verujem da postoji neki efikasan algoritam bez deljenja,
pa bi tip morao biti real. Ako imaš sve cele brojeve, onda
na kraju uradiš round i tako dobiješ precizno rešenje, jer
ako je mat. celobrojna, i determinanta mora biti ceo broj.
pascal.832ognjen,
Kako da sredim ovo:
function myfirst (ogi: real/integer/loingint): string
~~~~~~~~~~~~~~~~~~~~~
Daklem, kako da sredim da moze da se zada i realan broj, i ma
koji drugo...
Ili, jos konkretnije, kako da napravim STR funkciju (ne
proceduru, ona je ugradjena!).
pascal.833drpr,
-> Ne verujem da postoji neki efikasan algoritam bez deljenja,
-> pa bi tip morao biti real. Ako imaš sve cele brojeve, onda
Problem nastaje ako je matrica tipa ineger (word) tada deljenje
postaje problem, ali čekam odgovor kolege sa fona pa nastupam
sa daljim rešavanjem malo izmenjenog Gausa (tako što tražim nzs
itd...).
cope
pascal.834drpr,
Jedva čekam da vidim algoritam i hvala u napred.
cope
pascal.835bole,
Hi!
Jel zna neko kako mogu da pustam semplove (.SAM ili .VOC ili .WAW) na sb-u,
spikeru?
prednost sb!
:)
ajde cao
pascal.836vitez.koja,
#=> Ne verujem da postoji neki efikasan algoritam bez deljenja,
#=> pa bi tip morao biti real. Ako imaš sve cele brojeve, onda
Pa na primer razvoj determinante po nekom redu (koloni): Od
determinante n x n dobiješ n determinanti (n-1) x (n-1) i tako dalje
dok ne dodješ do 3x3 (dalje znaš). Rekurzija se nameće, ali problem
je što ovo ne obećava previše brzine :).
sk
pascal.837dvesic,
>> function myfirst (ogi: real/integer/loingint): string
>> ~~~~~~~~~~~~~~~~~~~~~
Jedno od resenja je da konstruises RECORD promenljivog
sadrzaja koji ce cuvati tip i vrednost promenljive, pa
da njega prosledis funkciji, odnosno pointer na njega.
pascal.838mcule,
>> ali cekam odgovor kolege sa fona pa nastupam
^^^^
Au brate, zaboravi.... Zaboravi... ;).
pascal.839pedjak,
> function myfirst (ogi: real/integer/loingint): string
> Daklem, kako da sredim da moze da se zada i realan broj, i ma
> koji drugo...
function myfirst(var ogi ):string;
pascal.840niklaus,
Subject: Re: Matrica know-how
(:> Pa na primer razvoj determinante po nekom redu (koloni): Od
(:> determinante n x n dobiješ n determinanti (n-1) x (n-1) i tako dalje
(:> dok ne dodješ do 3x3 (dalje znaš). Rekurzija se nameće, ali problem
(:> je što ovo ne obećava previše brzine :).
Ovaj Laplasov razvoj se čini boljom metodom, s obzirom da nema deljenja,
a samim tim i gubitka preciznosti, za kojom je neko kukao...
(: Sean :)
pascal.841dzakic,
> )-> E, sad, neko ko ume lepo da objasnjava (a to je Zak ;) bi
> )-> ukratko mogao u par recenica da ti kaze sta su interapti
>
> Cekam(o?) objasnjenje... :)
Uh. ;) Ja ti poslah na mail nešto što ti može pomoći. Lakše bi
bilo da sâm malo pogledaš o tome pa da onda pitaš šta te buni.
Sad, kad ste me već prozvali, da i kažem par rečenica (a ostali
samo posmatraju i čekaju da se ja vratim u bg :( ;).
Osnovno je da razumeš da je 'rutina za obradu interapta'
najobičniji potprogram - niz instrukcija koji se završava
naredbom IRET (interrupt return). Prekida ima 256 i namena im
je različita, nisu svi iskorišćeni. Treba razlikovati dve vrste
- hardverske i softverske interapte.
Softverske koristimo baš kao potprograme (koje obezbeđuju bios
ili dos) tako što ih pozivamo naredbom INT <broj>. Pre poziva
potprograma, u određene registre stavimo broj funkcije koju
želimo da izvršimo i eventualno dodatne informacije. Potprogram
po završetku rada vrati u određenim registrima rezultate
(ukoliko ih ima). Int 10h recimo služi za rad sa ekranom (bios),
dok je int 21h rezervisan za dos i sve njegove moguće i nemoguće
funkcije za rad sa datotekama i sl. Dokumentaciju o tome nađi u
nekoj od arhiva iz \ibmpc\info direktorijuma.
Hardverski interapt je potprogram koji poziva sâm računar u
određenim situacijama. Tada se sa programa koji se trenutno
izvršava skače na rutinu za obradu prekida, i po obavjenom poslu
vraća nazad. Najinteresantniji su interapti broj 8 i 9. Int 8 se
izvrši automatski 18.2 puta u sekundi (bios samo inkrementira
brojač vremena i proverava treba li ugasiti motor flopija). Int
9 se poziva prilikom svakog pritiska i otpuštanja tastera i
generiše ga tastatura (tada se na portu 60h nalazi scan kod
tastera koji je izazvao interapt).
Adresa na kojoj se nalazi potprogram za obradu prekida nije
fiksna. Upisana je u tabelu na samom početku memorijske mape,
pa se tako može podmetnuti neki drugi koji obavlja neke dodatne
poslove (tsr programi).
Nije mnogo, ali za početno snalaženje nadam se dosta.
pascal.842peca.st,
!-> Daklem, kako da sredim da moze da se zada i realan broj, i ma
!-> koji drugo...
Stavi samo realan, on pokriva i celobrojne, naravno.
Peđa.
pascal.843todorp,
Subject: pocetnicko pitanje :)
Hi!
Ucim paskal silom prilike (ucimo na fax-u) pa sam se zaglavio. Elem kako da
uradim nesto kao ovo u C-u:
int *temp;
temp=malloc(1000);
temp[10]=20;
e sad ja probao:
var temp:^integer;
begin
new(temp);
temp^[10]:=20; i nema sanse da ovo proguta
dispose(temp);
end.
Pozdrav od Todora
pascal.844eagle,
> Ovaj Laplasov razvoj se čini boljom metodom, s obzirom da nema
> deljenja, a samim tim i gubitka preciznosti, za kojom je neko
> kukao...
Ali je spor (reda n!).
pascal.845eagle,
> function myfirst (ogi: real/integer/loingint): string
> Daklem, kako da sredim da moze da se zada i realan broj, i ma
> koji drugo...
Nikako.
Možeš da ispetljaš nešto kao (var ogi; code: byte), gde code
označava tip koji prenosiš, ali je daleko jednostavnije da
napraviš tri različite funkcije.
pascal.846eagle,
> Ucim paskal silom prilike (ucimo na fax-u) pa sam se zaglavio.
> Elem kako da uradim nesto kao ovo u C-u:
> int *temp;
> temp=malloc(1000);
> temp[10]=20;
type max = array[0..maxint-1] of integer;
var temp: ^max;
begin
getmem(temp, 1000);
temp^[10] := 20;
freemem(temp, 1000);
end.
pascal.847niklaus,
(:> > Ovaj Laplasov razvoj se čini boljom metodom, s obzirom da nema
(:> > deljenja, a samim tim i gubitka preciznosti, za kojom je neko
(:> > kukao...
(:>
(:> Ali je spor (reda n!).
Ax, pa ne možemo dobiti i jare i pare...
(: Sean :)
pascal.848pedjak,
> e sad ja probao:
> new(temp);
> tempžŠ10Ć:=20; i nema sanse da ovo proguta
Probaj ovako:
type niz=arrayŠ1..10000Ć of integer;
pniz=žniz;
var temp:pniz;
getmem(temp,broj_clanova*sizeof(integer));
tempžŠ10Ć:=20;
GetMem je ekvivalentno sa Malloc u Cu.
pascal.849postmast,
From: td00491d@buefhp.etf.uni-bg.yu (Terzic Dragan)
Subject: Re: pascal
Date: Fri, 18 Mar 1994 09:28:06 GMT
Milos Dermanovic (eagle@sezam.UUCP) wrote:
: > To je ok, samo mi izgleda nekako neprecizno za cele brojeve
: > koliko se ja secam Gausovog metoda :(
: Ne verujem da postoji neki efikasan algoritam bez deljenja,
: pa bi tip morao biti real. Ako imas sve cele brojeve, onda
: na kraju uradis round i tako dobijes precizno resenje, jer
: ako je mat. celobrojna, i determinanta mora biti ceo broj.
Postoji sasvim prost algoritam bez deljenja, cak mislim da smo ga radili
u srednjoj skoli,(ako ne i u osnovnoj)
Ako je matrica reda n, prvih n-1 kolona prepises na kraj matrice,
zatim podjes od clana a(1,1) i pomnozis ga sa svima iz njegove dijagonale,
to ponovis sa a(1,2) i tako do a(a,n) i sve ih saberes.
Onda podjes od clana a(1,n+n-1) i njegov proizvod sa clanovima njegove
dijagonale oduzmes od zbira, pa uzmes a(1,2n-2) do a(1,n)
na primeru matrice 3*3 to izgleda ovako:
A B C!A B
D E F!D E
G H I!G H det=AEI+BFG+CDH-BDI-AFH-CEG
Nadam se da sam pomogao,
Terza
pascal.850eagle,
> Ako je matrica reda n, prvih n-1 kolona prepises na kraj
> matrice, zatim podjes od clana a(1,1) i pomnozis ga sa svima iz
> njegove dijagonale, to ponovis sa a(1,2) i tako do a(a,n) i sve
> ih saberes.
Ovaj se postupak može primeniti samo na determinante trećeg reda.
pascal.851isekulovic,
>> function myfirst(var ogi ):string;
To je i meni prvo palo na pamet, ali kako iz ogi-a dobiti string?
Str neće da odradi posao.
pascal.852todorp,
> type max = array[0..maxint-1] of integer;
Ovde je bio problem. Thanx svima na pomoci.
pascal.853ognjen,
Moze li se unutar funkcije (koja vraca string) uraditi:
funkcija := concat (funkcija, 'abc') ???? I, kako?
pascal.854dejanr,
>> Moze li se unutar funkcije (koja vraca string) uraditi:
>> funkcija := concat (funkcija, 'abc') ???? I, kako?
Ne, ako je funkcija ime te funkcije. To bi značilo rekurzivan poziv.
No uradi zaobilazno:
var rez: string;
...
rez:=concat(rez,'abc');
...
funkcija:=rez
pascal.855ognjen,
)-> Stavi samo realan, on pokriva i celobrojne, naravno.
Da, ali onda pretvoreno u string izgleda:
'12.0000000000000E00'
a ja bih hteo da za celobrojne bude:
'12'. BTW, pedjak je "nasao" resenje (var ogi).
pascal.856postmast,
From: td00491d@buefhp.etf.uni-bg.yu (Terzic Dragan)
Subject: cancel <CMusyv.M4M@fon>
Date: Sat, 19 Mar 1994 11:06:36 GMT
Article cancelled from within tin [v1.2 PL1]
pascal.857postmast,
From: td00491d@buefhp.etf.uni-bg.yu (Terzic Dragan)
Subject: Re: pascal
Date: Sat, 19 Mar 1994 11:18:57 GMT
: >Moze ovako recimo - .... Gausov metod
: To je ok, samo mi izgleda nekako neprecizno za cele brojeve koliko se
: ja secam Gausovog metoda :(
Juce sam poslao neki algoritam, ali koji je tacan samo za n<4.
Ako bas hoces da radis sa celim brojevima, ( I bez deljenja ),
zasto ne pokusas sa rekurzivnom procedurom, kao sto bi radio i rucno.
Znas ono, razvoj po koloni ili po vrsti.
Algoritam je reda slozenosti n! kao i gausov postupak, samo sto ga
rekurzija usporava. Ali ako simuliras rekurziju sa stekom, dobices
algoritam za cele brojeve koji je mozda brzi od gausovog postupka.
( jer ne koristi real )
Terzic Dragan, ETF
pascal.858vega,
*> Da, ali onda pretvoreno u string izgleda:
*>
*> '12.0000000000000E00'
*>
*> a ja bih hteo da za celobrojne bude:
*>
*> '12'. BTW, pedjak je "nasao" resenje (var ogi).
Pa probaj:
str(onaj_broj:0:3, onaj_string);
To ti je za tri decimale i daje kompromisno resenje: "12.000"
Pozdrav,
*#VOJAS#*
pascal.859eagle,
> Znas ono, razvoj po koloni ili po vrsti.
> Algoritam je reda slozenosti n! kao i gausov postupak, samo sto
Gausov postupak je inače reda n na treći, a onaj algoritam za
determinante preko Gausa je nešto brži, pošto se ne bavi elementima
iznad glavne dijagonale. U svakom slučaju, razlika je dirastična.
pascal.860ognjen,
)-> No uradi zaobilazno:
)-> var rez: string;
)-> ...
)-> funkcija:=rez
Pa, znam to, ali onda definisem nepotrebnu prmenjljivu rez,
sto, zauzima memoriju...
pascal.861dejanr,
>> > var rez: string;
>> > ...
>> > funkcija:=rez
>>
>> Pa, znam to, ali onda definisem nepotrebnu prmenjljivu rez,
>> sto, zauzima memoriju...
To je lokalna promenljiva u proceduri, dakle alocira se valjda na steku,
pa po izlasku iz procedure "umre". Dakle, prostor ne troši, ali troši
vreme. No, obzirom da nema drugog načina, i taj je dobar :)
pascal.862mmitrovic,
Ů█▀█Ţ-> Datum+vrijeme kreiranja volumeta. Po jedan word, tj standardni DOS
Ů█▀█Ţ-> format za iste. Izuzetno naivan način zaštite, ako mene neko pita:).
Ů█▀█Ţ
Ů█▀█Ţ Da demantujem:). Ovo je slučaj na mojim disk particijama, ali ne i na
Ů█▀█Ţ par disketa koje sam probao. Izgleda da je bitan i program kojim se to
Ů█▀█Ţ radi, diskove sam čini mi se formatirao sa DOS 5.0, a sada imam 6.0.
Ů█▀█Ţ Kako izgleda, nema DOS poziva koji generiše taj broj (?) već to radi
Ů█▀█Ţ program za formatiranje.
Ů█▀█Ţ--
Izvinjavamo se na ovako okasnelom odgovoru, ali bolje ikad no
nikad. Serial Number Diska se ne koristi za zaštitu, niti je za
to i predviđen (sad što ga neki koriste za zaštitu to je druga
priča). žak ga ni DOS ne koristi, jer je predvidjen kao osnova za
multitasking OSove kao što je Win, kojima služi za proveru da li
je prava disketa u flopyu. Primer: jedan task krene da čita flopy
sa Ser.Nm. 1234-5678 i biva privremeno suspendovan i za to vreme
drugi task traži svoju disketu sa drugim ser. brojem. Kad on
završi sa disketom (pošto ne mogu oba taska u isto vreme da čitaju
Win drži prvi task), Win pre nego što pusti prvi task proveri da
li je disketa u drajvu sa brojem 1234-5678 i ako nije traži da se
ubaci i tek onda pušta prvi task. Ovo mi se jednom dogodilo samo
se ne sećam kojim povodom.
_mmix_
pascal.863dragisha,
-> Izvinjavamo se na ovako okasnelom odgovoru, ali bolje ikad no
-> nikad. Serial Number Diska se ne koristi za zaštitu, niti je za
Dobro što si okasni, ali što meni odgovaraš?:)
-> priča). žak ga ni DOS ne koristi, jer je predvidjen kao osnova za
-> multitasking OSove kao što je Win, kojima služi za proveru da li
Ali on postoji i na raspolaganju je raznim keš programima i inima. To što
ga sam DOS ne koristi je samo još jedna od rupa u istom.
--
[MacIntosh: Computer With Training Wheels You Can't Remove]
pascal.864dejanr,
Evo jedne (odnosno dve :) zanimljive poruke sa BIX-a, vezane za BP 7.0 i
njegovu upotrebnu vrednost na raznim platformama i za razne tipove
projekata.
==========
pascal/turbo #4683, from j_mcarthur, 3817 chars, Tue Mar 8 22:30:33 1994
Comment to 4682. Comment(s).
----------
I never owned a copy of Turbo Pascal until version 6.0. Even after I
bought 6.0, I never used it. I much prefered Modula-2 and used it
instead.
Around the time 7.0 was announced, the data used by one application
had grown and caused me to slam into the 640K limit hard. The
application was a port of Tangle from WEB to Topspeed Pascal. I
could not get the company I worked for to spring for the dos extender
for Topspeed, so I bought the upgrade to 7.0 since it came with a dos
extender.
After seeing how easy it was to get a moderately sized application to
work in protected mode, I was sold.
I started work on a moderately nasty project that had to run under
Windows. Using Object Vision I had something up and running quite
quickly. Then we ran into a brick wall with Windows. Not really
Windows but an application we needed to interface to that ran under
Windows. So we backed up and changed the project to Dos. Moving
from Object Windows to Turbo Vision was not to terribly difficult.
But then that may have been because I am used to encapuslating my
user interface into a single module/unit.
I quickly put together a large application using Turbo Vision and the
Paradox Engine. It works quite well. We had over 20 people at a
time using it on our network doing online updating.
Now for the problems. The dos extender in the first release will not
work with Btrieve. Supposedly there is a fix for this, but I have
not bothered to get it.
The nastier problem is how the dos extender grabs all the available
memory. I am not sure of all the details. We have four versions of
TeX that run on the PC. The versions are small (only uses
conventional memory, it needs about 3-400K), big (only uses
conventional, ems and xms), 386 specific using VCMI (I think that is
the name) and 386 specific using DPMI.
The small version of TeX works like a champ when called from a
Borland Pascal program. The big version runs very very slowly.
This has something to do with the way BP 7.0's dos extender grabs all
the xms memory. If a file takes 20 seconds to process using big TeX
from the DOS command line, it will probably take 5 minutes to process
the same program from a BP Protected mode program. Both the VCMI and
the DPMI programs crash. They will not work from a BP protected mode
program.
In many ways it is easier for me to program for Windows. There is no
need for a dos extender, that is part of Windows. So I can call DPMI
programs without the problems I have under DOS.
I am currently working on yet another large project. This one is
still in the preliminary stages. But I need to deliver both a Dos
and Windows based solution. I am currently planning on using BP to
do this.
BUT, things change. There is a possibility I will have to do a
project for OS/2. If that is the case I will get authorization to
buy about $3,000 worth of tools. Those will include a new Modula-2
compiler that runs under Dos, OS/2, Windows, and Windows NT. I will
also get a dos extender from a third party; plus some other
libraries. With that tool set, I would again leave Pascal.
All in all, BP 7.0 is a nice package. It is well worth its $500
price tag. It is not perfect. It does have some limitations
(despite the Borland Ads).
On the other hand, if I was not concerned about linking in 3rd party
tools like the Paradox Engine. There is a very nice product called
OM2. This is a full Modula-2 and Oberon-2 compiler. It runs as a
protected mode application under Dos, Windows, or OS/2. It is truely
flat model. This means that records, objects, and arrays are no
longer limited to 64K. Nor are programs limited to 640K.
Unfortunately there is no way to link in any external libraries, at
this time.
Jeffrey M\kern-.05em\raise.5ex\hbox{\b c}\kern-.05emArthur
a.k.a. Jeffrey McArthur
==========
pascal/turbo #4684, from ccalvert, 245 chars, Wed Mar 9 14:35:08 1994
Comment to 4683.
----------
On Page 11 of the User's Guide there is an explanation of
how to limit the amount of protected mode memory that
RTM will use:
SET DPMIEM=MAXMEM 2000
where 2000 is the amount of memory in kbytes you want the run
time manager to access.
pascal.865postmast,
From: news@fon (News)
Subject: pascal
Date: Mon, 4 Apr 1994 13:31:59 GMT
Hi
Da li neko zna da DPMI program napravljen sa BP 7.0 pukne (General Protection
Fault) svaki put kada probate da pristupite pointeru koji je nil.
Da pojasnim:
type
PTip = ^TTip;
TTip = record
neki_podaci:...;
next, prev: PTip
end;
var
a: PTip;
temp: PTip;
begin
new(a);
a^.neki_podaci:=...
a^.prev:=nil; a^.next:=nil;
...
temp:=a^.prev <-- Ovde pukne mora da se uradi :
if a^.prev=nil
then temp:=nil
else temp:=a^.prev; !!!!!
Nisam probao kada je temp ne tipski pointer.
Srdjan
pascal.866dyura,
Imam problem.Preneo sam sa sezama TPU za rad sa dBase fajlovima ali kad
sam raspakovao i hteo da startujem neki od prilozenih programa uvek mi je bio
vracen [error 72 unit file format error TBase.TPU].Sta da radim? Napominjem
sve se desava u Borlandu v.7.0.
dyura
pascal.867mmitrovic,
Ů█▀█Ţ error 72 unit file format error TBase.TPU
Nabavi TPU za BP 7.0, ili nabavi source pa prevedi, ili napiši
svoj program u TP 6.0, ili jednostavno odustani od toga.
Choice is all yours ;)
pascal.868mmitrovic,
Otvorena je grupa TVision koja se bavi pisanjem proširenja za
Turbo Vision. I to i za OOPascal i za C++. Zainteresovani nek se
jave i nek pošalju neki programčić (što kraći, može i source)
pisan u TVisionu (proširenja se preferiraju više od korišćenja
postojećih objekata) pošto grupa nije za početnike.
pascal.869omega,
Da li Borland Pascal 7.0 obuhvata Turbo Pascal 7.0? Tj. to bi
znacilo da sa njim mogu da se pisu i dos i windows programi?
pascal.870dejanr,
>> Da li Borland Pascal 7.0 obuhvata Turbo Pascal 7.0? Tj. to bi
>> znacilo da sa njim mogu da se pisu i dos i windows programi?
Mogu da se pišu i DOS i Windows programi, bez problema.
DOS programi mogu da se pišu i "obično" i u DPMI režimu, kada imaju
više memorije... ali je i dalje struktura ograničena na 64k, fuj :(
pascal.871snemcev,
>> Otvorena je grupa TVision koja se bavi pisanjem proširenja za
DVesic je k'o stvoren za vas. Pitanje je samo koliko ima slobodnog
vremena na raspolaganju. Anyway, ako ovo čita, sam će se javiti.
pascal.872pedjak,
> Da li Borland Pascal 7.0 obuhvata Turbo Pascal 7.0? Tj. to bi
> znacilo da sa njim mogu da se pisu i dos i windows programi?
Da.
pascal.873omega,
Ţ Mogu da se pisu i DOS i Windows programi, bez problema.
Da li to znaci:
win programi se pisu u Borland Pascalu
dos programi se pisu u Turbo Pascalu 7.0,
a Turbo Pascal 7.0 je DEO Borland Pascala?
pascal.874dejanr,
>> > Mogu da se pisu i DOS i Windows programi, bez problema.
>>
>> Da li to znaci:
>> win programi se pisu u Borland Pascalu
>> dos programi se pisu u Turbo Pascalu 7.0,
>> a Turbo Pascal 7.0 je DEO Borland Pascala?
Pa... ne baš. Windows programi se pišu u Borland Pascalu. DOS programi
se takođe pišu u Borland Pascalu. Turbo Pascal je jeftinija verzija
Borland Pascala koja ne obuhvata podršku za Windows, DPMI i neke druge
stvari.
U svakom slučaju, kada uzmeš BP7.0 imaš kompletan paket, sve što treba
da bi pisao DOS, DOS+DPMI i Windows programe na paskalu.
pascal.875omega,
Ţ Pa... ne bas. Windows programi se pisu u Borland Pascalu. DOS programi
Ţ se takode pisu u Borland Pascalu. Turbo Pascal je jeftinija verzija
I dos programi se pisu pod windowsom?
pascal.876dejanr,
>> > Pa... ne bas. Windows programi se pisu u Borland Pascalu. DOS programi
>> > se takode pisu u Borland Pascalu. Turbo Pascal je jeftinija verzija
>>
>> I dos programi se pisu pod windowsom?
Mogu, ali ne moraju. Mogu i u DOS integrisanom okruženju. A mislim da ima
i kompajler iz komandne linije.
pascal.877dpriest...,
Ima li neko source za prikazivanje GIF-a ?
ako nema moracu da izgubim par dana da ga oravim iz
opisa GIF formata... POMAGAJTE JUNACI ! :(
pascal.878dpriest...,
opet ja... treba mi isto kao i u prethodnoj poruci
neki hint (citaj source) za prikazivanje TTF fontova
help...
P.S. iskljucivo za DOS! ne radim u AT 2 XT dev. kit. :)