PCPROG.4

22 Apr 1994 - 05 Jan 1995

Topics

  1. algoritmi (153)
  2. comment (15)
  3. ms.dos (123)
  4. windows (304)
  5. asembler (103)
  6. basic (80)
  7. jezici (196)
  8. pascal (880)
  9. cccc (586)
  10. cpp (157)
  11. clipper (1267)
  12. baze.podataka (525)
  13. razno (529)

Messages - pascal

pascal.111 dejanr, -> #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.112 dejanr, -> #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.113 dzakic, -> #107, bigbrada
> Exec ('C:\Ime.Bat', ''); Ako se ne varam, ne bi moglo tako. Već: Exec(GetEnv('COMSPEC'),'/c ime.bat');
pascal.114 postmast,
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.115 markom, -> #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.116 omega, -> #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.117 nikac, -> #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.118 kriss, -> #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.119 mmitrovic, -> #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.120 mmitrovic, -> #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.121 ognjen, -> #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.122 dejanr, -> #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.124 vitez.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.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 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.zip
pascal.126 ognjen, -> #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.127 ognjen, -> #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.pas
pascal.128 ognjen, -> #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.130 asterix, -> #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.131 postmast,
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.133 postmast,
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.134 postmast,
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.136 postmast,
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.137 mmitrovic, -> #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.138 mmitrovic, -> #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.139 dejanr, -> #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.140 postmast,
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.141 postmast,
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.142 kenza, -> #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.143 inedeljkovic, -> #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.144 kenza, -> #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.145 dejanr, -> #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.146 omega, -> #144, kenza
Ţ Da li new koristi samo konvencionalnu memoriju ili i ems/xms? Kamo puste srece da koristi ems/xms :((((
pascal.147 postmast,
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.148 postmast,
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.149 postmast,
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.150 postmast,
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.151 postmast,
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.152 markom, -> #146, omega
:: Kamo puste srece da koristi ems/xms :(((( Pa sa overlay jedinicom možeš da koristiš EMS :> Ali naravno, nije to to :((
pascal.153 dtadic,
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.zip
pascal.155 omega, -> #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.156 dejanr, -> #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.157 markom, -> #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.158 ognjen, -> #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.159 ognjen, -> #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.160 dejanr, -> #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.161 asterix,
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.162 goxx, -> #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.164 pedjak, -> #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.165 pedjak, -> #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.zip
pascal.166 omega, -> #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.167 omega, -> #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.168 dejanr, -> #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.169 pedjak, -> #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.170 markom, -> #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.171 markom, -> #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.172 omega, -> #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.173 omega, -> #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.174 markom, -> #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.175 dejanr, -> #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.176 mmitrovic, -> #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.177 mmitrovic, -> #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.178 mmitrovic, -> #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.179 mmitrovic, -> #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.180 asterix, -> #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.181 vcalic, -> #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.182 omega, -> #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.183 mmitrovic, -> #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.184 dejanr, -> #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.186 postmast,
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.187 postmast,
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.188 postmast,
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.190 inesic,
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.191 dejanr, -> #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.192 ognjen, -> #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.193 omega, -> #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.194 mdave, -> #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.196 postmast,
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.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? Ivan
pascal.198 djelovic, -> #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.201 dr.grba, -> #194, mdave
>> Nije to nikakav problem. Samo pravi muškarci koriste XT. :) Ali ako ima Nan-Tan tastaturu (((:
pascal.202 inesic, -> #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.203 inesic, -> #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.204 inesic, -> #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.205 inesic, -> #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.206 eagle, -> #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.207 markom, -> #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.208 omega, -> #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.209 dejanr, -> #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.210 markom, -> #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.211 mmitrovic, -> #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.212 mmitrovic, -> #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.213 mmitrovic, -> #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.214 mmitrovic, -> #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.215 dpriest...,
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.216 dejanr, -> #214, mmitrovic
>> Nek me neko uputi preko maila gde mogu kupiti Paradox Engine. ;) Prodaje CET.
pascal.217 djelovic, -> #213, mmitrovic
> Ko je taj moj imenjak? Vidim ima ga i u tvom tekstu. mjova :)
pascal.218 djelovic, -> #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.219 maki, -> #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.220 inesic, -> #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