pascal.111dejanr,
-> #107, bigbrada>> SwapVectors;
>> Exec ('C:\Ime.Bat', '');
>> SwapVectors;
Mislim da neće ići tako, treba exec ('C:\COMMAND.COM', '/C ime')
Ne zaboravi da $M direktivom ostaviš potrebnu količinu memorije.
Uzgred, sa exec mogu da se pozivaju "direktno" programi, bez COMMAND.COM,
ali to treba da budu isključivo izvršni programi, i mora se navesti puna
staza i ekstenzija. Ako se učitava COMMAND.COM, onda mogu i .BAT fajlovi,
i ne mora se navesti puno ime (mada ne škodi).
pascal.112dejanr,
-> #109, ognjen>> > type nizt: array [1..65000] of byte;
>>
>> Ovako se zauzme cela memorija dozvoljena za variables (64 Kb),
>> i nema meste ni za jednu promenjljivu.
Ne, ne i ne, nisi razumeo lepotu predloženog metoda :) Zauzima se
tačno onoliko prostora koliko je potrebno, i to uopšte (praktično
ni za bajt) ne tereti data segment u kome su promenljive.
Probaj, svideće ti se :)
PS Preporučujem i čitanje dokumentacije za TP, ili neke nezavisne
knjige... može i umetka iz "Računara" sa kraja prošle godine,
objašnjene su sve te stvari :)
pascal.113dzakic,
-> #107, bigbrada> Exec ('C:\Ime.Bat', '');
Ako se ne varam, ne bi moglo tako. Već:
Exec(GetEnv('COMSPEC'),'/c ime.bat');
pascal.114postmast,
From: stjepan@fon (Stjepan Nikolic)
Subject: Re: pascal
Date: Fri, 27 May 1994 02:51:41 GMT
Naravno, mnoogo je lakse ovo
type niz=array [1..200] of integer;
var x:niz;
n,i:integer;
begin
readln(n);
for i:=1 to n do
readln(x[i]);
for i:=1 to n do
writeln(x[i]);
end.
--
Stjepan Nikolic
Student, FON, Beograd
pascal.115markom,
-> #111, dejanr*** Mislim da neće ići tako, treba exec ('C:\COMMAND.COM', '/C ime')
Jock ni ovako, ja nemam COMMAND.COM u C:\ ...
SwapVectors;
Exec(GetEnv('COMSPEC'), ' /C ime');
SwapVectors;
Ovo je najsigurniji način :)
pascal.116omega,
-> #109, ognjenŢ )-> type nizt: array [1..65000] of byte;
Ţ Ovako se zauzme cela memorija dozvoljena za variables (64 Kb),
Ne. Da je umesto type pisalo var, onda bi tako bilo.
Ţ )-> nizp: ^niz;
^^^^^^^ Ovo je stamparska greska - treba ^nizt
Ţ )-> var niz: nizp;
Ovo je moglo i krace: var niz:^nizt; To znaci da je varijabla Niz pointer -
ona ne sadrzi vrednost NizaT vec adresu NizaT.
Tvoj program bi izgledao nekako ovako:
type
korisnik = record
ime : String[15] ;
prezime : String[30] ;
alias : String[14] ;
broj_poziva : LongInt ;
end;
k=array[1..5000] of ^korisnik;
{ Neka je maximalan broj korisnika 5000 }
var
korisnici:^k;
n:longint;
begin
readln(n);
getmem(c,sizeof(korisnik)*n*4);
{ Velicina recorda "korisnik"*broj korisnika*4 bytes za svaki pointer }
{ Da unapred znas da ih ima 5000, bilo bi sizeof(korisnik)*sizeof(k) }
c^[1]^.ime:='Pera';
c^[1]^.broj_poziva:=10;
freemem(c,sizeof(korisnik)*n*4);
end.
pascal.117nikac,
-> #115, markom>■ *** Mislim da nece ici tako, treba exec ('C:\COMMAND.COM', '/C
>■ ime')
>■
>■ Jock ni ovako, ja nemam COMMAND.COM u C:\ ...
>■
>■ SwapVectors;
>■ Exec(GetEnv('COMSPEC'), ' /C ime');
>■ SwapVectors;
>■
>■ Ovo je najsigurniji nacin :)
I jos da izbegnemo $M:
uses memory,dos;
SetMemTop(HeapPtr);
SwapVectors;
Exec(GetEnv('COMSPEC'), '/c ime');
SwapVectors;
SetMemTop(HeapEnd);
pascal.118kriss,
-> #107, bigbrada˙˙*>> Kako je i da li je uopste moguce iz TP-a startovati BAT
˙˙*>> fajl? Konkretno verzija 6.0.
˙˙
˙˙ Pa ovako nekako...
˙˙
˙˙ ...
˙˙ SwapVectors;
˙˙ Exec ('C:\Ime.Bat', '');
˙˙ SwapVectors;
˙˙ ...
Ne zaboravi
Uses Dos;
na početku
pascal.119mmitrovic,
-> #104, dzakicŮ█▀█Ţ> Korisna stvar za definisanje ASCIIZ stringova (bez bajta za
Ů█▀█Ţ> dužinu, sa #0 na kraju).
Ů█▀█Ţ const a:pchar='abcde'; ?
Mislio sam na
const a:packed array Š0..5Ć of char='abcdef'#0;
što radi na starim pascalima, kod novog Borlanda može i
tako. Naravno pchar stringovima trebaju posebne rutine za
manipulaciju, i nalaze su u Strings modulu.
pascal.120mmitrovic,
-> #110, ognjenŮ█▀█Ţ futer u fajl (ono ---(...)----brojporuke---) zbuni se, i
Ů█▀█Ţ proizvoljan broj "-" (uvek manji od trazenog (44)), i tu stane.
Sve ovo teorijski lepo zvuči, al' kakva ti je implementacija?
Daj neku rutinu na koju sumnjaš, ovako smo u mraku.
pascal.121ognjen,
-> #107, bigbrada)-> SwapVectors;
)-> Exec ('C:\Ime.Bat', '');
)-> SwapVectors;
Sta tacno radi SwapVectors, i da li je moguce ovo isto uraditi
i sa EXE, i COM fajlovima?
pascal.122dejanr,
-> #121, ognjen>> Sta tacno radi SwapVectors, i da li je moguce ovo isto uraditi
>> i sa EXE, i COM fajlovima?
SwapVectors premesti sve vektore procesora, sa nulte strane, u predviđeno
pordučje. Posle program može da radi šta 'oće (dobro... skoro ;) a drugo
SwapVectors će vratiti vektore u prethodno stanje, tako da ne bi trebalo
ni pod kakvim okolnosima da dođe do pada sistema.
Inače, iako se to swapvectors preporučuje, nije neophodno, ako je program
koji se startuje "kulturno" pisan (nije rezidentni i tako to). Mada ne
smeta da se uradi, radi sigurnosti :)
>> i da li je moguce ovo isto uraditi i sa EXE, i COM fajlovima?
"Ovo" je moguće uraditi samo sa EXE i COM fajlovima, a za .BAT treba
pozvati command.com, na način opisan ovde prethodnih dana.
pascal.124vitez.koja,
-> #122, dejanr#=> SwapVectors premesti sve vektore procesora, sa nulte
#=> strane, u predviđeno pordučje. Posle program može da
#=> radi šta 'oće (dobro... skoro ;) a drugo SwapVectors će
#=> vratiti vektore u prethodno stanje, tako da ne bi
#=> trebalo ni pod kakvim okolnosima da dođe do pada
#=> sistema.
Mada je sve ovo tačno, SwapVectors se koristi (bar ga ja
koristim) da bi 'child process' imao na raspolaganju normalne
vektore prekida - svaki program napravljem TPom preuzima nekoliko
vektora, pa se sa SwapVectors oni vraćaju na default stanje.
pascal.125sslavko,
Evo pripremio sam NG za Turbo Vision za Pascal 6.0. Probajte ga pa ako
ima nekih zamerki ili sugestija javljajte. Inače izvučen je iz
knjige tpr-book (ima je na sezamu). Mislim da može da bude
veoma koristan, kako početnicima tako i iskusnijim korisnicima TV-a.
Pozdrav.
tv.zippascal.126ognjen,
-> #112, dejanr)-> Zauzima se tacno onoliko prostora koliko je potrebno, i to
)-> uopste (prakticno ni za bajt) ne tereti data segment u kome
)-> su promenljive.
Evo, da probam da shvatim. Moj PC ima 640Kb osnovne memorije.
Od toga, moj pascal progaram rezervise za sebe 64Kb za podatke.
Ja definisem neki niz koji treba da se smesti _van_ data
segmenta, koji, ubr, moze biti velicine do oko 500Kb. Onda
popunjavam taj niz delimicno (znaci, ne popunim svih 500Kb), i
kako ga popunjavam, tako iskoriscavam memoriju. Znaci, iako je
taj niz definisan na velicinu 500Kb, on, u jednom trenutku, ne
mora zauzitati ni bajta memorije? Jesam li dorbro shvatio? :)
)-> PS Preporucujem i citanje dokumentacije za TP,
Ima li neko ovde kupljen Turbo PASCAL? Nek' mi se javi na
mail... :)
)-> moze i umetka iz "Racunara" sa kraja prosle godine,
)-> objasnjene su sve te stvari :)
Imam umetak, ali mi neije bas najjasnije. Za pocetakm sta
znace ona 2 zareza (type art_ptr = ,,artikl)?
pascal.127ognjen,
-> #120, mmitrovic)-> Sve ovo teorijski lepo zvuci, al' kakva ti je implementacija?
)-> Daj neku rutinu na koju sumnjas, ovako smo u mraku.
Najzanimljivije je sto ne sumanjam ni u sta. Sve je po mojoj
proceni - u redu. Tako da ne znam koji deo koda da podaljem. Evo
vam uz poruku ceo program (ima nekih viskova, jer je jos
nedovrsen, ali uglavnom radi), staruje se sa MAILSORT textpad.1
textpad.2 ... Gde su textpad-ovi fajlovi sa mail porukama (i samo
njima!), a pretpostavlja se da se zadaju redom, po datumu, tj
prvo fajl sa najstarijim porukama, pa mladje poruke...
E evo ovde delova koda:
MsgHeder = '=========================';
MsgBegin = '---------------------------------------------------';
begin
{$I-} {----------------------------------}
assign (WriteFile, WriteFileName); { Ovde se proverava da li }
reset (WriteFile); { TEXTPAD.NEW zaista postoji. Ako }
If IOResult=0 then { postoji, uzali u potprogram (da }
begin { ga obrise ili promeni ime) u su- }
end else { protnom upisuje u TEXTPAD.NEW }
Rewrite (WriteFile); {----------------------------------}
MsgCounter:=0; { Brojac poruka, resetuj }
For I := 1 to ParamCount do { Radi sa fajlovima zadatim u }
begin { komandnoj liniji }
Assign (ReadFile, ParamStr(I)); { Dedeli ime fajla iz kom. linije }
Reset (ReadFile); { Otvori za citanje... }
If IOResult<>0 then { Ako ima problema, }
begin { ispisuje poruku }
goto FastEnd; { i prekida program }
end;
repeat { until EOF }
repeat { ponavlja citanje liniju po }
ReadLn (ReadFile, RLine); { liniju, dok ne nadje poruku }
until RLine = MsgHeder;
readln (ReadFile, FrstHdLn); { kad je nadje, porocita prvu }
{ liniju zaglavlja i obradi je }
{ Uzima broj poruke, i ostalo... }
readln (ReadFile, ScndHdLn); { obradjuje i drugu liniju }
{ odatle uzima i MsgSize }
ReadLn (ReadFile, ReplyLn); { ako je poruka reply... }
If copy(ReplyLn, 1, 24) = ' Odgovor na poruku ' then
begin { nadje u nizu novi broj... }
ReadLn (ReadFile, ReplyLn);
end;
If ReplyLn = MsgBegin then { ako je do sada sve u redu: }
begin
{ Ovde uglavnom dodeli} I2:=0;
{ tacan broj, tako da } Repeat
{ ne bude prouka broj } Inc(I2);
{ 1, odgvor na 10234 } Until (I2=MsgCounter+1) or (MsgOrgNo[I2]=RepMsgNo);
{ U izlazni fajl } WriteLn (WriteFile, MsgHeder);
{ se upisuje heder} Write (WriteFile, MsgCounter+1:5);
{ ovde nije nikad } WriteLn (WriteFile, Copy(FrstHdLn, 6,
Length(FrstHdLn)-6));
{ bilo problema } WriteLn (WriteFile, ScndHdLn);
Write (WriteFile, ' Odgovor na poruku ');
WriteLn (WriteFile, I2);
WriteLn (WriteFile, MsgBegin);
For I2 := 1 to MsgSize do { Prepisuje sâm text poruke }
begin { koji je velicine MsgSize uzet iz 2 reda }
end; {hedera. Ponekad nije ceo text prepisan }
{ u poslednjoj poruci }
{ Ovde se pravi } ReadLn (ReadFile, EndLine);
{ promenjljiva } EndLineTemp := concat (MsgBegin);
{ EndLineTemp koja } Delete (EndLineTemp, 44, 5);
{ "govori" kako bi } Insert (MsgNoStr, EndLineTemp, 44);
{ trebalo da izgleda zadnja linija }
end;
{ Ako zadnja} If EndLine = EndLineTemp then
{ linija izgeda } begin
{ tako, onda uvecaj} Inc(MsgCounter);
{ brojac i zapamti } MsgOrgNo[MsgCounter] := MsgNo;
{ oroginali broj poruke}
{Sada dolazi problematicni deo!!!!!}
{ovo je jasno k'o} For I2 := 1 to 43 do
{dan, ispise 24 minusa} Write (WriteFile, '-');
MsgNoStr :='';
Str (MsgCounter, MsgNoStr);
For I2 := 1 to 5-Length(MsgNoStr) do
MsgNoStr:=concat (' ', MsgNoStr);
Write (WriteFile, MsgNoStr);
{ Ovde ubacuje blanko onoliko koliko trebada bi broj stao uz }
{ desnu marginu. Probao sam da stavim i :48, ali nije radilo, }
{ prebacuje u sledeci red }
WriteLn (WriteFile, '---');
{ I na kraju doda jos tri minusa, i predje u novi red }
{ zvuci savrseno, ali ne radi... :( }
WriteLn (WriteFile, '');
{ da bi izmedju svake poruke bio jedan prazan red }
GotoXY(1, WhereY);
Write ('U fajl ',UpCaseStr(WriteFileName),' je
upisano ', MsgCounter, ' poruka');
{ "U fajl TEXTPAD.NEW je upisano 123 poruka " }
end;
until eof(ReadFile);
Fast_close: Close (ReadFile);
end;
Fast_end:
end.
mailsort.paspascal.128ognjen,
-> #122, dejanr)-> SwapVectors premesti sve vektore procesora, sa nulte strane,
)-> u predvideno porducje.
Super, sve sam shvatio! ;) A, sad malo, na srpskom... :)
pascal.129.djn,
-> #97, asrdjan> Da li bi neko mogao da mi malo objasni pojam pointera.
Zasto ne pogledas u bilo kom udzbeniku Pascala ?
.djn
pascal.130asterix,
-> #129, .djn>> Da li bi neko mogao da mi malo objasni pojam pointera.
>
> Zasto ne pogledas u bilo kom udzbeniku Pascala ?
>
> .djn
Zato što hoće da mu neko ovde to objasni, pa ako već ne umeš
ili nećeš onda mu bar ovakve poruke šalji na mail !
pascal.131postmast,
From: stjepan@fon (Stjepan Nikolic)
Subject: Re: pascal
Date: Sun, 29 May 1994 23:23:09 GMT
Toplica Tanaskovic (toca@sezam.UUCP) je napisao:
: Kako je i da li je uopste moguce iz TP-a startovati BAT fajl?
: Konkretno verzija 6.0.
Pogledaj samo u helpu za SwapVectors, i sve ce ti se samo kazati:)
--
Stjepan Nikolic
Student, FON, Beograd
pascal.133postmast,
From: broker@setgate.setnet.co.yu (Predrag Supurovic)
Subject: Turbo Pascal 6.0
Date: Fri, 27 May 1994 19:54:00
PS>Ja imam TPBOOK, knjigu o TurboPascal-u u datoteci. Odmah da upozorim da
PS>je ogroooomna. Ako te zanima ostavi mi privatnu poruku.
VF> A, koliko je to mnogo ogroooomna? Pozdrav, wolleY.
300K arhivirano. Unutra je tekst. Knjiga je, inace, vrlo fina za
pocetnike, jer u tancine objasnjava osnove Turbo Pascala.
Nazalost, u nekim vaznim delovima se poziva na stampanu knjigu
istog autora.
broker
... BR> Gospode! Daj da u sledecem zivotu budem Vanzemaljac!
* Origin: Oreska BBS, UZICE = SF BIBLIOTEKA = SETNet: (38:101/101)
pascal.134postmast,
From: Darko.Andreevski@f108.n108.z38.setgate.setnet.co.yu (Darko Andreevski)
Subject: Pascal
Date: Sat, 28 May 1994 17:22:05
"P> Hi. Ako vas ne mrzi skinite ovaj pokusaj pravljenja jednog efekta
"P>mora i recite mi onda da li vam to lici na vodu i da li ga vredi stavljati
"P>u jedan intro. Radi *samo za tridend* kartice za sada, pa ako povoljno
"P>prokomentarisete mozda ce raditi i za ostale...
Dali bi mogao da possaljess source, bass me interesuje kako si to
uradio.....
okraD
p.s.Veoma me interesuju INTRO-a, DEMO-a i sl.
p.p.s.Ili bar mi kazzi gde si ostavio izvrssni file, pa da zamolim mog
SYSOP-a da ga prenese ovde (STRUGA BBS Makedonija)
* Origin: Struga BBS +389 96 74074 * Macedonia * SETNet: (38:108/108)
pascal.136postmast,
From: Srdjan.Stanisic@p1.f115.n38.z38.setgate.setnet.co.yu (Srdjan Stanisic)
Subject: Re: .PCX file reader
Date: Wed, 25 May 1994 17:26:00
-=> Quoting Braslav Sesartic to Srdjan Stanisic <=-
BS> Problem i jeste u tome sto mi treba unit za citanje PCX slika u 16
BS> boja do rezolucije 640x480. Samo dekodiranje linije nije problem, ali
BS> kako dalje? Kako iz paskala da od 4 RGB komponente (3+intenzitet)
BS> dobijem piksel odgovarajuce boje? (BTW "Tehnical Reference" imam).
Ja imam ZSoft PCX Technical Reference. Stvar je dobra. Probacu da
razbijem to u nekoliko poruka i posaljem ti na NET. S obzirom da mi
se blizi ispitni rok ne mogu ti reci kada ce to biti, ali ces
svakako dobiti.
BS> Zanimaju me sve "egzoticne" stvari vezane za paskal. Samo reci kako
BS> da dodjem do toga.
I ovo ostalo cu ti razbiti u poruke i slati preko NET.PASCAL.
Medjutim, to ce verovatno biti tek u julu, jer pre necu moci.
BS> BTW Skoro da preskocim poruku misleci da je za nekog drugog jer si mi
BS> pogresio i ime i prezime. :)
Izvini na gresci, ali kucao sam malo brze tekst i mora da sam
slucajno pretumbao tvoje ime.
Strajder
... Najveca brzina u svemiru je Brzina Gluposti!
* Origin: *TAURUNUM BBS +381 11 2354-253, 22 do 07* (38:38/115.1)
pascal.137mmitrovic,
-> #126, ognjenŮ█▀█Ţ kako ga popunjavam, tako iskoriscavam memoriju. Znaci, iako je
Ů█▀█Ţ taj niz definisan na velicinu 500Kb, on, u jednom trenutku, ne
Ů█▀█Ţ mora zauzitati ni bajta memorije? Jesam li dorbro shvatio? :)
U globalu, samo što jedna struktura (bar za sada) u Pascalu
može biti max 64k (tj. 64k-16b), usled segmentnih ograničenja
starijih procesora. :(
pascal.138mmitrovic,
-> #125, sslavkoŮ█▀█Ţ Evo pripremio sam NG za Turbo Vision za Pascal 6.0. Probajte ga pa ako
Ů█▀█Ţ ima nekih zamerki ili sugestija javljajte. Inače izvučen je iz
Lepo urađeno, nema šta.
Jedino što je malo verovatno da neko danas radi sa komandnim
prevodiocem i externim editorom, pa da ima potrebu za NG helpom.
BP IDE već pruža opširan help.
Opet da kažem, da ne ispadnem čangrizalo, lepo urađena stvar,
samo napred.
pascal.139dejanr,
-> #126, ognjen>> > Zauzima se tacno onoliko prostora koliko je potrebno, i to
>> > uopste (prakticno ni za bajt) ne tereti data segment u kome
>> > su promenljive.
>>
>> Evo, da probam da shvatim. Moj PC ima 640Kb osnovne memorije.
>> Od toga, moj pascal progaram rezervise za sebe 64Kb za podatke.
>> Ja definisem neki niz koji treba da se smesti _van_ data
>> segmenta, koji, ubr, moze biti velicine do oko 500Kb. Onda
>> popunjavam taj niz delimicno (znaci, ne popunim svih 500Kb), i
>> kako ga popunjavam, tako iskoriscavam memoriju. Znaci, iako je
>> taj niz definisan na velicinu 500Kb, on, u jednom trenutku, ne
>> mora zauzitati ni bajta memorije? Jesam li dorbro shvatio? :)
Pa... osnovu si shvatio, ali ne baš sve pojedinosti ;)
Prvo, ni jedna struktura u Turbo Pascalu ne može da bude veća od 64 K.
Znači, nema nikakve šanse da jedan niz zauzme 500 K. Međutim, možeš
da definišeš više nizova po (nešto manje od) 64 K, i tako popuniš
čitavu memoriju.
Drugo, metod koji sam opisao, sa getmem, alocira prostor za niz. Dakle,
u trenutku kada se getmem izvršava, moraš da alociraš onoliko prostora
koliko će niz najviše zauzimati. Prednost u odnosu na statičko
dimenzionisanje (var x: array [1..1000] of byte itd) je što ono 'n' iz
getmem (niz, n) može da se učita ili nekako drugačije preračuna. Drugo,
kada niz više nije potreban, možeš sa freemem (ili tako nešto ;)
oslobodiš zauzetu memoriju.
Može se koristiti i metod dinamičkog rasta niza, dakle alociranja
prostora element po element, uz ukazatelje. Komanda je new(ime).
Ali, ja radije koristim getmem, nekako mnogo lakše ide :)
>> > PS Preporucujem i citanje dokumentacije za TP,
>>
>> Ima li neko ovde kupljen Turbo PASCAL?
Mnogi... :)
>> Imam umetak, ali mi neije bas najjasnije. Za pocetakm sta
>> znace ona 2 zareza (type art_ptr = ,,artikl)?
Nisu dva zareza, nego ^ - oznaka za pointer. Dakle, art_ptr je
pointer na artikl.
pascal.140postmast,
From: broker@setgate.setnet.co.yu (Predrag Supurovic)
Subject: pascal
Date: Tue, 31 May 1994 23:26:02
To: "Ognjen Blagojevic" <ognjen@sezam.UUCP>
"B> I, nek neko najzad objasni sta su to pointeri, ne kapiram
"B> nista... :(
Normalno da ne kapiras kad to niko i ne objasnjava. Svi napisu neki
kod koji treba da posluzi kao primer, a koji, naravno, nije
prokomentarisan.
U stvari, da bi ti se objasnilo sta su pointeri, potrebno je mnogo
objasnjavanja, a i nesto crtanja...
Preporucujem ti da ipak prvo nadjes neku knjigu u kojoj je to objasnjeno.
Jedna, za koju sigurno znam da je na pristupacan nacin, sa sve grafickim
prikazom i objasnjenim primerima objasnjen pojam pointera je:
TURBO PASCAL sa grafickim aplikacijama, Armando Jorno,
Tehnicka Knjiga, 1990, II izdanje, strana 144
Nadam se da sam bio od pomoci,
Broker
... BR> Ups. Opet ostadoh bez tagova...
* Origin: Oreska BBS, UZICE = SF BIBLIOTEKA = SETNet: (38:101/101)
pascal.141postmast,
From: Kiril.Vidimce@f108.n108.z38.setgate.setnet.co.yu (Kiril Vidimce)
Subject: .Pcx File Reader
Date: Wed, 01 Jun 1994 00:47:02
>> BS> Problem i jeste u tome sto mi treba unit za citanje PCX slika u 16
>> BS> boja do rezolucije 640x480. Samo dekodiranje linije nije problem, ali
>> BS> kako dalje? Kako iz paskala da od 4 RGB komponente (3+intenzitet)
>> BS> dobijem piksel odgovarajuce boje? (BTW "Tehnical Reference" imam).
>Type
> Pal_Array = Array [ 0..255, RED..BLUE ] Of Byte;
> Ega_Array = Array [ 0..16 ] Of Byte;
Ups. Zaboraviv na deklaracijata na RED, GREEN, BLUE.
Const
RED = 0;
GREEN = 1;
BLUE = 2;
KiRe ViDiMCCe
* Origin: Struga BBS +389 96 74074 * Macedonia * SETNet: (38:108/108)
pascal.142kenza,
-> #129, .djn(;>> Da li bi neko mogao da mi malo objasni pojam pointera.
Pazi ovako: (oni koji znaju neka idu dalje :)
Pointer (ili pokazivac) je nesto slicno tvom telefonskom
imeniku. Tamo imas zapisano ime nekog druga (ili zenske ;) i
pored njega njegovu ili njenu adresu. Pointer isto tako ima
zapisanu u sebi adresu onoga na sta pokazuje. Znaci on odredjuje
polozaj nekog podatka u memoriji, kao sto adresa odredjuje
polozaj tvog druga u gradu :)
Moguce je da napravis pointere na slogove, kao i na proste
tipove. To je to ;)
p.s. Izvinjavam se na prostoti i slikovitosti odgovora. :)
pascal.143inedeljkovic,
-> #141, postmast>>> BS> Problem i jeste u tome sto mi treba unit za citanje PCX slika
>>> BS> u 16 boja do rezolucije 640x480. Samo dekodiranje linije nije
>> Type
>> Pal_Array = Array Š 0..255, RED..BLUE Ć Of Byte;
>> Ega_Array = Array Š 0..16 Ć Of Byte;
> Ups. Zaboraviv na deklaracijata na RED, GREEN, BLUE.
Evo ga čitav PCX header. Ja sam ovakav header uspešno koristio
u programčetu koje je menjalo koordinate položaja slike na ekranu upisane
u xmin, ymin, xmax i ymax. Inače za prikazivanje PCX-ova u programu koji
sada trenutno radim, koristim objektni unit pisan za TP 6.0 koji upravo
prikazuje slike do 640x480 sa 16 boja. Mana ovog unita je što ne može da
prikaže sliku veću od 64K (nemam njegov sors, inače... ;)), ali ja i ne
koristim veće slike pa mi za sada i ne smeta. Međutim, imam sors drugog
unita koji bi takođe trebao da radi gore navedenu stvar, ali ne radi, a
ja opet sada nemam ni sekund vremena (matura, prijemni... :((( ) da vidim
šta tu ne valja. Dakle, ako nekog interesuje, mogu i ovde da ga bacim,
pa ko želi da proba...
Sledi header:
const
...
RED = 0;
GREEN = 1;
BLUE = 2;
...
pcx_header = record
Manufacturer: byte; š Always 10 for PCX file ć
Version: byte; š 2 - old PCX - no palette (not used anymore),
3 - no palette,
4 - Microsoft Windows - no palette (only in
old files, new Windows version uses 3),
5 - with palette ć
Encoding: byte; š 1 is PCX, it is possible that we may add
additional encoding methods in the future ć
Bits_per_pixel: byte; š Number of bits to represent a pixel
(per plane) - 1, 2, 4, or 8 ć
Xmin: integer; š Image window dimensions (inclusive) ć
Ymin: integer; š Xmin, Ymin are usually zero (not always) ć
Xmax: integer;
Ymax: integer;
Hdpi: integer; š Resolution of image (dots per inch) ć
Vdpi: integer; š Set to scanner resolution - 300 is default ć
ColorMap: array Š0..15, RED..BLUEĆ of byte;
š RGB palette data (16 colors or less)
256 color palette is appended to end of file ć
Reserved: byte; š (used to contain video mode)
now it is ignored - just set to zero ć
Nplanes: byte; š Number of planes ć
Bytes_per_line_per_plane: integer; š Number of bytes to allocate
for a scanline plane.
MUST be an an EVEN number!
Do NOT calculate from Xmax-Xmin! ć
PaletteInfo: integer; š 1 = black & white or color image,
2 = grayscale image - ignored in PB4, PB4+
palette must also be set to shades of gray! ć
HscreenSize: integer; š added for PC Paintbrush IV Plus ver 1.0, ć
VscreenSize: integer; š PC Paintbrush IV ver 1.02 (and later) ć
š I know it is tempting to use these fields
to determine what video mode should be used
to display the image - but it is NOT
recommended since the fields will probably
just contain garbage. It is better to have
the user install for the graphics mode he
wants to use... ć
Filler: array Š74..127Ć of byte; š Just set to zeros ć
end;
To je to :).
Pozdrav, Igor...
pascal.144kenza,
-> #139, dejanr(;> Moze se koristiti i metod dinamickog rasta niza, dakle alociranja
(;> prostora element po element, uz ukazatelje. Komanda je new(ime).
Da li new koristi samo konvencionalnu memoriju ili i
ems/xms?
pascal.145dejanr,
-> #144, kenza>> Da li new koristi samo konvencionalnu memoriju ili i
>> ems/xms?
new (i getmem) koriste konvencionalnu memoriju. Ima u direktorijumu
PASCAL par unit-a za korišćenje proširene memorije, uz različit stepen
komfora.
Tako je, bar, na Turbo Pascalu. Borland Pascal omogućava da se koristi
čitava memorija računara (mislim negde do 16 megabajta) ali svaka
struktura i dalje mora da bude manja od 64 K. Dakle, da bi iskoristio
4 megabajta morao bi da deklarišeš šezdesetak nizova.
pascal.146omega,
-> #144, kenzaŢ Da li new koristi samo konvencionalnu memoriju ili i ems/xms?
Kamo puste srece da koristi ems/xms :((((
pascal.147postmast,
From: alenin@setgate.setnet.co.yu (Aleksandar Ninkovic)
Subject: pascal
Date: Thu, 02 Jun 1994 09:15:03
*> Evo pripremio sam NG za Turbo Vision za Pascal 6.0. Probajte
*> ga pa ako
Da li bi mogao :) ako ti nije tesko ,da upakujes sa UUncode i posaljes ga na
moju adresu kao poruku :) ...Rado bih ga stavio na SETNet :)
Pozdrav
Aleksandar
alenin@setgate.setnet.co.yu
* Origin: SETNet:INFOSYS*informacije+usluge*BG*011-1768526* (38:103/114)
pascal.148postmast,
From: Kiril.Vidimce@f108.n108.z38.setgate.setnet.co.yu (Kiril Vidimce)
Subject: Pascal
Date: Thu, 02 Jun 1994 03:25:03
>TURBO PASCAL sa grafickim aplikacijama, Armando Jorno,
>Tehnicka Knjiga, 1990, II izdanje, strana 144
Ako e ovaa istata kniga koja i jas ja imav na vremeto (ne
se sekkavam dali besse I ili II izdanie) - knigata i ne
e bass mnogu dobro napissana - osobeno besse smessno ona
'graficckim aplikacijama', bidejkki primerite se za vo
TP 3.00 (turtle graphics).
Za zzal, ne se sekkavam na iminnata na avtorite na knigata
'Data structures using Pascal' - kniga koja e odliccen
priruccnik meggu drugoto i za pointer-i. Vo knigata se
obraboteni i nizi, matrici, pointeri-i, listi, prebaruvanne,
sortiranne, datoteki itn...
KiRe ViDiMCCe
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
= Kiril Vidimce * kvidimce@a1.news.mk = "The best thing in =
= Bojmija 8/1/24 = vkire@lotus.mk * learning is =
= 91000 Skopje * vkire@cerera.uni.mk = understanding" =
= Republic of Macedonia = vkire@ereb.uni.mk * ------------- =
= Tel: +389-91-411-125 * vidik@ezinfo.ethz.ch = - L. Infeld =
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
* Origin: Struga BBS +389 96 74074 * Macedonia * SETNet: (38:108/108)
pascal.149postmast,
From: Kiril.Vidimce@f108.n108.z38.setgate.setnet.co.yu (Kiril Vidimce)
Subject: Pascal Rutine 1/3
Date: Thu, 02 Jun 1994 03:25:05
>Moze li me neko uputiti na pogodan alat (biblioteke) kao i literaturu
>koja se bavi manipulacijom memorijom (expanded, extended, swap-ovanje i sl.)
>Zgodnije mi je ako je za PAscal ali ni za C nije na odmet.
Eve edno zgodno primercce, a za poozbilna rabota ti ja preporaccuvam
bibliotekata SNIPPETS. Ima se' i sessto vo nea - a najccesto mnogu
korisno. :)
--------------------- EMS.PAS -----------------------
Unit EMS;
{-------------------------------------------------------------------}
{ This program allows you to define any array in the Expand Memory }
{ and access the array directly. You may freely distribute it or }
{ use it for any purpose, provided this notice is attached with it. }
{ I would be very happy if you intend to use it in your program. }
{ Please let me know if you like it. }
{ }
{ InterNet: }
{ jialong@neuro.informatik.uni-ulm.de }
{ }
{ Home address: }
{ Hof Str. 22 }
{ 7906 Blaustein }
{ Germany }
{ }
{-------------------------------------------------------------------}
Interface
Const
PAGESIZE = 16384; {bytes}
Type
{--------------------------------------------------------------}
{ You can modify BaseType to meet your need }
{--------------------------------------------------------------}
ByteArrayType = Array [1..(65535 div Sizeof(Byte))] of Byte;
IntArrayType = Array [1..(65535 div Sizeof(Integer))] of Integer;
RealArrayType = Array [1..(65535 div Sizeof(Real))] of Real;
{--------------------------------------------------------------}
{ The following define a basic EMS object }
{--------------------------------------------------------------}
EMSArray=Object
Ems_Handle,
Page_Frame_Address,
Pages_Needed : Word;
NormalPtr : Pointer;
ByteArry : ^ByteArrayType;
IntArry : ^IntArrayType;
RealArry : ^RealArrayType;
{--------------------------------------------------------------}
{ The followings are all methods you can call }
{--------------------------------------------------------------}
Function Ems_Installed : Boolean;
Function Pages_Available : Word;
Procedure Alloc(Page_Requested: Word);
Procedure MapIn(Logical_Page_No, Physical_Page_No: Word);
Procedure Release;
End;
Var
{--------------------------------------------------------------}
{ Global varible, You can check it after calling a function }
{--------------------------------------------------------------}
EmsError : Integer;
Implementation
Uses Dos;
Const
EMM_INT = $67;
DOS_Int = $21;
GET_PAGE_FRAME = $41;
GET_UNALLOCATED_PAGE_COUNT= $42;
ALLOCATE_PAGES = $43;
MAP_PAGES = $44;
DEALLOCATE_PAGES = $45;
GET_VERSION = $46;
STATUS_OK = 0;
{--------------------------------------------------------------}
{ The function Emm_Installed checks to see if the Expanded }
{ Memory Manager (EMM) is loaded in memory. It does this by }
{ looking for the string 'EMMXXXX0', which should be located }
{ at 10 bytes from the beginning of the code segment pointed }
{ to by the EMM interrupt, 67h. }
{--------------------------------------------------------------}
Function EMSArray.Ems_installed : Boolean;
Var
Emm_Device_Name : string[8];
Int_67_Device_Name : string[8];
Position : integer;
Regs : registers;
Begin
Int_67_Device_Name := '';
Emm_Device_Name := 'EMMXXXX0';
with Regs do
Begin
{------------------------------------------------------}
{ Get the code segment pointed to by interrupt 67h, }
{ the EMM interrupt by using DOS function 35h. }
{ (get interrupt vector) }
{------------------------------------------------------}
AH := $35;
AL := EMM_INT;
Intr (DOS_int,Regs);
For Position := 0 to 7 do
Int_67_Device_Name :=
Int_67_Device_Name+Chr (mem[ES:Position+$0A]);
{------------------------------------------------------}
{ If the string is the EMM manager signature, }
{ 'EMMXXXX0', then EMM is installed and ready for }
{ use. If not, then EMM is not present. }
{------------------------------------------------------}
If Int_67_Device_Name = Emm_Device_Name
then Ems_Installed := True
Else Ems_Installed := False
end; { with Regs do }
End;
{--------------------------------------------------------------}
{ This function returns the pages number that are available }
{ for use. After calling Intr, BX contains currrently }
{ unallocated pages, DS contains total pages in the system }
{--------------------------------------------------------------}
Function EMSArray.Pages_Available : Word;
Var
Regs: Registers;
Begin
With Regs Do
Begin
AH := Get_Unallocated_Page_Count;
intr (EMM_INT, Regs);
Pages_Available := BX;
>>> Continued to next message
* Origin: Struga BBS +389 96 74074 * Macedonia * SETNet: (38:108/108)
pascal.150postmast,
From: Kiril.Vidimce@f108.n108.z38.setgate.setnet.co.yu (Kiril Vidimce)
Subject: Pascal Rutine 2/3
Date: Thu, 02 Jun 1994 03:25:06
>>> Continued from previous message
EmsError := AH;
End;
End;
{--------------------------------------------------------------}
{--------------------------------------------------------------}
Procedure EMSArray.Alloc(Page_Requested: Word);
Var
Regs: Registers;
Begin
With Regs do
Begin
{------------------------------------------------------}
{ Get the page frame segment address from EMM. }
{ AH = get page frame segment function }
{------------------------------------------------------}
AH := Get_Page_Frame;
intr (EMM_INT,Regs);
{------------------------------------------------------}
{ BX = page frame segment address }
{ AH = status }
{------------------------------------------------------}
Page_Frame_Address := BX;
EmsError := AH;
{------------------------------------------------------}
{ Allocate the specified number of pages from EMM. }
{ AH = allocate pages function. }
{ BX = number of pages to allocate. }
{------------------------------------------------------}
Pages_Needed:= Page_Requested;
AH := Allocate_Pages;
BX := Pages_Needed;
intr (EMM_INT,Regs);
Ems_Handle := DX;
EmsError := AH;
End; {With Regs Do}
End;
{--------------------------------------------------------------}
{ This function maps a logical page allocated by the }
{ Allocate_Expanded_Memory_Pages function into one of the }
{ four physical pages. }
{--------------------------------------------------------------}
Procedure EMSArray.MapIn(Logical_Page_No, Physical_Page_No : Word);
Var
Regs: Registers;
Begin
With Regs do
Begin
{------------------------------------------------------}
{ Map a logical page at physical_page_No }
{ AH = map page function }
{ DX = handle }
{ BX = logical page number }
{ AL = physical page number }
{------------------------------------------------------}
AH := Map_Pages;
DX := Ems_Handle;
BX := Logical_Page_No;
AL := Physical_Page_No;
Intr (EMM_INT, Regs);
EmsError := AH;
end; { with Regs do }
{------------------------------------------------------}
{ Making array pointer point to this physical pages }
{ For convience, Different pointer points to same }
{ address. User can add his own pointer type and }
{ add a line here. }
{------------------------------------------------------}
NormalPtr:= Ptr(Page_Frame_Address, Physical_Page_No * PAGESIZE);
ByteArry := Ptr(Page_Frame_Address, Physical_Page_No * PAGESIZE);
IntArry := Ptr(Page_Frame_Address, Physical_Page_No * PAGESIZE);
RealArry := Ptr(Page_Frame_Address, Physical_Page_No * PAGESIZE);
{ **** add other pointer here *****}
end; { Function Map_Expanded_Memory_Pages }
{--------------------------------------------------------------}
{ This function releases the EMM memory pages allocated to }
{ us, back to the EMM memory pool. }
{--------------------------------------------------------------}
Procedure EMSArray.Release;
Var
Regs: Registers;
Begin
with Regs do
Begin
{------------------------------------------------------}
{ Deallocate the pages allocated to an EMM handle. }
{ AH = deallocate pages function }
{ DX = EMM handle }
{------------------------------------------------------}
AH := DEALLOCATE_PAGES;
DX := Ems_Handle;
Intr (EMM_INT,Regs);
EmsError := AH;
end; { with Regs do }
end; { Function Deallocate_Expanded_Memory_Pages }
End.
----------------- EMS.PAS ------------------------
================= EMSTEST.PAS ====================
Program Test_EMS_Unit;
{----------------------------------------------------------------}
{ This simple program test whether EMM exists, if it does exists,}
{ all pages are allocated to create the largest possiable array }
{ in EMS, then it will be written and read in three array types }
{----------------------------------------------------------------}
Uses EMS;
Var
A : EMSArray;
Pages,
KiloByte,
EachPage,
EachElement,
ElementNum : Word;
Procedure ReadAndWrite(ArrayType: Byte);
Var
VerifyFail : Boolean;
Begin
{----------------------------------}
{ Write and Read each page in }
{ in ArrayType: }
{ ArrayType = 1 Byte Array }
{ ArrayType = 2 Integer Array }
{ ArrayType = 3 Real Array }
{----------------------------------}
Case ArrayType of
1: ElementNum := PAGESIZE DIV Sizeof(Byte);
2: ElementNum := PAGESIZE DIV Sizeof(Integer);
>>> Continued to next message
* Origin: Struga BBS +389 96 74074 * Macedonia * SETNet: (38:108/108)
pascal.151postmast,
From: Kiril.Vidimce@f108.n108.z38.setgate.setnet.co.yu (Kiril Vidimce)
Subject: Pascal Rutine 3/3
Date: Thu, 02 Jun 1994 03:25:07
>>> Continued from previous message
3: ElementNum := PAGESIZE DIV Sizeof(Real);
End;
WriteLn('Each element of the array is writing ...');
For EachPage := 0 to Pages-1 Do
Begin
{ Map in a logical page to physical page 0 }
A.MapIn(EachPage, 0);
For EachElement := 1 To ElementNum Do
Case ArrayType of
1: A.ByteArry^[ EachElement ] := 10;
2: A.IntArry^[ EachElement ] := 25;
3: A.RealArry^[ EachElement ] := 3.5;
End;
End;
WriteLn('Reading back each element of array and verifying...');
For EachPage := 0 to Pages-1 Do
Begin
{ Map in a logical page to physical page 0 }
A.MapIn(EachPage, 0);
For EachElement := 1 To ElementNum Do
Case ArrayType of
1: VerifyFail := (A.ByteArry^[ EachElement ] <> 10);
2: VerifyFail := (A.IntArry^[ EachElement ] <> 25);
3: VerifyFail := (A.RealArry^[ EachElement ] <> 3.5);
End;
If VerifyFail Then
Begin
WriteLn('Verify failed!');
Halt(1);
End;
End;
End; { **** ReadAndWrite Procedure **** }
Begin
If A.Ems_Installed Then
Begin
Pages:=A.Pages_Available;
KiloByte := Pages * 16;
WriteLn('There are ', Pages, ' pages expand memory, That is ',
KiloByte, ' Kb!');
A.Alloc(Pages);
{----------------------------------}
{ If There are some probles, Exit }
{----------------------------------}
If EmsError<>0 Then
Begin
WriteLn ('Alloc ', Pages, ' Pages Error!' );
A.Release;
Halt(1);
End;
WriteLn;
WriteLn('Read and Write as *Integer* Array');
ReadAndWrite(2);
WriteLn('Verify Passed, Good!');
WriteLn;
WriteLn('Read and Write as *Real* Array');
ReadAndWrite(3);
WriteLn('Verify Passed, Good!');
WriteLn;
WriteLn('Read and Write as *Byte* Array');
ReadAndWrite(1);
WriteLn('Verify Passed, Good!');
A.Release
End
Else
Begin
WriteLn('EMM does not exists');
Halt(1);
End;
End.
================= EMSTEST.PAS ====================
KiRe ViDiMCCe
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
= Kiril Vidimce * kvidimce@a1.news.mk = "The best thing in =
= Bojmija 8/1/24 = vkire@lotus.mk * learning is =
= 91000 Skopje * vkire@cerera.uni.mk = understanding" =
= Republic of Macedonia = vkire@ereb.uni.mk * ------------- =
= Tel: +389-91-411-125 * vidik@ezinfo.ethz.ch = - L. Infeld =
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
* Origin: Struga BBS +389 96 74074 * Macedonia * SETNet: (38:108/108)
pascal.152markom,
-> #146, omega:: Kamo puste srece da koristi ems/xms :((((
Pa sa overlay jedinicom možeš da koristiš EMS :> Ali naravno, nije to to :((
pascal.153dtadic,
Uz poruku se nalazi datoteka sa nekoliko unita za kompresiju podataka.
Za sve unite je dat sors:
**********************************************************************
-------- Presskit Version 1.0
-------- May 8th - 1993
-------- Douglas P. Webb
-------- dwebb@binkley.cs.mcgill.ca
I have for several years had an application that required the very best
compression. The program is written in Turbo Pascal. Naturally almost
all the code I've come across is written in C, so I've ported as much as
I could. Of the code presented here, only the DOUGPACK unit is wholely
my own original code, the rest was ported/wrapped to allow it's use in
a Turbo Pascal. I figured others might like to try some of it out.
The code is all donated to the public domain, although some of it may
be under the patent cloud. There may be bugs in the implementations
(although I don't think so) so use them at your own risk.
If you make a notable improvement in the code, please mail me a copy.
LZH
The LZH unit implements a fairly faithful port of an algorithm that
was written in C by Haruyasu Yoshizaki and Haruhiko Okumura.
The Documentation on how to use the unit is pretty goodm the source
code is pretty much undocumented.
Included is a simple 1 file compression program as a demonstration
on how to use the LZH unit.
LZW (DOUGPACK)
The DOUGPACK unit implements my own interpretation of how the LZW
algorithm should be implemented. I take all the credit/blame for
the implementation and any bugs it may contain.
The Documentation on how to use the unit is pretty good the source
code has some documentation but is pretty convoluted.
Included is a simple 1 file compression program as a demonstration
on how to use this unit.
It should be noted that the LZW algorithm is patented, so use of this
algorithm in a commercial program might not be a good idea.
LZSS
The LZSS program implements a turbo pascal wrapper I've placed around
a very nice (and fast) implementation of the LZ77 algorithm submitted
to the DR DOBBS compression contest a few years back by Andy Tam.
The algorithm is implemented in the context of a stand-alone file
compression utility, which can be used to compress/decompress files
one at a time.
It should be noted that the plain LZ77 algorithm is unpatented, so
using this code in a commercial application should be OK.
SIXPACK
The SIXPACK program implements a faithful port from C of a unique
compression algorithm submitted to the DR DOBBS compression contest
a few years back by Philip G. Gage.
The algorithm is implemented in the context of a stand-alone file
compression utility, which can be used to compress/decompress files
one at a time.
VITTER
This is a implementation of the dynamic Huffman coding algorithm
presented by Jeffrey Scott Vitter in ACM Transactions on Mathematical
Software, Vol, 15, June 1989, p 158, and described in Journal of the
ACM, Vol. 34, October 1987, p 825.
The algorithm is implemented in the context of a stand-alone file
compression utility, which can be used to compress/decompress files
one at a time. This program serves only to illustrate the use of
the algorithm.
Douglas P. Webb
dwebb@binkley.cs.mcgill.ca
May 8th 1993
************************************************************************
preskit2.zippascal.155omega,
-> #152, markomŢ Pa sa overlay jedinicom mozes da koristis EMS :> Ali naravno, nije to to
Da, to stvarno nema veze :( Nego, sad mi pade na pamet, je l' postoji
nacin da se XMS/EMS koristi kao produzetak heap-a?
pascal.156dejanr,
-> #155, omega>> Nego, sad mi pade na pamet, je l' postoji
>> nacin da se XMS/EMS koristi kao produzetak heap-a?
Ne baš direktno, ali probaj recimo xmm12.zip iz direktorijuma PASCAL,
a pogledaj i razne unit-e kojih je bilo po PC.PROG.* konferencijama,
u temi pascal.
Ili razmišljaj o prelasku na BP 7.
pascal.157markom,
-> #155, omega:: Da, to stvarno nema veze :( Nego, sad mi pade na pamet, je l' postoji
:: nacin da se XMS/EMS koristi kao produzetak heap-a?
Koliko ja znam, nema, ali ako neko zna foru (pointer na TPU :>), bio bih mu
večno zahvalan :)
pascal.158ognjen,
-> #139, dejanr)-> >> Ima li neko ovde kupljen Turbo PASCAL?
)-> Mnogi... :)
A moze li da mi da neku od knjizica da "pogledam"?
)-> Nisu dva zareza, nego ^ - oznaka za pointer. Dakle, art_ptr
)-> je pointer na artikl.
Onda je u umetku stamparska greska. :( Evo sad da midimo da li
sam dobro razumeo pintere. Oni sluze da u memoriju (van 64Kb data
segmenta) strpamo neku promenjljivu (bilo string, lonint, ili
neki niz (mada prvo dvoje bas i nema puno smisla)), i onda u
pointerima cuvamo adresu gde se u memoriji nalazi taj niz (ili
sta vec drugo). Tako da kada se obracamo pointeru, on se ustvari
obraca memoriji van data segmenta, tako da smo fakticki prosirili
data segment. Da li sam shvatio? :)
pascal.159ognjen,
-> #142, kenza)-> Moguce je da napravis pointere na slogove, kao i na proste
)-> tipove. To je to ;)
)-> p.s. Izvinjavam se na prostoti i slikovitosti odgovora. :)
Znaci, pointeri sluze da bi smo prekoracili data segment?
Bezveze. Zasto, jednostavno, nisu povecali data segment na 16Mb,
pa da se ne mucim sa pointerima?
pascal.160dejanr,
-> #158, ognjen>> Oni sluze da u memoriju (van 64Kb data segmenta) strpamo neku
>> promenjljivu (bilo string, lonint, ili neki niz (mada prvo
>> dvoje bas i nema puno smisla)), i onda u pointerima cuvamo
>> adresu gde se u memoriji nalazi taj niz (ili sta vec drugo).
>> Tako da kada se obracamo pointeru, on se ustvari obraca memoriji
>> van data segmenta, tako da smo fakticki prosirili data segment.
>> Da li sam shvatio? :)
Shvatio si o čemu smo ovde pisali, i informacija je uglavnom korektna.
Sve to nije inicijalna svrha pointera, niti su oni nastali zato što
PC ima data segment, pa treba nekako "proviriti" u ostatak memorije.
Nastali su pre PC-ja, sa idejom dinamičke alokacije memorije. Dakle,
ne moraš unapred da odrediš koliki će koji niz (ili struktura) biti,
nego kada ti zatreba, alociraš potrebnu memoriju, radiš šta treba i
najzad vratiš memoriju "u fond".
Međutim, kod TP-a se pointeri uglavnom koriste za ono što si napisao,
ili ih bar ja uglavnom za to koristim.
pascal.161asterix,
1. Da li se rekurzivni pozivi funkcija smeštaju na stek ?
2. Da li postoji način da se odredi koliko mesta zauzima svaki
rekurzivni poziv ?
3. Da li postoji način da se spreči stack overflow prevelikim
brojem poziva, odnosno da li se nekako u te svrhe može koristiti
memorija iznad 1 MB ? Govorimo o BP 7.
pascal.162goxx,
-> #159, ognjen■ Znaci, pointeri sluze da bi smo prekoracili data segment?
■ Bezveze. Zasto, jednostavno, nisu povecali data segment na 16Mb,
Nisam odavno radio Pascal, al ajde da i ja kažem neku.
Ne. Pointeri služe za dinamičku alokaciju memorije. Virt sigurno nije
razmišljao o segmentima memorije PC-a kad je pravio Pascal.
Zamisli da treba da u memoriju učitaš najviše do 1000 slogova neke
datoteke. Možda ih ima 5, a možda i 1000. To znači da bi statički morao
da rezervišeš prostor za svih 1000. Ako dinamički alociraš memoriju
dovoljno je da imaš pointer (pokazivač, kazalo :) i samo se za njega
rezerviše memorija (statički), a zatim "zagrabiš" onoliko memorije
koliko ti treba za određen broj slogova. Po završetku memoriju oslobodiš
i ponovo je imaš za neki drugi proces.
Goran
pascal.164pedjak,
-> #161, asterix> 1. Da li se rekurzivni pozivi funkcija smeštaju na stek ?
Da.
> 2. Da li postoji način da se odredi koliko mesta zauzima svaki
> rekurzivni poziv ?
Postoji, sa greškom od plus minus nekoliko bajtova. Prilikom svakog
pozivanja funkcija na steku kreira prostor za lokalne promenljive,
zatim na stek se smeštaju i parametri funkcije i još par bajtova,
kao što je adresa povratka. Znači, postupak bi bio sledeći:
Prebrojiš koliko ti bajtova zauzimaju parametri funkcije:
byte, shortint, boolean
char - 1 bajt
integer, word - 2 bajta
longint, parametri koji se prenose
kao Var, pointeri - 4 bajta
stringovi - deklarisana dužina + 1 bajta
Na ovo se sada još dodaje 4 ili 2 bajta, u zavisnosti od toga da li
se radi pozivanje funkcije, koja je u drugom junitu ili ne, ili ako
forsiraš daleke pozive. Otrprilike bi to bilo to.
> 3. Da li postoji način da se spreči stack overflow prevelikim
> brojem poziva, odnosno da li se nekako u te svrhe može koristiti
> memorija iznad 1 MB ? Govorimo o BP 7.
Za BP nisam siguran, tj. ne znam koliki je stek u zaštićenom
režimu, ali svakako je ograničen, tako da granica postoji. Za
realan mod ograničenje je 64k, a to je sasvim dovoljno.
Moraš sam proceniti da koje dubine smeš da ideš...
pascal.165pedjak,
-> #155, omega> Da, to stvarno nema veze :( Nego, sad mi pade na pamet, je l'
> postoji nacin da se XMS/EMS koristi kao produzetak heap-a?
UMB_HEAP.DOC
Documentation for UMB_HEAP.TPU
(C) Copyright 1992, Brian D. Webb & P-Machinery
Release 1.1, January 18, 1992
UMB_HEAP is a programing tool for extending the Turbo Pascal 6.0
dynamic heap into Upper Memory Blocks (UMB). By using UMB_HEAP,
you can give your programs up to 200K more RAM to work with.
u_heap.zippascal.166omega,
-> #156, dejanrŢ>> Nego, sad mi pade na pamet, je l' postoji
Ţ>> nacin da se XMS/EMS koristi kao produzetak heap-a?
Ţ
Ţ Ne bas direktno, ali probaj recimo xmm12.zip iz direktorijuma PASCAL,
Ţ a pogledaj i razne unit-e kojih je bilo po PC.PROG.* konferencijama,
Ţ u temi pascal.
Pogledao sam, ali nije to to. :( Naime, pri radu sa dinamickim varijablama
(new procedura i sl.) nije mi mnogo od pomoci getmem...
Ţ Ili razmisljaj o prelasku na BP 7.
Znaci tamo je to omoguceno pod dos-om? Ali onda se odricemo 286? I da li
se exe mnogo povecava?
pascal.167omega,
-> #159, ognjenŢ Bezveze. Zasto, jednostavno, nisu povecali data segment na 16Mb,
Ţ pa da se ne mucim sa pointerima?
Onda predji na C. Tamo mozes 'ladno da definises niz od 500kb bez
problema i bez pointera :)
pascal.168dejanr,
-> #167, omega>> Onda predji na C. Tamo mozes 'ladno da definises niz od 500kb bez
>> problema i bez pointera :)
Da, u raznim High C-ovima itd. U klasičnim DOS C-ovima... može... ali
ne baš bez problema, i svakako ne bez značajnog gubitka na brzini.
DOS ima 64 K / 640 K limite, i nije ih lako "preskočiti".
pascal.169pedjak,
-> #164, pedjak> Na ovo se sada još dodaje 4 ili 2 bajta, u zavisnosti od toga da li
> se radi pozivanje funkcije, koja je u drugom junitu ili ne, ili ako
> forsiraš daleke pozive. Otrprilike bi to bilo to.
Ops! Zaboravih da još dodam, ne sve ovo se još dodaje broj bajtova
alociran za lokalne promenljive, po istoj šemi kao i za parametre
funkcije.
pascal.170markom,
-> #159, ognjen:: Bezveze. Zasto, jednostavno, nisu povecali data segment na 16Mb,
:: pa da se ne mucim sa pointerima?
Pa ti lepo pređi na UNIX :)))
pascal.171markom,
-> #161, asterix:: 1. Da li se rekurzivni pozivi funkcija smeštaju na stek ?
Valjda, jer ako se mnogo puta ponavlja -- Stack Overflow :(
:: 3. Da li postoji način da se spreči stack overflow prevelikim
:: brojem poziva, odnosno da li se nekako u te svrhe može koristiti
:: memorija iznad 1 MB ? Govorimo o BP 7.
Ne znam za preko 1 Mb, ali da li si probao $M direktivu ?
Ona služi da definiše veličinu steka, minimalnu i maksimalnu veličinu heap-a.
{$M 1024,0,0}
Zauzime 1Kb za stack i minimalna veličina heap-a je 0K, kao i maksimalna ...
pascal.172omega,
-> #165, pedjakŢ> Da, to stvarno nema veze :( Nego, sad mi pade na pamet, je l'
Ţ> postoji nacin da se XMS/EMS koristi kao produzetak heap-a?
Ţ UMB_HEAP is a programing tool for extending the Turbo Pascal 6.0
Ţ dynamic heap into Upper Memory Blocks (UMB). By using UMB_HEAP,
Ţ you can give your programs up to 200K more RAM to work with.
Za ovo sam znao i ranije, ali to ipak nije to. Ovo koristi samo UMB,
a ne celu EMS :(. I drugo, neki ortak mi je prijavio da se blokira sa ovim..
Ajde ponovo cu da ispitam celu stvar pa cu da javim...
pascal.173omega,
-> #168, dejanrŢ Da, u raznim High C-ovima itd. U klasicnim DOS C-ovima... moze... ali
Ţ ne bas bez problema, i svakako ne bez znacajnog gubitka na brzini.
A koji su to High C-ovi? DOS C-ovi su pretpostavljam Turbo C, MS C i sl.?
Zar se gubi na brzini kada se definisu nizovi > 64k? :(
pascal.174markom,
-> #164, pedjak:: realan mod ograničenje je 64k, a to je sasvim dovoljno.
Nije baš 64K, već 65520 bajtova ... Baš me zanima za šta im ode onih 15 ?
pascal.175dejanr,
-> #173, omega>> A koji su to High C-ovi?
Pa, na primer High C :) Tako se zove kompajler.
>> DOS C-ovi su pretpostavljam Turbo C, MS C i sl.?
>> Zar se gubi na brzini kada se definisu nizovi > 64k? :(
Itekako.
pascal.176mmitrovic,
-> #166, omegaŮ█▀█Ţ Znaci tamo je to omoguceno pod dos-om? Ali onda se odricemo 286? I da li
Ů█▀█Ţ se exe mnogo povecava?
Ne odričeš se 286, već XTa. BP Dos Extender radi u 286+ protected
režimu, samim tim sa segmentnim ograničenjem. Na žalost ne radi u
32b 386p modu :(((((
pascal.177mmitrovic,
-> #173, omegaŮ█▀█Ţ Zar se gubi na brzini kada se definisu nizovi > 64k? :(
Ne alocira C jedan niz od 500K već više manjih, i svaki put kad
pristupiš elementu niza, C na osnovu indexa računa segment i offset
pa tek onda pristupa memoriji. To je daleko sporije od fiksnog
segmenta. Za nizove preko 64k potreban je 32b 386 extender i
odgovarajuća podrška. Pascal je (za sada) nema, a mislim da ga C++
4.0 ima.
pascal.178mmitrovic,
-> #174, markomŮ█▀█Ţ Nije baš 64K, već 65520 bajtova ... Baš me zanima za šta im ode onih 15
Pascal (kad god je moguće) radi sa normalizovanium pointerima (offset
im je u opsegu 0..15), tako da pokušaj alokacije preko 65520 možda uspe
a možda i ne uspe (u zavisnosti od sledeće raspoložive adrese na heapu).
Stek uvek počinje na offsetu 0 (tj završava se :)), tako da za njega ne
važi 65520. Istina nikad nisam probao (ili se ne sešam).
BP 7.0 ima granulaciju HEAPa od 8 bajtova (svi alocirani pointeri
imaju offset 0 ili 8), za razliku od starijih verzija sa gran. od 1bajt.
pascal.179mmitrovic,
-> #164, pedjakŮ█▀█Ţ byte, shortint, boolean
Ů█▀█Ţ char - 1 bajt
Ů█▀█Ţ integer, word - 2 bajta
Ů█▀█Ţ longint, parametri koji se prenose
Ů█▀█Ţ kao Var, pointeri - 4 bajta
Ů█▀█Ţ stringovi - deklarisana dužina + 1 bajta
Ovo važi samo za lokalne promenljive.
Evo celog opisa:
- prvo idu na stek parametri. Svaki parametar je za sebe WORD
ALLIGNED tj. jedan bajt zauzima 2; 3 zauzimaju 4. Dakle dva bajt
parametra bi zauzela 4 bajta. Strukture (records) su poređane kao
celine (znači struktura sa dva bajt polja zauzima dva, a ne četiri
bajta). Naravno cela struktura ako je neparne veličine proširuje se
za jedan bajt. Sve ovo se čini kako bi sam stek bio word alligned i
pojednostavila CALL rutina za postavljanje parametara.
- zatim ide povratna adresa. Ako je forsiran far model ili se
koristi funkcija iz drugog modula ide 4 bajta, a ako je near poziv
(unutar istog modula, sa $F-) onda 2 bajta.
- kad se uđe u funkciju prvo se na steku pamti stari SP što zauzima
dva bajta. Zatim idu lokalne promenljive, gde postoji dva slučaja.
- 1. (sa $A+)
Važi word allign za promenljive, i u ovom slučaju princip je isti
kao za parametre.
- 2. (sa $A-)
Saberu se veličine svih lokalnih promenljivih, i ako je zbir
neparan doda se 1 bajt (stek pointer mora biti paran).
Suma ove tri grupice daje zauzetost steka po pozivu. Naravno za
intenzivnu rekurziju treba što više smanjiti ovu sumu.
pascal.180asterix,
-> #179, mmitrovic> Suma ove tri grupice daje zauzetost steka po pozivu. Naravno za
> intenzivnu rekurziju treba što više smanjiti ovu sumu.
Da, ovo je potpuniji opis slaganja stvari na stek. Phanx ;) na
tome, ali me i dalje interesuje da li je moguće uopšte koristiti
više od 64 K u konstrukciji rekurzivnih poziva neke funkcije ?
pascal.181vcalic,
-> #177, mmitrovic>> Ne alocira C jedan niz od 500K već više manjih, i svaki put kad
>> pristupiš elementu niza, C na osnovu indexa računa segment i offset
>> pa tek onda pristupa memoriji. To je daleko sporije od fiksnog
>> segmenta. Za nizove preko 64k potreban je 32b 386 extender i
>> odgovarajuća podrška. Pascal je (za sada) nema, a mislim da ga C++
>> 4.0 ima.
žini mi se da BC3.1 funkcija farcalloc baš može da alocira kontinualan
memorijski prostor veći od 64K i da se njemu sasvim lepo (i JAKO sporo)
pristupa sa normalizovanim huge pointerima.
Vlada
pascal.182omega,
-> #176, mmitrovicŢ Ne odrices se 286, vec XTa. BP Dos Extender radi u 286+ protected
Ţ rezimu, samim tim sa segmentnim ogranicenjem. Na zalost ne radi u
Ţ 32b 386p modu :(((((
Znaci, ako sam dobro shvatio:
BP 7 ima heap > 640 kb i to ne u sklopu TP-a 7? I da li postoje neka
ogranicenja pri programiranju (mislim na razlike u klasicnom - TP-u i
tu)? I koliko je veci exe? I u cemu se onda programira pod DOS-om, ako
ne pod TP-om?
pascal.183mmitrovic,
-> #180, asterixŮ█▀█Ţ Da, ovo je potpuniji opis slaganja stvari na stek. Phanx ;) na
Ima jos jedna stvar koju sam prevideo, sve ovo važi za
$S-, tj. bez provere steka, jer onda treba jos par bajtova za
poziv rutine za proveru steka. Naravno ta memorija biva oslobođena
čim se uđe u kod funkcije.
Ů█▀█Ţ tome, ali me i dalje interesuje da li je moguće uopšte koristiti
Ů█▀█Ţ više od 64 K u konstrukciji rekurzivnih poziva neke funkcije ?
Naravno da može, sve se može, ali to zadire u domen sistemskog
programiranja i poznavanja strukture Pascal programa na code nivou.
Princip je da pre svakog poziva alociraš memoriju za novi stek sa
HEAPa i postavisš SS:SP pre poziva i vratiš ih posle. Ovo vuče za
sobom dosta sitnica koje treba zadovoljiti, sve u svemu veoma
nepraktično. Ali ako ti baš očajnički treba, mene ćeš morati da
sačekaš do 1. :(
pascal.184dejanr,
-> #182, omega>> BP 7 ima heap > 640 kb
Da.
>> i to ne u sklopu TP-a 7?
TP 7 je "mala" verzija BP 7, dakle i dalje stari limiti, 640 K itd.
>> I da li postoje neka ogranicenja pri programiranju (mislim na razlike
>> u klasicnom - TP-u i tu)?
Postoji i dalje ograničenje strukture na 64 K. Ali zato možeš naslagati
koliko hoćeš takvih struktura (ili bar koliko imaš memorije, što osnovne,
što extended itd)
>> I koliko je veci exe?
Ne spektakularno.
>> I u cemu se onda programira pod DOS-om, ako
>> ne pod TP-om?
Pod DOS-om, a i pod Windows-om, programira se u Borland Pascalu 7.
Turbo Pascal 7 je samo njegova jeftinija verzija. Dakle, ako imaš
BP7, TP7 ti ne treba.
Preporučujem čitanje starih poruka u PC.PROG.*/pascal, na prethodna pitanja je
već više puta odgovoreno.
pascal.186postmast,
From: broker@setgate.setnet.co.yu (Predrag Supurovic)
Subject: Pascal
Date: Thu, 02 Jun 1994 08:05:01
==== Kiril Vidimce rece: ======================================
>TURBO PASCAL sa grafickim aplikacijama, Armando Jorno,
>Tehnicka Knjiga, 1990, II izdanje, strana 144
KV> Ako e ovaa istata kniga koja i jas ja imav na vremeto (ne
KV> se sekkavam dali besse I ili II izdanie) - knigata i ne
KV> e bass mnogu dobro napissana - osobeno besse smessno ona
KV> 'graficckim aplikacijama', bidejkki primerite se za vo
KV> TP 3.00 (turtle graphics).
Slazem se da knjiga nije nesto narocito, tj. bas je za apsolutne
pocetnike. Ipak, moze sasvim lepo da posluzi. Mene grafika nije
toliko interesovala, pa se ne secam da li sam taj deo knjige uopste
i procitao, ali u prvom delu, za pocetnika, sasvim je upotrebljivo.
Broker
... BR> Ups. Opet ostadoh bez tagova...
* Origin: Oreska BBS, UZICE = SF BIBLIOTEKA = SETNet: (38:101/101)
pascal.187postmast,
From: broker@setgate.setnet.co.yu (Predrag Supurovic)
Subject: Pascal Rutine 1/3
Date: Thu, 02 Jun 1994 08:06:02
==== Kiril Vidimce rece: ======================================
KV> @PID: JCQWK 2.01 Pre-Gamma3 26039401
>Moze li me neko uputiti na pogodan alat (biblioteke) kao i literaturu
>koja se bavi manipulacijom memorijom (expanded, extended, swap-ovanje i sl.)
>Zgodnije mi je ako je za PAscal ali ni za C nije na odmet.
KV> Eve edno zgodno primercce, a za poozbilna rabota ti ja
KV> preporaccuvam bibliotekata SNIPPETS. Ima se' i sessto vo nea - a
KV> najccesto mnogu korisno. :)
Hvala puno, bice korisno. Ipak, kad zelis da posaljes nesto ovako dugacko,
prvo pitaj da li to jos nekoga zanima. Konferencija ide na veliki broj
sistema i neko se moze buniti.
... BR> Ups. Opet ostadoh bez tagova...
* Origin: Oreska BBS, UZICE = SF BIBLIOTEKA = SETNet: (38:101/101)
pascal.188postmast,
From: Braslav.Sesartic@f101.n101.z38.setgate.setnet.co.yu (Braslav Sesartic)
Subject: Re: .Pcx File Reader
Date: Thu, 02 Jun 1994 03:10:00
KV> { =========================== VGA16palette
Cini mi se da ova procedura setuje kompetnu paletu, a meni treba
boja samo za jedan piksel (ili mozda gresim). No, ipak zahvaljujem.
KV> Ako ti treba kompletniot program za rabota so PCX-ovi, samo
KV> kazzi. :)
- ako ima source i ako mu je source u TP, ako moze da prikaze .PCX
u bilo kojoj velicini (znaci ne samo na celom ekranu)... onda bi mi
bas to trebalo. :) Samo reci kako?
Braslav Sesartic 38:101/101@SetNet.Oreska
* Origin: Oreska BBS, UZICE = SF BIBLIOTEKA = SETNet: (38:101/101)
pascal.190inesic,
Potreban mi je savet u vezi diskusije koja se vodila krajem ovog
meseca u ovoj konf.temi. Tiče se pozivanja .bat i ostalih
izvršnih datoteka.
Konkretno ja bih hteo da izvršim
command.com /c md novidir
što radi kad se pokuša iz programa datog u helpu za exec, ali ne
radi iz mog programa koji je pun nizova i ostalih žderača
memorije, pa ne mogu da upotrebom $M klauzulu na onaj način kako
je to u helpu urađeno. Moj problem je što zapravo ne znam kako se
ta klauzula koristi, čemu koji parametar tu služi. Zapravo, to
nije moj jedini problem. Moj drugi problem je što radim na XTu pa
moram da koristim TP 5.5. Neko je tu objasnio da se problem
korišćenja $M zaobilazi veštim korišćenjem procedure/funkcije
setMemTop,ali nje u helpu od TP 5.5 nema.
Pitanje je dakle kako da se koristi $M i da li ova klauzula može
da se koristi i na više mesta u programu (pokušao sam da pre
gorenavedenog poziva postavim $M onako kako je u onom help
primeru dato, pa da ga posle vratim na inicijalne vrednosti, ali
nije išlo: TP je prijavljivao not inaf memori).
Šta da radim?
inesic
pascal.191dejanr,
-> #190, inesic>> $M klauzulu na onaj način kako je to u helpu urađeno. Moj problem je
>> što zapravo ne znam kako se ta klauzula koristi, čemu koji parametar
>> tu služi.
$M se stavlja na početku programa i ima tri parametra - prvi je veličina
steka, drugi minimalni heap a treći maksimalni heap. Recimo, ako ti je
16 K za stek dovoljno i ako alociraš raznim nizovima najviše još 64
K, koristi {$M 17000,0,65000} i biće prostora za poziv command.com-a.
pascal.192ognjen,
-> #190, inesic)-> Konkretno ja bih hteo da izvrsim
)-> command.com /c md novidir
Zasto se patis preko command.com-a? Uradi legalno sa:
MKDIR ('basic');
tj. u tvom primeru: MKDIR (novidir);
pascal.193omega,
-> #190, inesicŢ Moj drugi problem je sto radim na XTu pa moram da koristim TP 5.5.
Koliko znam i TP 7.0 radi na XT-u.
Ţ Neko je tu objasnio da se problem koriscenja $M zaobilazi vestim
Ţ koriscenjem procedure/funkcije setMemTop,ali nje u helpu od TP 5.5 nema.
Da, ta procedura je uvedena u TP-u v6.0 u okviru unit-a Memory...
Ţ Pitanje je dakle kako da se koristi $M i da li ova klauzula moze
Ţ da se koristi i na vise mesta u programu (pokusao sam da pre
Ne moze.
Ţ Sta da radim?
Jedno od resenja je SHROOM (r:\ibmpc\system\shrom24b.zip)...
pascal.194mdave,
-> #190, inesic■> nije moj jedini problem. Moj drugi problem je što radim na XTu pa
■> moram da koristim TP 5.5. Neko je tu objasnio da se problem
Nije to nikakav problem. Samo pravi muškarci koriste XT. :)
PS. Imam ortaka koji piše programe na 386 računaru i padne u
nesvest kad vidi kako to sporo radi na mom XT. Sa druge
strane, moji programi su munje na bržim računarima jer su
"maksimalno" optimizovani - samo takvi rade na XT-u. :)
< C= Commodore PC10-III - forever & ever >
pascal.196postmast,
From: ss45791d@buefhp.etf.bg.ac.yu (Simic Srdjan)
Subject: Re: $R
Date: Mon, 20 Jun 1994 09:29:13 GMT
: U jednom sorsu sam nasao ovo:
: {$R ime.dat}
Hi
Ovo pise u helpu
Specifies the name of the resource file to be included in an application or
library.
Syntax: {$R FileName}
Type: Local
Remarks:
The default extension for FileName is .RES. It must be a Windows resource
file.
Nije mi jasno zasto nisi pogledao help (Radi se o verziji 7.0)
Nije bas pametno postavljati ovakva pitanja narocito sada kada je
setnet povezan na Bint, jer ona opterecuju mrezu.
--
Srdjan Simic srdjan@osmeh.fon
ss45791d@buefhp.etf
simic_45791d@buef78.etf
pascal.197ilotina,
Pitanjce : Kako saznati koliko se fajlova nalazi u nekom
direktorijumu, bez upotrebe findfirst & findnext procedura,
tj. da li postoji brži način, možda preko nekog doc poziva
ili slično?
Ivan
pascal.198djelovic,
-> #197, ilotina> Pitanjce : Kako saznati koliko se fajlova nalazi u nekom
> direktorijumu, bez upotrebe findfirst & findnext procedura,
> tj. da li postoji brži način, možda preko nekog doc poziva
> ili slično?
Ništa čisto. Ukoliko te zanimaju prljave tehnike, pogledaj mjovin članak u
poslednjim (ili beše pretposlednjim?) računarima.
P.S. Ma Miljan je bre ko stvoren za te prljave stvari :).
pascal.201dr.grba,
-> #194, mdave>> Nije to nikakav problem. Samo pravi muškarci koriste XT. :)
Ali ako ima Nan-Tan tastaturu (((:
pascal.202inesic,
-> #194, mdave> Nije to nikakav problem. Samo pravi muškarci koriste XT. :)
Imam da izjavim da bih radije bio pičkica samo kad bih imao para
da kupim jedan 486. Mada, s druge strane, gomila sitnobiznisnih
firmi jednostavno neće da kupe ništa jače od 286, jer im i to
radi knjigovodstvo sasvim dobro. Možda nije loše držati jednog
XTa negde u zapećku, tek kolko da ima čovek na čemu da proba
aplikaciju, pre nego što je proda.
inesic
pascal.203inesic,
-> #193, omega> Koliko znam i TP 7.0 radi na XT-u.
Ha, ha!
Kad sam, ima tome valjda više od godinu ( ma kakvi godinu )
instalirao TP6.0 i kad mi je, pri pikušaju da izvršim neki demo,
prijavio not inaf memori, shvatio sam da XT tu nema šta da traži.
Tužno, al' šta ćeš.
Ipak, hvala ti za predlog: neću biti lenj i skinuću taj SHROM
inesic
pascal.204inesic,
-> #192, ognjen> Zasto se patis preko command.com-a? Uradi legalno sa:
>
> MKDIR ('basic');
Eto kako čovek svaki dan može nešto novo da nauči. Nisam ni znao
da tako nešto postoji. Prvi put mi je u životu zatrebalo. Naravno
da ću uraditi legalno. Međutim, pitanja o $M ostaju aktuelna, jer
uvek zatreba da se startuje externi editor ili bilo kakav mali
ali nedostižni jutiliti, koji napravi neki majstor i koji ja ne
umem da napravim bolje. Još kad je PD :)
inesic
pascal.205inesic,
-> #191, dejanr> $M se stavlja na početku programa i ima tri parametra - prvi je
> veličina steka, drugi minimalni heap a treći maksimalni heap.
> Recimo, ako ti je 16 K za stek dovoljno i ako alociraš raznim
> nizovima najviše još 64 K, koristi {$M 17000,0,65000} i biće
> prostora za poziv command.com-a.
Shvatam ideju, ali ne i detalje. Šta ide na stek, a šta na hip.
Gde idu promenjive i procedure iz junita. Ukratko, KAKO da znam
koliko treba da odvojim za stek, a koliko za hip.
inesic
pascal.206eagle,
-> #190, inesic> moram da koristim TP 5.5. Neko je tu objasnio da se problem
> korišćenja $M zaobilazi veštim korišćenjem procedure/funkcije
> setMemTop,ali nje u helpu od TP 5.5 nema.
Prevedi ovo tasm-om, i eto trazene procedure.
MODEL TPASCAL
.DATA
EXTRN PrefixSeg:WORD
.CODE
PUBLIC SetMTop
SetMTop PROC NEAR P: DWORD
mov bx, word ptr P
add bx, 000Fh
mov cl, 04
shr bx, cl
add bx, word ptr P + 2
mov ax, ŠPrefixSegĆ
sub bx, ax
mov es, ax
mov ah, 4ah
int 21h
ret
SetMTop ENDP
END
pascal.207markom,
-> #203, inesic:: Tužno, al' šta ćeš.
žudno, imam ortaka koji bez problema radi u TP 7.0 na XT-u sa 640K
memorije :)
pascal.208omega,
-> #203, inesicŢ Kad sam, ima tome valjda vise od godinu ( ma kakvi godinu )
Ţ instalirao TP6.0 i kad mi je, pri pikusaju da izvrsim neki demo,
Ţ prijavio not inaf memori, shvatio sam da XT tu nema sta da trazi.
Verovatno si kompajlirao iz "okoline" i stavio Compile Destination:Memory :)
E pa, trebalo je Compile Destination:Disk i upalilo bi :) Ne verujem da
je sam program (vec iskompajliran) izjavio da nema dovoljno memorije :)
pascal.209dejanr,
-> #205, inesic>> Shvatam ideju, ali ne i detalje. Šta ide na stek, a šta na hip.
>> Gde idu promenjive i procedure iz junita.
Na heap ide ono što alociraš sa getmem, new i... da'l ima još nešto.
Parametri, lokalne promenljive itd, idu na stek
>> Gde idu promenjive i procedure iz junita. Ukratko, KAKO da znam
>> koliko treba da odvojim za stek, a koliko za hip.
Za heap možeš da proračunaš prema getmem-ovima. Za stek je teorijski
moguće proračunati, ali bi bilo jako veliki posao, tako da uglavnom
ide "odokativno". 16 K je često dovoljno.
pascal.210markom,
-> #209, dejanr:: Za heap možeš da proračunaš prema getmem-ovima. Za stek je teorijski
:: moguće proračunati, ali bi bilo jako veliki posao, tako da uglavnom
:: ide "odokativno". 16 K je često dovoljno.
A 99% posto programa koji se napišu lepo i optimizovano, kao i bez
rekurzije su zadovoljni i sa {$M 1024,0,0} :)
pascal.211mmitrovic,
-> #205, inesicŮ█▀█Ţ Shvatam ideju, ali ne i detalje. Šta ide na stek, a šta na hip.
Ů█▀█Ţ Gde idu promenjive i procedure iz junita. Ukratko, KAKO da znam
Data Segment:
Globalne promenljive, globalne i lokalne tipizirane konstante,
Stek:
Povratne adrese, lokalne promenljive
Heap:
Dinamičke promenljive (alocirane sa New, GetMem, ..)
Ukratko pusti HEAP do maximuma, uključi MEMORY unit i pre nego
uradić Exec zapamti HeapTop i postavi kraj heapa na HeapPtr. Nakon
Execa vrati Heap na HeapTop. :) Moram priznati da je ovo bilo
nejasno, ali se ne sećam napamet naziva procedura iz Memory unit.
Ako nije jasno, buni se. ;)
pascal.212mmitrovic,
-> #197, ilotinaŮ█▀█Ţ direktorijumu, bez upotrebe findfirst & findnext procedura,
Ů█▀█Ţ tj. da li postoji brži način, možda preko nekog doc poziva
Ů█▀█Ţ ili slično?
Možeć da ideć korak niže, saznać dužinu dir fajla (direktorijumi
su fajlovi), koja će biti (cluster size*x), onda locirać dir na
disku, pročitaš clustere i prebrojić dir entry-e.
Sve u svemu, koristi ff i fn, malo je sporije (češće pristupa disku)
ali je lakše za programiranje i kraći je kod.
pascal.213mmitrovic,
-> #198, djelovicŮ█▀█Ţ P.S. Ma Miljan je bre ko stvoren za te prljave stvari :).
Ko je taj moj imenjak? Vidim ima ga i u tvom tekstu.
pascal.214mmitrovic,
-> #199, postmastŮ█▀█Ţ Da nemas mozda neka pisana uputstva za koriscenje Paradox Enginea
Ů█▀█Ţ sa TPascalom?
Nek me neko uputi preko maila gde mogu kupiti Paradox Engine. ;)
Uputstva trebaju i meni, pa ako ih neko ima u e-formi, ...
pascal.215dpriest...,
Hi.
Zna li neko da li windows ima neki karakteristican 'potpis' negde u
memoriji dok je aktivan? Ako ima bio bih zahvalan na informaciji.
DP...
pascal.216dejanr,
-> #214, mmitrovic>> Nek me neko uputi preko maila gde mogu kupiti Paradox Engine. ;)
Prodaje CET.
pascal.217djelovic,
-> #213, mmitrovic> Ko je taj moj imenjak? Vidim ima ga i u tvom tekstu.
mjova :)
pascal.218djelovic,
-> #209, dejanr> Za stek je teorijski moguće proračunati, ali bi bilo jako veliki posao,
> tako da uglavnom ide "odokativno". 16 K je često dovoljno.
Evo empirijske metode: Na početku programa, popuniš stek nekim stringom. Na
kraju, pogledaš dokle se taj string još uvek prostire, oduzmeš od ukupne
veličine steka, i eto ti procene koliko si steka potrošio. Dodaj na to stotinak
bajtova, i trebao bi da budeš siguran u rezultat, ukoliko u programu ne
koristiš neku rekurziju.
pascal.219maki,
-> #215, dpriest...> Zna li neko da li windows ima neki karakteristican 'potpis' negde u
Pogledaj poruke 3.95 i 3.96 u ovoj konferenciji.
pascal.220inesic,
-> #211, mmitrovic> Data Segment:
> Globalne promenljive, globalne i lokalne tipizirane konstante,
Šta je sad ovo? Toga nema u $M. Da li je taj data segment nešto
što je fiksno kod svakog programa ili se i to menja, tj. raste i
smanjuje se po potrebi? Je l' to ono parče na koje pucaju oni
pointeri koji pokazuju na promenjive?
inesic