PCPROG.5

05 Jan 1995 - 02 Oct 1995

Topics

  1. algoritmi (106)
  2. comment (2)
  3. ms.dos (27)
  4. windows (332)
  5. asembler (203)
  6. basic (228)
  7. jezici (126)
  8. pascal (1085)
  9. cccc (546)
  10. cpp (117)
  11. clipper (1048)
  12. baze.podataka (194)
  13. fox (231)
  14. cavo (192)
  15. razno (593)

Messages - pascal

pascal.312 dejanr, -> #311, ddabic
>> Prvi utisci su impresivni, mada moram da priznam da do sada nisam radio >> u Paskalu lakse je nego se baktati sa zaboravljenim Bejzikom. I ja sam, kao ljubitelj Turbo Pascala, bio vrlo zainteresovan za Delphi, trebalo bi da ovih dana dobijem original za prikaz u sledećem broju PC-ja. U međuvremenu imam neku pre-release verziju, i utisci o njoj su dosta povoljni. Mada ne delim baš toliko oduševljenje vezano za baze podataka, prema onome što sam do sada video zaostaje za Visual Basicom + Access Basic-om. Delphi je zgodan za rad i dosta produktivan, ali je i prilično "glomazan". Izgleda da ne može ništa manje da se napravi pod Windows-om :(
pascal.313 postmast,
From: Vlado.Prelovac@f104.n103.z38.setnet.setnet.co.yu (Vlado Prelovac) Subject: help! Date: Mon, 24 Apr 1995 01:52:16 Da li neko moze da mi kaze kako da uradim sledece: Imam na ekranu npr. HISCORE listu u nekoj igrici a u pozadini hocu da uradim neki efekat npr. starfield ili da mi se loptica odbija od zidove i sl. a mi pri tom ne remeti text hiscore liste odnosno da je on sve vreme nepromenljiv dok se ova radnja odvija u pozadini... (naravno u grafickom modu) Unapred zahvalan Pascal korisnik. * Origin: *SETNet: Taurunum BBS +381 11 2354-253, Zemun* (38:103/104)
pascal.314 postmast,
From: Guduric.Predrag@f113.n103.z38.setnet.setnet.co.yu (Guduric Predrag) Subject: Window Date: Sat, 22 Apr 1995 02:48:11 Kako mogu da u grafickom rezimu ostvarim efekat koji komanda window ima u textualnom da li nesto tako vec postoji ili ga ima u nekom za- sebnom unitu itd ??? Caveman ... I'd rather be in the Cave than wallow in QWKsand! * Origin: * Milliways * BELGRADE * Serbia * SETNet Address (38:103/113)
pascal.315 postmast,
From: zoran.rilak@rstones.durlan.co.yu (Zoran Rilak) Subject: Oberon? Date: Tue, 25 Apr 1995 08:36:00 CET QWK To: Milos Dragicevic @MSGID: 0:0/0.0 2f9cecd0 @PID: BWRA 3.02 [Eval] (Tekst poruke: Milos Dragicevic, na temu PASCAL) MD> Ako je Modula-2/Modula-3/Oberon u pitanju, salji i meni. :) Oberon? Koji kompajler koristis i koji su mu prohtevi? Ako te ne mrzi, baci mi par recenica sa opisom glavnih karakteristika tog jezika. Bio sam suvise lenj u ISP da bih citao, i suvise posten da bih maznuo one slatke ICM publikacije ;( I, da ko je autor jezika i da li ima slicnosti sa M2/M3 ? 3OPAH --- Blue Wave/RA v2.12 [NR] * Origin: BBLink <tm> * Rolling Stones * 018.325.314 * Nis (0:0/0) #! rnews 709
pascal.316 postmast,
From: ivan.jocic@durlan.co.yu (Ivan Jocic) Subject: Window Date: Tue, 25 Apr 1995 8:08:00 GMT QWK To: Guduric Predrag From : Ivan Jocic To : Guduric Predrag Subject: WINDOW GP> Kako mogu da u grafickom rezimu ostvarim efekat koji komanda GP> window ima u textualnom da li nesto tako vec postoji ili ga ima u GP> nekom za- sebnom unitu itd ??? A sta radi ta komanda window? Ja sam pravio razne graficke prg. u MSC 6.0 i verovatno imam to sto ti treba. The Shadow ... I wan'a get HIGH! --- Blue Wave/RA v2.12 [NR] ■ MKNet ■ BBLink <tm> ■ Sirius BBS ■ 018/711-667 ■ W.T:23-08 #! rnews 706
pascal.317 postmast,
From: djdule@durlan.co.yu (Djdule) Subject: Pascal Date: Sat, 22 Apr 1995 00:50:00 GMT QWK To: Milos Corak MC >Da li ima neko tablicu prekida za inicijalizaciju vesa MC >grafike u true-coloru?U pitanju su BIOS prekidi i adrese. Mislim da ne postoji VESA standard za true color. --- ■ SPEED 1.30 #514 ■ "Yield to temptation, it may not pass your way again." #! rnews 554
pascal.318 postmast,
From: Vlado.Prelovac@f104.n103.z38.setnet.setnet.co.yu (Vlado Prelovac) Subject: Re: Help! Date: Thu, 27 Apr 1995 01:37:00 IJ> tackice na svoja mesta. Ako ti nesto nije bilo jasno ostavi poruku, ^^^^^^^^^^^^^^^^^^^^^ You bet... Ajde ti to ako mozes malp opsirnije i prihvatljivije molim te... Resenje koje sam ja imao u vidu je: repeat -Nactam tackice na izracunatim kordinatama -Izcrtam (ponovo) text until bla_bla; No, ovo je moguce ali je jako sporo posto stalno ispisujem text koji je nepromenljiv u toku vremena (jednostavna Hiscore lista) i na fixnim kordinatama na ekranu. Uzgred kako bi uradio starfield, da se dobije realistican efekat kretanja kroz prostor... * Origin: *SETNet: Taurunum BBS +381 11 2354-253, Zemun* (38:103/104)
pascal.319 postmast,
From: Mladen.Adamovic@p5.f101.n101.z38.setnet.setnet.co.yu (Mladen Adamovic) Subject: pascal Date: Wed, 26 Apr 1995 23:26:07 "R> Novi sam korisnik Sezama, i zelim da posaljem neke svoje programe na "R> Moduli, a ne znam okme da se obratim za pomoc (Upload mi odgovara da "R> nemam pravo upisa na diskH r:\program) Molim nekoga za odgovor, Posalji program u CONF i ako Bulaja, pardon neko od moderatora/sisopa skonta da valja bice prebacen tamo..... Sta mislis, kako se na sezamu nalaze samo PROBRANI programi....? ... This tagline is SHAREWARE! To register, send me $10 * Origin: Sveti Sava BBS Prijedor 079 11 629 SETNet: (38:101/101.5)
pascal.320 postmast,
From: Mladen.Adamovic@p5.f101.n101.z38.setnet.setnet.co.yu (Mladen Adamovic) Subject: pascal Date: Wed, 26 Apr 1995 23:26:08 "C> Ima li neko program u pascalu za ocitavanje strukture GIF fajlova. "C> Interesuje me nacin upisivinja i ucitavanja GIF. Ima tako nesto na SEZAM-u.... 99%.... ... This tagline is SHAREWARE! To register, send me $10 * Origin: Sveti Sava BBS Prijedor 079 11 629 SETNet: (38:101/101.5)
pascal.321 postmast,
From: Mladen.Adamovic@p5.f101.n101.z38.setnet.setnet.co.yu (Mladen Adamovic) Subject: pascal Date: Wed, 26 Apr 1995 23:26:08 "L> Radim u TP 6.0 neki projekat (ovde nije od znacaja koji) i pri "L> izvrsavanju programa javlja se greska oblika: "L> "ERROR 202: STACK OVERFLOW ERROR", i TP "pokaze" na funkcijski Ovde stvarno jeste od znacaja koji program radis(stek si povec'o kazes....) , ako je VAZNO posalji program u Conf..... ... This tagline is SHAREWARE! To register, send me $10 * Origin: Sveti Sava BBS Prijedor 079 11 629 SETNet: (38:101/101.5)
pascal.322 niklaus, -> #312, dejanr
Subject: Re: Delphi (:> ... trebalo bi da ovih dana dobijem original za prikaz u sledećem (:> broju PC-ja. Mala digresija. Nije li naziv časopisa "PC Press"? Ovako kada se pročita "...sledećem broju PC-a" čovek može da pomisli i na P6 (naslednik Pentiuma, jelte). (:> Delphi je zgodan za rad i dosta produktivan, ali je i prilično (:> "glomazan". Izgleda da ne može ništa manje da se napravi pod Windows-om (:> :( Koja je 'retail' cena Delphi-ja? Da li će svaka platformska varijanta Delphi-ja podržavati generisanje aplikacija za ostale platforme? (: SeanŐ :)
pascal.323 niklaus, -> #318, postmast
Subject: Re: Help! (:> Resenje koje sam ja imao u vidu je: (:> (:> repeat (:> ... (:> until bla_bla; (:> (:> No, ovo je moguce ali je jako sporo posto stalno ispisujem text koji je (:> nepromenljiv u toku vremena (jednostavna Hiscore lista) i na fixnim (:> kordinatama na ekranu. Mnogo bi lepše izgledala ta hi-score lista, kada bi se nalazila u nekom prozoru, a ne ovako sirovo - golo na ekranu. U tom slučaju je lakše imati i starfield pozadinski efekat. Tada bi sa svaku proračunatu tačku imao proveru 'if not inside(<window>)'. (: SeanŐ :)
pascal.324 dejanr, -> #322, niklaus
>> Mala digresija. Nije li naziv časopisa "PC Press"? Naziv časopisa je "PC". "PC Press" je naziv firme koja ga izdaje. >> Koja je 'retail' cena Delphi-ja? Izgleda da ima neki mali milion cena, zbog raznih upgrade-ova sa raznih platformi. Kada se ide "od nule", mislim da je između 300 i 400 dolara. Trebalo bi da može da se nađe upgrade za oko 150, mada ne videh nešto oglase tog tipa.
pascal.325 bulaja, -> #324, dejanr
│ Koja je 'retail' cena Delphi-ja? └─── Kod "Programmer's Paradise" je 189 USD, ne piše da li je u pitanju regularna verzija ili upgrade.
pascal.326 postmast,
From: Ivan.Markovic@f122.n103.z38.setnet.setnet.co.yu (Ivan Markovic) Subject: GRAFIKA U TVISION-U ... Date: Thu, 27 Apr 1995 02:31:11 Jedan prijatelj me je zamolio da mu pogledam za nekakav unit koji omogucava da Turbo Vision predje u graficki mod. Kaze da je citao negde o tome - verovatno Racunari, ali nije siguran. Ako neko ima pojma o cemu se radi neka ostavi i gde se isti moze naci ... ---FidoPCB v1.0 [NR] * Origin: * Fenix BBS, Beograd 011 414-312;404-679 * SetNet: (38:103/122)
pascal.327 postmast,
From: DAMJAN.JANEV@f131.n108.z38.setnet.setnet.co.yu (DAMJAN JANEV) Subject: Window Date: Tue, 25 Apr 1995 11:55:00 GP:-> Kako mogu da u grafickom rezimu ostvarim efekat koji komanda window GP:-> ima u textualnom da li nesto tako vec postoji ili ga ima u nekom za- GP:-> sebnom unitu itd ??? Mislim da se procedura zove GraphWindow i mislim da se nalazi u GRAPH.TPU. damJANev ___ ■ OLX 2.1 TD ■ Red, white, and blue. Three colors that only run forward. * Origin: SetNet * VEGA BBS * Skopje * +389 91 225 280 (38:108/131)
pascal.328 postmast,
From: ivan.jocic@durlan.co.yu (Ivan Jocic) Subject: Re: help! Date: Fri, 28 Apr 1995 8:55:00 GMT QWK To: Vlado Prelovac From : Ivan Jocic To : Vlado Prelovac Subject: RE: HELP! VP> Resenje koje sam ja imao u vidu je: VP> repeat VP> -Nactam tackice na izracunatim kordinatama VP> -Izcrtam (ponovo) text VP> until bla_bla; VP> No, ovo je moguce ali je jako sporo posto stalno ispisujem text koji VP> je nepromenljiv u toku vremena (jednostavna Hiscore lista) i na fixnim U pravu si - sporo je. Prva stvar. trebalo bi da imas stvarno brze rutinice za pixel (ne one iz PASCAL-a). Ako hoces mogao bih da ti napisem jednu. Isto tako moras da imas brze rutinice za getpixel.. Ja imam jednu, ali upravo dok ti pisem ovo pala mi je na pamet mnoooogo brza ideja (tj. algoritam). Inace da bi resio ono sa ispisivanjem teksta trebao bi da koristis sledecu stvar. Kada izracunas nove koordinate proveris da li na njima imas vec neku tackicu (tj. da li je boja<>crna). Ako jeste ti ne upisujes tu tackicu, i zabelezis negde, u nekoj promenljivoj, da taj pixel nisi postavio. Tako posle i kada treba da vratis nazad tackicu vracas samo pixel-e koje si postavio. To bi trebalo derasticno da ti ubrza prg. Jos bi bilo bolje da znas asembler, pa sve da napises u njemu(ili bar dobar deo). VP> Uzgred kako bi uradio starfield, da se dobije realistican efekat VP> kretanja kroz prostor... E to je vec malo tesko. Tackice moraju da ti idu iz centra, i da kada "prolaze" pored tebe se uvecavaju. Ovo je malo teze da se resi, ali mozes da koristis drugi fazon. Recimo neke tackice idu brze, a neke sporije, a skrol je po horizontali. Ovo bi trebalo da upali. The Shadow ... call Sirius BBS: 018/711-667, V42B, work time: 23-08 ... >> Zivot je ugasen. Bravo vatrogasci! << --- Blue Wave/RA v2.12 [NR] ■ MKNet ■ BBLink <tm> ■ Sirius BBS ■ 018/711-667 ■ W.T:23-08 #! rnews 817
pascal.329 postmast,
From: Mladen.Adamovic@p5.f101.n101.z38.setnet.setnet.co.yu (Mladen Adamovic) Subject: pascal Date: Fri, 28 Apr 1995 17:04:10 "I> steku? Radi se neka rekurzija, a ne znam kako da proverim ima "I> li mesta za poziv procedure. Zapamti da se relativno lako preko pointera pravi VVVVVEEEEEEELLLLLIIIIIKKKI stek..... Pa ako jednog dana udaris u plafon..... ... This tagline is SHAREWARE! To register, send me $10 * Origin: Sveti Sava BBS Prijedor 079 11 629 SETNet: (38:101/101.5)
pascal.330 postmast,
From: zoran.rilak@rstones.durlan.co.yu (Zoran Rilak) Subject: Re: help! Date: Sun, 30 Apr 1995 23:42:00 CET QWK To: Ivan Jocic (Tekst poruke: Ivan Jocic, na temu RE: HELP!) VP> Uzgred kako bi uradio starfield, da se dobije realistican efekat VP> kretanja kroz prostor... IJ> E to je vec malo tesko. Tackice moraju da ti idu iz centra, i da kada IJ> "prolaze" pored tebe se uvecavaju. Ovo je malo teze da se resi, ali IJ> mozes da koristis drugi fazon. Recimo neke tackice idu brze, a neke IJ> sporije, a skrol je po horizontali. Ovo bi trebalo da upali. Zasto? Moze i ovako: svaka tacka ima koordinate (X, Y, Z). One je predstavljaju u prostoru. Ako predstavis ekran pomocu ravni u koordinatnom sistemu odredjenom y i z osama, a svoje oko tackom na x-osi sa suprotne strane ravni od one na kojoj se nalaze tacke, mozes da postavis proporcije: x : ekran_x = z : oko_z (1) y : ekran_y = z : oko_z (2) ekran_x, ekran_y - koordinate tacaka na ekranu Odavde se vidi da ti je potrebna samo udaljenost oka od ravni ekrana (sa tom vrednoscu mozes da eksperimentises), a priblizavanje zvezda se izvodi jednostavnim povecavanjem (ili smanjivanjem, zavisi kako si postavio koordinatni sistem) z vrednosti koordinata tacaka. Ajd' pa javi sta si uradio. 3OPAH ... sin(Ó - ß) = sin Ó cos ß - cos Ó sin ß --- Blue Wave/RA v2.12 [NR] * Origin: BBLink <tm> * Rolling Stones * 018.325.314 * Nis (0:0/0) #! rnews 1013
pascal.331 nlazic, -> #314, postmast
> Kako mogu da u grafickom rezimu ostvarim efekat koji komanda > window ima u textualnom da li nesto tako vec postoji ili ga ima > u nekom za- sebnom unitu itd ??? Procedura koja ovo radi nalazi se u GRAPH.TPU. Njena deklaracija je sledeća: procedure SetViewPort (X1,Y1,X2,Y2:Integer; Clip:Boolean); gde su X1,Y1,X2,Y2 koordinate gornjeg levog i donjeg desnog ugla pravougaonog dela ekrana. Ako je vrednost Clip TRUE, crteži se odsecaju na granicama prikaza. Bitno je napomenuti da ova procedura NE pamti sadrzaj ekrana "ispod" prozora. Prozor možeš obrisati sa ClearViewPort, itd... P.S. X1,Y1, X2,Y2 se UVEK zadaju u odnosu na stvarne koordinate ekrana i nemaju nikakve veze sa eventualno prthodno upotrebljenom procedurom SetViewPort i njenim parametrima. :) Nebojša :)
pascal.332 nlazic, -> #326, postmast
> Jedan prijatelj me je zamolio da mu pogledam za nekakav unit > koji omogucava da Turbo Vision predje u graficki mod. Kaze da > je citao negde Arhiva sa ovim unit-om postoji na SEZAM-u: R:ĐPASCALĐtvg110a.zip 126841 TVGraph v1.10: Turbo Vision u EGA/VGA grafičkom modu Kada se ovo instalira i pusti u rad (ako se dobro sećam) ne dobijaš baš ništa novo. Sve izgleda potpuno isto, samo što je u grafičkom modu. Naravno, mogu se koristiti standardne funkcije GRAPH unit-a, ali treba biti prilično obazriv, jer se on ne slaže baš najbolje sa TVision-om. :) Nebojša :)
pascal.333 nlazic, -> #293, jasicp
> Kako se postize da aplikacija ima razlicite MenuBar-ove, u > zavisnosti od toga sta radi ? Otprilike isto kao za razlicite > statusne linije. Naravno, radi se o TV objektima. Prvo što mi pada na pamet napisao sam u datoteci newmenu.zip koja ide uz ovu poruku. To je izmenjen TUTOR04C.pas iz BP 7.0, tako da ima različite Menu Bar-ove. Nisam probao, ali sam 99% siguran da će raditi i u TP 6.0. Nadam se da ćeš se uz pomoć komentara u listingu lako snaći. :) Nebojša :) newmenu.zip
pascal.334 flash,
Pozdrav! Imam problem. Pišem TSR program u TP6 koji bi između ostalog trebao s vremena na vreme da upiše nešto u neku datoteku na disku. Pre poziva moje procedure koja se može aktivirati preko tastature (int 9h), svakih X minuta (int 8h), ili povremeno (int 28h), ja proverim da li je: In_Dos_Flag=false (indikator da se izvršava neka DOS funkcija), Crtitcal_Error_Flag=false (u toku je obraćanje disku preko DOS funkcija) Tek ako su ovi uslovi ispunjeni, vrši se upis u fajl. (open,write, close) Problem je u tome, što programi koji pišu na disk preko BIOS-a ne koriste CriticalErrorFlag i moja procedura ne zna da je upis na disk već u toku, i normalno, računar se zaglavi. Rešenje sam video u TSRBONES.ASM. Treba preuzeti int 13h i pre poziva originalnog interapta setovati neku promenljivu 'DiskFlag', a posle je resetovati. To je ovo: ;****************************************************************** NewInt13 PROC FAR ;We hook Int13h only for purpose ;of setting a flag to prevent our ;TSR from triggering during time- ;critical Disk accesses. mov CS:diskflag,1 ;Set flag to show Disk access. ; pushf ;Invoke prior Int13 handler cli ;(be sure interrupts disabled) call CS:oldint13 ;by simulating an interrupt. ; mov CS:diskflag,0 ;Clear flag to show Disk finished. ; ; The following RET 2 bumps the SP register up by 2 bytes to effecti- ; vely take the flags off the stack (where they were put by the invo- ; king INT 13h) WITHOUT popping them off and ruining the meaningful ; flags left in the Flags register by the original DOS INT13 handler ; (the DOS INT13 handler also returns via a RET 2 to keep from ru- ; ining the Flags that the handler has painstakingly prepared for ; communicating back to the calling program). The effect on the stack ; pointer, SP, is exactly the same as with the more usual IRET. It is ; just that the Flags in the Flag register are preserved at the va- ; lues the handler placed and wanted there. ; RET 2 ;Return from interrupt while ;preserving flags. NewInt13 ENDP ;********************************** Ja sam to preveo na TP ovako: Procedure NewInt13 (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP :word); interrupt; begin DiskFlag^:=TRUE; pushF; Inline($FA); { CLI } OldInt13; DiskFlag^:=FALSE; end; Međutim, to ne radi. Pomagajte... KOLE P.S. Izvinite na dugačkoj poruci.
pascal.335 postmast,
From: Sebastian.Adanko@f107.n111.z38.setnet.setnet.co.yu (Sebastian Adanko) Subject: PE_TP7.teh.restart Date: Sun, 30 Apr 1995 23:54:51 Cao. Evo mene opet, posto sam pun pitanja, a imam tako malo odgovora. :( :) Anyway, zanimlao bi me kako iz TP 7.0 izvesti sto kulturnije restart programa, znaci, brisanje svih promenljivih i "GOTO 10" ;)) Anybody? Phuzzy Logik ... It is easier to get forgiveness than permission. * Origin: Prometheus BBS - The Northern Frontier - SETNET (38:111/107)
pascal.336 postmast,
From: Guduric.Predrag@f113.n103.z38.setnet.setnet.co.yu (Guduric Predrag) Subject: help! Date: Wed, 26 Apr 1995 07:39:04 VP> Unapred zahvalan Pascal VP> korisnik. Ako si zaista Pascal korisnik tj. ne koristis komande za inline asembliranje vec ovo radis pomocu starog, dobrog putimage-a onda je stvar samo u zadnjem parametru komande tj. da li se radi o normalput-u, xorput, orputu ili andputu. Mislim da je parametar koji sprecava preklapanje andput ali me ne hvataj za rec vec pro- citaj turbo help za doticne. Caveman ... Catch the Blue Cave! * Origin: * Milliways * BELGRADE * Serbia * SETNet Address (38:103/113)
pascal.337 postmast,
From: Guduric.Predrag@f113.n103.z38.setnet.setnet.co.yu (Guduric Predrag) Subject: Window Date: Tue, 25 Apr 1995 08:33:05 IJ> A sta radi ta komanda window? Ja sam pravio razne graficke prg. u MSC IJ> 6.0 i IJ> verovatno imam to sto ti treba. Mislim da radi isto ono sto radi i komanda Window u C textualnom modu . . . Jedna od onih bezbrojnih istih komandi u Pascalu i C-u . . . Caveman ... I'd rather be in the Cave than wallow in QWKsand! * Origin: * Milliways * BELGRADE * Serbia * SETNet Address (38:103/113)
pascal.338 postmast,
From: Vlado.Prelovac@f133.n103.z38.setnet.setnet.co.yu (Vlado Prelovac) Subject: Re: help! Date: Mon, 01 May 1995 02:09:00 IJ> U pravu si - sporo je. Prva stvar. trebalo bi da imas stvarno brze IJ> rutinice za pixel (ne one iz PASCAL-a). Ako hoces mogao bih da ti IJ> napisem jednu. Bio bih ti veoma zahvalan. Samo posto mi je ovo za maturski rad iz PASCALA molim te da bude sto krace i da je iskomentarises posto nisam bas najbolji sa asm-om... IJ> Ako jeste ti ne upisujes tu tackicu, i zabelezis negde, u nekoj IJ> promenljivoj, da taj pixel nisi postavio. Tako posle i kada treba da IJ> vratis nazad tackicu vracas samo pixel-e koje si postavio. To bi trebalo Probao sam ovo i lepo radi ...HVALA. VP> Uzgred kako bi uradio starfield, da se dobije realistican efekat VP> kretanja kroz prostor... IJ> E to je vec malo tesko. Tackice moraju da ti idu iz centra, i da kada IJ> "prolaze" pored tebe se uvecavaju. Ovo je malo teze da se resi, ali IJ> mozes da koristis drugi fazon. Recimo neke tackice idu brze, a neke IJ> sporije, a skrol je po horizontali. Ovo bi trebalo da upali. Uradio sam i ovo i napokon sam zadovoljan... Sad imam jos jedno pitanje za tebe (vidim da se lepo razumes u ove stvari). Kako da obezbedim DA MI SE SVE ODVIJA ISTOM BRZINOM NA RACUNARIM RAZLICITE BRZINE? Probao sam da napravim funkciju koja "izracuna brzinu' pa onda sam stavio jednu prazznu For petlju koja broji da te brzine(sto je brzina veca FOR se duze izvrsava) ali opet nisam postigao da je svugde ISTA brzina... * Origin: SETNet * BBS Politika, Bgd * +381 11 3229148 * 0-24 (38:103/133)
pascal.339 jasicp,
Koji je najlaksi nacin da se sazna da li neko objekat postoji u programu ? Napominjem sledece: 1. Funkcija message otpada, zato sto se odnosi na objekte tipa PView. 2. Objekat koji treba da se otkrije je naslednik samo objekta TObject. 3. Ako se definise nesto kao: type TMojObj = object(TObject) . . . end; var PTMojObj:^TMojObj; PMojObj :PTMojObj; pa se onda radi kao : PMojObj:=new(PTMojObj,Init) a zatim negde u programu se objekat ukloni sa: Dispose(PMojObj,Done); stos je u tome sto PRE poziva PMojObj:=new(PTMojObj,Init) , PMojObj jeste bio NIL. Posle, naravno, ne. Medjutim, posle poziva Dispose(PMojObj,Done); varijabla PMojObj opet nije NIL, vec nesto<>NIL. Ovo pisem jer bi se moglo testirati if PMojObj<>NIL ==> objekat postoji a u suprotnom ne. Da li ima logicnijeg nacina za "pronalazenje" je li objekat postoji (njegova instanca) ?
pascal.340 nemko, -> #335, postmast
)>Ć- Anyway, zanimlao bi me kako iz TP 7.0 izvesti sto kulturnije )>Ć- restart programa, znaci, brisanje svih promenljivih i "GOTO )>Ć- 10" ;)) Ako mi das samo jedan valjan razlog za sve ovo, mozda cu i pokusati da to resim.
pascal.341 nlazic, -> #294, jasicp
> Insert u aplikaciju, sve funkcionise normalno. Kada > radim ovako, sa grupom, StdEditorDialog uopste ne uspeva da > prikaze dijalog na ekranu, dok na komande reaguje kao daje > tu. Verovatno se dijaloze "ne probiju" do prikaza. Ima li neko > ideju u cemu je stvar ? Stvar uopšte nije jednostavna kako se na prvi pogled čini, ali rešenje naravno postoji. Štos je u tome da ti se dijalozi koje pravi StdEditDialog ne nalaze u tvojoj grupi, već u DeskTop-u, ispod nje. Zato se oni ne vide (zaklanja ih tvoja grupa), ali rade. Zbog obimnosti kompletno rešenje šaljem uz ovu poruku, pa ti vidi. Sličan problem je mene prilično oznojio pre nekog vremena, pa bi mi bilo drago da neko nađe neko kraće rešenje. :) Nebojša :) editdlg.zip
pascal.342 nlazic, -> #338, postmast
> Kako da obezbedim DA MI SE SVE ODVIJA ISTOM BRZINOM NA > RACUNARIM RAZLICITE BRZINE? Najjednostavije je pomoću DELAY. Ona u TP 6.0 ima bag, ali čini mi se da na SEZAM-u ima ispravka. Ako nema mail-uj da ti je bacim. :) Nebojša :)
pascal.343 duzle, -> #339, jasicp
>**> stos je u tome sto PRE poziva PMojObj:=new(PTMojObj,Init) , >**> PMojObj jeste bio NIL. Posle, naravno, ne. >**> Medjutim, posle poziva Dispose(PMojObj,Done); >**> varijabla PMojObj opet nije NIL, vec nesto<>NIL. Ovo >**> pisem jer bi se moglo testirati if PMojObj<>NIL ==> objekat >**> postoji a u suprotnom ne. Da li ima logicnijeg nacina za >**> "pronalazenje" je li objekat postoji (njegova instanca) ? U Done destruktor (na kraju) stavi jedno PMojObj := NIL. Posle proveravaj ovo što si gore naveo... Pozdrav, Ognen
pascal.344 janko, -> #334, flash
> Međutim, to ne radi. Pomagajte... Normalno da ne radi. :) Slično tako ne radeći sors je svojevremeno objavio PBojan u Računarima i patio je od istog baga kao i tvoj. Bag se ogleda u lošem prenosu parametara staroj rutini za interapt, odnosno lošem preuzimanju parametara koje ostavi stara rutina za interapt. Sve to opet ima veze sa načinom na koji kompajler generiše tzv. "calling" sekvence. Konkretno, jedna od stvari koje bi morao da uradiš je da posle poziva stare rutine "ručno" zakrpiš stek tako da i nova vrati "ono što je htela stara." Da gornje razumeo moraš znati: a) asembler za '86 b) preciznu specifikaciju parametara koje pravi INT 13 preuzima i vraća. c) kako TP generiše calling sekvence. Da li imaš još neki sitniji bag ne znam, ali sam za ovaj SIGURAN, i najveći je. Lično sam ovo rešavao za Borland C, i imam asm sors rutina koje to rešavaju. Problem je samo što su one zavisne i od modela, a takođe i što iste fale Turbo Pascalu, i što njihova modifikacija za TP zahteva dosta rada i imanje orignialnih referntnih priručnika (podatke o kodu koji generiše TP nećeš naći u helpu).
pascal.345 madamovic, -> #335, postmast
> From: Sebastian.Adankočf107.n111.z38.setnet.setnet.co.yu > (Sebastian Adanko) Subject: PE_TP7.teh.restart > Date: Sun, 30 Apr 1995 23:54:51 > Anyway, zanimlao bi me kako iz TP 7.0 izvesti sto kulturnije > restart programa, znaci, brisanje svih promenljivih i "GOTO 10" > ;)) Tebi u stvari treba "50 RUN"... Možeš recimo pozvati opet taj isti program preko EXEC, ali pazi, u memoriji ostaje stara kopija programa, tako da ako neekkkoooliiko puta pokreneš "50 RUN" = EXEC your_program dovodi do zaglavljivanja računara... Ako je recimo PROGRAM AHA; možda bi se moglo nešto aha; pa da ga starta opet sa new promenljivim, ali trenutno nemam TP 7.0 pa ne mogu da proverim.... Možeš pokušati ovako : da tvoj program prekine sa radom i prepusti rad novoj kopiji tvog programa, što je u TC(++)-u trivijalno, dok u TP moraš izvesti uz pomoć trikova.... Pomenute trikove je na Sezam prebacio DEJANR daaaaavnnnooo, čini mi se u PC.PROG.1:pascal ili PC.PROG.2:pascal... To je on svojevremeno pitao na Bix-u i našao ta rešenja (2 različita rešenja...). Ne mogu ti reći gde tačno, a pošto nemaš pristup Sezam-u, zamoli prijatelja :( :)...
pascal.346 madamovic, -> #338, postmast
> From: Vlado.Prelovacčf133.n103.z38.setnet.setnet.co.yu (Vlado > Prelovac) Subject: Re: help! > Date: Mon, 01 May 1995 02:09:00 > Sad imam jos jedno pitanje za tebe (vidim da se lepo razumes u > ove stvari). Kako da obezbedim DA MI SE SVE ODVIJA ISTOM > BRZINOM NA RACUNARIM RAZLICITE BRZINE? > Probao sam da napravim funkciju koja "izracuna brzinu' pa onda > sam stavio jednu prazznu For petlju koja broji da te brzine(sto > je brzina veca FOR se duze izvrsava) ali opet nisam postigao da > je svugde ISTA brzina... Zapamtiš vreme,pokreneš svoj program 10 iteracija, i zatim izmeriš delta vreme i proračunaš brzinu, odrediš pauzu između iteracija, i to ti je to... Tako ćeš postignuti brzinu +-5% one na tvom računaru... :) Ako nije bilo jasno, mogu ja i detaljnije... :) :(
pascal.347 nemko, -> #339, jasicp
)>Ć- Dispose(PMojObj,Done); varijabla PMojObj opet nije NIL, )>Ć- vec nesto<>NIL. Ovo pisem jer bi se moglo testirati if )>Ć- PMojObj<>NIL ==> objekat postoji a u suprotnom ne. Da li )>Ć- ima logicnijeg nacina za "pronalazenje" je li objekat A da posle svakog dispose() stavis pmojobject:=NIL?
pascal.348 mmitrovic, -> #334, flash
::::: Procedure NewInt13 (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP :word); ::::: interrupt; ::::: begin ::::: DiskFlagž:=TRUE; ::::: pushF; ::::: Inline($FA); š CLI ć ::::: OldInt13; ::::: DiskFlagž:=FALSE; ::::: end; Ovo ti neće raditi jer kad pozivaš OldInt13 (koji je tipa procedure, pretpostavljam), registri će se razlikovati od onih koji su bili na ulazu (ES:DI će se promeniti pri DiskFlagž:=true; DS,BP će se promeniti na samom ulazu u proceduru, AX odmah na pocetku postaje isti kao DS, i koliko vidim dalje se ne menja), a INT 13 zahteve prima preko registara. (uglavnom ovih spomenutih). Budi srećan što ti ništa nije stradalo na disku (mogo je da ti utrči neki nezgodni servis u AX, pa da ti poformatira nešto). Zato udari procedure NewInt13; interrupt; assembler; asm pa piči handler, bar ćeš imati punu kontrolu nad registrima, a uz malu egzibiciju i pristup svojim segmentima (DATA, CODE).
pascal.349 mmitrovic, -> #339, jasicp
::::: stos je u tome sto PRE poziva PMojObj:=new(PTMojObj,Init) , PMojObj ::::: jeste bio NIL. Posle, naravno, ne. Medjutim, posle ::::: poziva Dispose(PMojObj,Done); varijabla PMojObj opet nije NIL, vec ::::: nesto<>NIL. Ovo pisem jer bi se moglo testirati if PMojObj<>NIL ==> Probaj sa TypeOf() funkcijom.
pascal.350 nlazic, -> #339, jasicp
> if PMojObj<>NIL ==> objekat postoji a u suprotnom ne. Da li > ima logicnijeg nacina za "pronalazenje" je li objekat postoji > (njegova instanca) ? Neka univerzalna metoda ne postoji (kol'ko ja znam). Nije ni Borland baš sve mogao da napravi. Moraćeš se sam potruditi, recimo da napraviš svoj mehanizam a'la Message. > bio NIL. Posle, naravno, ne. Medjutim, > posle poziva Dispose(PMojObj,Done); varijabla PMojObj opet > nije NIL, vec nesto<>NIL. Ovo pisem jer bi se moglo testirati > if PMojObj<>NIL ==> objekat postoji a u suprotnom ne. Da li Kada sa Dispose(PMojObj,Done); oslobodiš pokazivač, prema Borland-u njegova vrednost nije NIL već je nedefinisano. Međutim, u 99% slučajeva, vrednost ostaje ista, dakle PMojObj i dalje pokazuje na istu lokaciju u memoriji. žak se neposredno posle Dispose PMojObj i dalje može koristiti kao da Dispose-a nije ni bilo! Sve što Dispose radi je to da Heap Manager-u stavlja na znanje da na adresu na koju pokazuja PMojObj može pri sledećem pozivu neke New procedure staviti neki novi objekat. Solomonsko rešenje je da pišeš: Dispose(PMojObj,Done); PMojObj := NIL; Sada možeš da proveravaš if PMojObj <> NIL then ... :) Nebojša :)
pascal.351 nemko, -> #349, mmitrovic
)>Ć- Probaj sa TypeOf() funkcijom. Typepf() daje pointer na VMT (virtual method table) i prema njoj mozes odrediti kog je tipa neki objekat ali ne da li i postoji.
pascal.352 postmast,
From: zsteva@magic.hobbiton.co.yu (Zeljko Stevanovic) Subject: Re: PE_TP7.teh.restart Date: Tue, 2 May 1995 13:30:43 GMT Sebastian Adanko (Sebastian.Adanko@f107.n111.z38.setnet.setnet.co.yu) wrote: : Anyway, zanimlao bi me kako iz TP 7.0 izvesti sto kulturnije restart : programa, znaci, brisanje svih promenljivih i "GOTO 10" ;)) Iz programa oces da startujes samog sebe gde je tome primena ??
pascal.353 postmast,
From: broker@setnet.co.yu (Predrag Supurovic) Subject: PE_TP7.teh.restart Date: Tue, 02 May 1995 18:35:44 SA> Anyway, zanimlao bi me kako iz TP 7.0 izvesti sto kulturnije restart SA> programa, znaci, brisanje svih promenljivih i "GOTO 10" ;)) Ceo kod izvrsavas u jenoj 'While True' ili 'While KrajPrograma' petlji. Moze i sa GoTo ali to nije u duhu Paskala. Sto se tice brisanja promenljivih, nacin programiranja u Pascalu obezbedjuje da na pocetku izvrsavana koda uopste nje bitno koje vrednosti promenljive imaju, tako da nema potrebe za bukvalnim brisanjem sadrzaja. Hint: na pocetku svakoj promenljivoj dajes inicijalnu vrednost. ... TAG loading error... * Origin: Oreska BBS, Uzice = SF BIBLIOTEKA = SETNet: (38:101/101)
pascal.354 postmast,
From: markom@setnet.co.yu (Marko Milivojevic) Subject: Re: PE_TP7.teh.restart Date: Wed, 03 May 1995 22:03:52 -=> Reply to: Sebastian Adanko <=- SA> Anyway, zanimlao bi me kako iz TP 7.0 izvesti sto kulturnije restart SA> programa, znaci, brisanje svih promenljivih i "GOTO 10" ;)) ;-) while (1=1) do begin (* ... *) end. kewl, ha? ;-) -=> MM <=- ... Nisam lud da radim posteno, a da mi porez naplacuju kao budali!!! * Origin: SETNet - Exodus, Beograd #137-477# from 22:00 to 09:00 (38:103/130)
pascal.355 postmast,
From: zoran.rilak@rstones.durlan.co.yu (Zoran Rilak) Subject: Btree Date: Thu, 04 May 1995 23:34:00 CET QWK To: All Kad cuh da se pominje Delphi... Da li neko od prisutnih ovde ima Btree modul za TopSpeed Modulu-2, kao i pratece usluzne module koji se isporucuju uz ovaj programski paket? Btree mi je najvazniji, pa ako neko ima, neka mi ostavi poruku... 3OPAH ... BRzo kucanje inam isvoje losed srtane. --- Blue Wave/RA v2.12 [NR] * Origin: BBLink <tm> * Rolling Stones * 018.325.314 * Nis (0:0/0) #! rnews 1161
pascal.356 postmast,
From: ivica@galeb.etf.bg.ac.yu (Ivica Nikolic) Subject: Re: GRAFIKA U TVISION-U ... Date: Thu, 4 May 1995 22:46:58 GMT Ivan Markovic je napisao: >> Jedan prijatelj me je zamolio da mu pogledam za nekakav unit koji >> omogucava da Turbo Vision predje u graficki mod. Kaze da je citao negde >> o tome - verovatno Racunari, ali nije siguran. >> Ako neko ima pojma o cemu se radi neka ostavi i gde se isti moze >> naci ... U TVDEMOS direktorijumu TurboPASCAL-a (mislim na verziju 6.0) imas programcic TVBGI.PAS, gde se nalazi ono sto te zanima. -- Stanislave, preterano se*es!
pascal.357 postmast,
From: Ognen.Spiroski@f132.n108.z38.setnet.setnet.co.yu (Ognen Spiroski) Subject: pascal Date: Tue, 02 May 1995 13:39:05 "MĆ From: "Miljan Mitrovic" <mmitrovic@sezam.UUCP> Newsgroups: "MĆ yu.prog.pascal Organization: SEZAM Beograd, 011 648-422 ::::: Opet "MĆ stek u pitanju! Kako da znam koliko je mesta ostalo na ::::: steku? "MĆ Radi se neka rekurzija, a ne znam kako da proverim ima ::::: li "MĆ mesta za poziv procedure. "MĆ Evo ti jedna f-ja koja vraca kolicinu slobodnog steka: "MĆ function StackFree: Word; far; assembler; "MĆ asm "MĆ mov ax,sp "MĆ add ax,4 "MĆ end; Jel ima neke posledice ako se ne upise "assembler;" posle svake func. proc. ? Ja nisam to uradio, a program je opet startao... 0GZy * 0Gi'S eDiT0R * I'm too sexy for this conference! * Origin: SETNet: ĆMemory Master BBS +389/91-412-767ž (38:108/132)
pascal.358 nemko, -> #349, mmitrovic
)>Ć- Probaj sa TypeOf() funkcijom. Typepf() daje pointer na VMT (virtual method table) i prema njoj mozes odrediti kog je tipa neki objekat ali ne da li i postoji.
pascal.359 sslavko, -> #318, postmast
>> Uzgred kako bi uradio starfield, da se dobije realistican >> efekat kretanja kroz prostor... Evo ti moja simulacija StarField-a. Malo si me zainteresovao pa sam seo i evo rezultata. Ja mislim da je sasvim Ok. starfld.pas
pascal.360 postmast,
From: zsteva@magic.hobbiton.co.yu (Zeljko Stevanovic) Subject: Re: PE_TP7.teh.restart Date: Thu, 4 May 1995 22:34:32 GMT Marko Milivojevic (markom@setnet.co.yu) wrote: Evo mene sa Bint-a :-)) : SA> Anyway, zanimlao bi me kako iz TP 7.0 izvesti sto kulturnije restart : SA> programa, znaci, brisanje svih promenljivih i "GOTO 10" ;)) : ;-) : while (1=1) do : begin : (* ... *) : end. Ovo gore ce da radi ali nije bas najbolje (lepse) uradjeno isti efekat ima i: while true do begin (* ... *) end. Ili umesto true staviti 1 .. I jos nesto neznam dali si probao dali TP hoce da primi : program while true do begin (* ... *) end. Umesto standarnog program begin end.
pascal.361 nexy,
Hitno bi mi trebao GraphGET (GraphREAD) za Pascal. P.S. U strasnoj sam frci pa ne mogu da ga pravim. Pozdrav, Wizard NEXY
pascal.362 eburanj, -> #353, postmast
Izraz (1=1) <=> TRUE u paskalu što je mnogo jednostavniji izraz (mada bi TP trebao da opš#timizuje (1=1) u TRUE...
pascal.363 jasicp, -> #347, nemko
> A da posle svakog dispose() stavis pmojobject:=NIL? Ujedno odgovaram i na sugestiju da u Done stavim Objekt:= NIL. OK, to moze, nego da li ima elegantnijih resenja ? Cini se da nema ili mi ne pada na pamet. Inace, ako objekti nisu izvedeni iz klase TView, ima li nacina da medjusobno komuniciraju u stilu message(... ?
pascal.364 jasicp, -> #294, jasicp
Evo, da odgovorim samom sebi posle resenog problema, i da se zahvalim detaljnom predlogu resenja ljudi cije brojeve poruka vidite dole... Stos je u sledecem: u unitu koji definise message box-ove, treba postaviti da se message box insertuje u Application a ne u Desktop ili slicno. Znace, Insert(Application^...). Nemojte cackati ovaj unit ako niste sigurni sta radite, jer moze biti belaja :).
pascal.365 vitez.koja, -> #354, postmast
#=> From: markom@setnet.co.yu (Marko Milivojevic) #=> Subject: Re: PE_TP7.teh.restart #=> Date: Wed, 03 May 1995 22:03:52 #=> while (1=1) do while 1 do ;)
pascal.366 duzle, -> #363, jasicp
>**> Ujedno odgovaram i na sugestiju da u Done stavim Objekt:= >**> NIL. OK, to moze, nego da li ima elegantnijih resenja ? Zavisi šta podrazumevaš pod "elegantnijim" rešenjem ? Da dodaš jedno Objekt:=NIL u Done destruktor stvarno nije teško, a dalja provera je stvarno jednostavna. >**> Cini se da nema ili mi ne pada na pamet. Inace, ako >**> objekti nisu izvedeni iz klase TView, ima li nacina da >**> medjusobno komuniciraju u stilu message(... ? Mislim da nema... ? Ognen
pascal.367 jkpbvk,
Jel' bi bio neko ljubazan da mi ovo prevede na Pascal ? Ili ako ima neki drugi source za prikazivanje PCX slika u 256 boja u pascalu da ga dostavi. #include <stdio.h> typedef struct { char manufacturer; char version; char encoding; char bits_per_pixel; int xmin,ymin; int xmax,ymax; int hres; int vres; char palette[48]; char reserved; char colour_planes; int bytes_per_line; int palette_type; char filler[58]; } PCXHEAD; PCXHEAD header; unsigned int width,depth; unsigned int bytes; unsigned char palette[768]; FILE *pic; void com(void); void Read_PCX_Line(unsigned int vidoffset) { unsigned char c, run; unsigned int n = 0; asm { cld mov di,[vidoffset] } do { c = fgetc(pic) & 0xff; if ((c & 0xc0) == 0xc0) { run = c & 0x3f; c = fgetc(pic); n += run; asm { mov ax,0a000h mov es,ax mov al,[c] xor ch,ch mov cl,[run] rep stosb } } else { n++; asm { mov ax,0a000h mov es,ax mov al,[c] stosb } } } while (n < bytes); } void Unpack_PCX_File(void) { int t; for (t = 0; t < 768; t++) palette[t] = palette[t] >> 2; asm { mov ax,0013h int 10h mov ax,1012h xor bx,bx mov cx,256 mov dx,offset palette int 10h } for (t = 0; t < depth; t++) Read_PCX_Line(t * 320); getch(); asm { mov ax,0003h int 10h mov ah,4ch int 21h } } void main(int argc, char *argv[]) { if ((pic = fopen(argv[1],"rb")) != NULL) { if (fread((char *)&header,1,sizeof(PCXHEAD),pic) == sizeof(PCXHEAD)) { if (header.manufacturer == 0x0a && header.version == 5) { if (!fseek(pic,-769L,SEEK_END)) { if (fgetc(pic) == 0x0c && fread(palette,1,768,pic) == 768) { fseek(pic,128L,SEEK_SET); width = header.xmax - header.xmin + 1; depth = header.ymax - header.ymin + 1; bytes = header.bytes_per_line; Unpack_PCX_File(); } else printf("Error reading palette\n"); } else printf("Error seeking to palette\n"); } else printf("Not a 256 color PCX file\n"); } else printf("Error reading %s\n",argv[1]); fclose(pic); } else printf("Error opening %s\n",argv[1]); }
pascal.368 nemko, -> #365, vitez.koja
)>Ć- while 1 do ;)
pascal.369 mmitrovic, -> #358, nemko
::::: Typepf() daje pointer na VMT (virtual method table) i prema njoj ::::: mozes odrediti kog je tipa neki objekat ali ne da li i postoji. Znam to, nego sam mislio da TObject-ov Done brise to VMT polje Posle sam pogledao i ne bri{e (a trebalo bi). Opet borlandov propust, isto kao i za proveru nasledjivanja.
pascal.370 mmitrovic, -> #357, postmast
::::: Jel ima neke posledice ako se ne upise "assembler;" posle svake func. ::::: proc. ? Ja nisam to uradio, a program je opet startao... Posledice su u vecem kodu i pogresnom rezultatu. Bez assembler ova funkcija ce alocirati citav stek frame za rezultat promenljive, tako da ono add ax,4 nije dovoljno.
pascal.371 nemko, -> #368, nemko
)>-)> Ć- while 1 do ;) Mislim da mi je misterioznoo nestao deo poruke. Trebalo je da glasi: Zar je nesto ovako moguce u pascalu?
pascal.372 pirke, -> #311, ddabic
>>> DELPHI je stigao, >>> Prvi utisci su impresivni, mada moram da priznam da do sada nisam Gde i kako se moze doci do dugo ocekivanog delphi-ja kod nas? Kod kog prodavca softvera :) se moze kupiti CD??? PLEASE MAIL ME i ostavi phone number za nabavku dephi-ja. Thanx in advance. Digital priest...
pascal.373 nemko, -> #369, mmitrovic
)>- Znam to, nego sam mislio da TObject-ov Done brise to VMT )>- polje Posle sam pogledao i ne bri{e (a trebalo bi). Opet )>- borlandov propust, isto kao i za proveru nasledjivanja. Ako sam dobro shvatio VMT postoji za sve objekte koji bi se u programu mogli koristiti. Tek kad se objekat kreira konstruktoorom dodeli mu se VMT ali nema smisla brisati VMT jer ga koriste i drugi objekti (nepravi se za svaki zasebna kopija istog).
pascal.374 nemko, -> #370, mmitrovic
)>- Posledice su u vecem kodu i pogresnom rezultatu. Bez )>- assembler ova funkcija ce alocirati citav stek frame za )>- rezultat promenljive, tako da ono add ax,4 nije dovoljno. Deder objasni ovo malo bolje na kratkim primerima. Ja sam radio i sa i bez 'assembler' i radilo je jednako dobro.
pascal.375 vitez.koja, -> #371, nemko
#=> )>-)> Ć- while 1 do ;) #=> Trebalo je da glasi: Zar je nesto ovako moguce u #=> pascalu? Nije :) Bar ne u Turbo Paskalu.
pascal.376 mmitrovic, -> #373, nemko
::::: Ako sam dobro shvatio VMT postoji za sve objekte koji bi se ::::: u programu mogli koristiti. Tek kad se objekat kreira ::::: konstruktoorom dodeli mu se VMT ali nema smisla brisati VMT ::::: jer ga koriste i drugi objekti (nepravi se za svaki zasebna ::::: kopija istog). Tačno, ne pravi se. Evo ga ceo princip: VMT tabela postoji samo jedna po objektu i to samo za objekte koji sadrže virtuelne metode. VMT tabele su uvek i obavezno u DATA segmentu. Kada se objekat kreira, begin sekcija constructor-a osim postavljanja stack frame-a kreira objekat tako što ga alocira ili ne (u zavisnosti da li je u pitanju pointer na objekat ili objektna promenljiva), i zatim u njega ubaci NEAR pointer na VMT tabelu (pošto je VMT uvek u DATA segmentu na koji uvek pokazuje DS). Ono što sam ja mislio je da destructor briše taj NEAR pointer, čime bi disvalidovao objekat. Međutim, to se ne dešava. TypeOf funkcija vraća pointer DS:<VMT offset> i preko njega se utvrđuje da li su dva objekta istog tipa.
pascal.377 mmitrovic, -> #374, nemko
::::: )>- Posledice su u vecem kodu i pogresnom rezultatu. Bez ::::: )>- assembler ova funkcija ce alocirati citav stek frame za ::::: )>- rezultat promenljive, tako da ono add ax,4 nije dovoljno. ::::: ::::: Deder objasni ovo malo bolje na kratkim primerima. Ja sam radio ::::: i sa i bez 'assembler' i radilo je jednako dobro. Razmišljam kako da ti objasnim, pa vidim da nema ništa bez čaršava, so ako nekog ne zanimaju paskal iznutrice, skip this message. Elem, moja funkcija (sa assembler): function StackSize: Word; far; assembler; asm mov ax,sp add ax,4 end; tvoja funkcija (bez assembler): function StackSize: Word; far; begin { Ovo si morao da dodas jer nema assembler } asm mov ax,sp add ax,4 end; end; Kada se prevede moja funkcija izgleda ovako (recimo da je stek pre poziva bio sp=1000 bajtova): PROGRAM.STACKSIZE: asm ; na steku cs:ip -> sp=996 cs:0000 89E0 mov ax,sp ; ax=996 cs:0002 050400 add ax,0004 ; ax=ax+4=1000 PROGRAM.6: end; ; cs:0005 CB retf ; vraća se u program sa tačnom ; vrednošću u AX, a i sp=1000. Total CODE: 6 bytes. Tvoja funkcija (isti uslovi): PROGRAM.STACKSIZE: begin ; cs:ip na steku -> sp=996 cs:0000 55 push bp ; bp na stek -> sp=994 cs:0001 89E5 mov bp,sp ; bp=994 cs:0003 83EC02 sub sp,0002 ; sp=sp-2=992, prostor za rez. cs:0006 89E0 mov ax,sp ; ax=992 cs:0008 050400 add ax,0004 ; ax=ax+4=996 PROGRAM.: end; cs:000B 8B46FE mov ax,[bp-02] ; ***** cs:000E 89EC mov sp,bp ; sp=994 cs:0010 5D pop bp ; bp sa steka -> sp=996 cs:0011 CB retf ; povratak. sp=1000 Total CODE: 18 bytes. ***** tj. u ax se prebacuje nedefinisana vrednost pošto nikad ništa nije stavljno u [bp-02]. i funkcija vraća neku sasvim levu vrednost. Funkcija neće blokirati program pošto je sp pre i posle poziva isti. Elem, i nije bilo tako strašno. :)
pascal.378 postmast,
From: markom@setnet.co.yu (Marko Milivojevic) Subject: Re: PE_TP7.teh.restart Date: Sun, 07 May 1995 12:34:06 -=> Reply to: Zeljko Stevanovic <=- ZS> Umesto standarnog ZS> program ZS> begin ZS> end. Naravno da ne moze. -=> MM <=- ... I wish life had a scroll-back buffer..... * Origin: SETNet - Exodus, Beograd #137-477# from 22:00 to 09:00 (38:103/130)
pascal.379 postmast,
From: broker@setnet.co.yu (Predrag Supurovic) Subject: Objekti Date: Sun, 07 May 1995 22:40:04 Hi, Moze li neko da objasni kako se kriju delovi objekata? Mislim da budu neveidljivi korisniku objekta. Cesto imam potrebu da u objektu definisen neka polja koja mi trebaju interno i ne bi bas bilo zgodno da programer koji koristi objekat moze da im direktno menja sadrzaj. U literaturi nisam nasao bas jasna objasnjenja za ovo. ... BR> Dve zene i guska - Vasar!!! * Origin: Oreska BBS, Uzice = SF BIBLIOTEKA = SETNet: (38:101/101)
pascal.380 postmast,
From: Vlado.Prelovac@f133.n103.z38.setnet.setnet.co.yu (Vlado Prelovac) Subject: pascal Date: Wed, 10 May 1995 01:18:00 GDE ? * Origin: SETNet * BBS Politika, Bgd * +381 11 3229148 * 0-24 (38:103/133)
pascal.381 postmast,
From: Amir.Zolic@f115.n103.z38.setnet.setnet.co.yu (Amir Zolic) Subject: Objekti Date: Tue, 09 May 1995 13:09:00 PS> Moze li neko da objasni kako se kriju delovi objekata? Mislim da budu PS> neveidljivi korisniku objekta. Koristeci direktive PUBLIC & PRIVATE mozes nekim delovima objekta (i metode i promenljive) da promenis status. Sve promenljive i metode koje se deklarisu u PRIVATE delu (posle PRIVATE direktive a pre PUBLIC direktive) ce se videti samo u _modulu_ u kome je definisan objekat. U drugim modulima, nece se videti. To znaci, da kada ti pises vise objekata u istom modulu, ti moduli mogu da pristupaju jedan drugom (cak i PRIVATE delu) ali kada se ti objekti koriste iz drugog modula (drugog TPUa, iz glavnog programa) PRIVATE deo se ne vidi. Na primer: ┌─────────────────────────────┐ ┌─────────────────────────────┐ │unit module1; │ │program objtst; │ │interface │ │uses module1; │ │type │ │var t: test1; │ │ test1: object │ │ │ │ pub: integer; │ │begin │ │ private │ │ { ovo radi,kao sto rekoh │ │ priv: integer; │ │ uvek } │ │ end; │ │ t.pub := 156; │ │implementation │ │ { e, ovo ne radi } │ │var t: test1; │ │ t.priv := 35; │ │begin │ │end. │ │ { ovo uvek radi } │ │ │ │ t.pub := 12; │ │ │ │ { ovo radi samo u ovom │ │ │ │ modulu } │ │ │ │ t.priv := 156; │ │ │ │end. │ │ │ └─────────────────────────────┘ └─────────────────────────────┘ * Origin: Atlantis BBS 22-05 tel. 3225-548 ■Belgrade■ (38:103/115)
pascal.382 postmast,
From: djdule@durlan.co.yu (Djdule) Subject: Pascal Date: Sat, 22 Apr 1995 00:50:00 GMT QWK To: Milos Corak MC >Da li ima neko tablicu prekida za inicijalizaciju vesa MC >grafike u true-coloru?U pitanju su BIOS prekidi i adrese. Mislim da ne postoji VESA standard za true color. --- ■ SPEED 1.30 #514 ■ "Yield to temptation, it may not pass your way again." #! rnews 554
pascal.383 pirke, -> #311, ddabic
>>> DELPHI je stigao, >>> Prvi utisci su impresivni, mada moram da priznam da do sada nisam Repriza: Gde i kako se moze doci do dugo ocekivanog delphi-ja kod nas? Kod kog prodavca softvera :) se moze kupiti CD??? PLEASE MAIL ME i ostavi phone number za nabavku dephi-ja. Thanx in advance. Digital priest...
pascal.384 billy, -> #383, pirke
>>Repriza: I ja sam veoma zainteresovan , ali Dejan Dabic se nije prijavio na SEZAM od kako je pustio ovu vest. Poslao sam mu i poruku koju naravno nije mogao da procita. Sve u svemu ko prvi dodje do takve informacije o DELPHI-u neka ostavi poruku u ovoj konf. gde moze da se nabavi. Pozdrav Nikola.
pascal.385 duzle, -> #379, postmast
>**> Hi, >**> >**> Moze li neko da objasni kako se kriju delovi objekata? >**> Mislim da budu neveidljivi korisniku objekta. >**> >**> Cesto imam potrebu da u objektu definisen neka polja koja mi >**> trebaju interno i ne bi bas bilo zgodno da programer koji >**> koristi objekat moze da im direktno menja sadrzaj. >**> >**> U literaturi nisam nasao bas jasna objasnjenja za ovo. Uzmeš objekt, deklarišeš ta polja u PRIVATE sekciJi, i objekt staviš u poseban unit. Polja će iz drugih unita biti dostupna samo preko metoda koje definišeš a biće i direktno dostupna iz samog unita u kojem je objekt deklarisan. Ogi
pascal.386 dejanr, -> #383, pirke
>> Gde i kako se moze doci do dugo ocekivanog delphi-ja kod nas? Kod kog >> prodavca softvera :) se moze kupiti CD??? PLEASE MAIL ME i ostavi >> phone number za nabavku dephi-ja. Ja sam pre par dana dobio Delphi na test od CET-a, dakle najbolje se njima obrati. CD i neviđena gomila knjiga.
pascal.388 nesh,
HI Nov sam ovde pa da nebih lutao molim da mi neko javi gde da se dokopam nekih unita za TP5.0 koji rade sa bazama podataka?
pascal.389 jasicp,
Da rascistimo nesto: 1. Napravim neki objekat type TNeki=object(TNekiPre) . . . end; 2. Napravim pointere : type TPNeki=^TNeki var PNeki : TPNeki Ovde je, po defaultu, PNeki=NIL (jel' tako ?) 3. Aktiviram objekat : PNeki:=New(TPNeki,Init) Ako u Init metodu kod funkcije New imam neke provere da li treba ili ne treba da se aktivira objekat, pa se ispostavi da ne treba, pre poziva Inherited Init ili pre kraja metoda Init, pa se objekat NE aktivira, nego se pomocu Fail izadje iz konstruktora, da li PNeki ostaje _uvek_ NIL ili ima teorije da ne bude NIL ?
pascal.390 nemko, -> #380, postmast
)>- From: Vlado.Prelovac@f133.n103.z38.setnet.setnet.co.yu (Vlado )>- Prelovac) Subject: pascal )>- Date: Wed, 10 May 1995 01:18:00 )>- GDE ? )>- * Origin: SETNet * BBS Politika, Bgd * +381 11 3229148 * 0-24 (38:103/133) Ako se zbog ovakvih poruka vrsi razmena ponekih konferencija sa SETNet-om onda .... . Dajte bre ljudi i uozbiljite se malo. (I pisite vece odgovore od citata i tag-line-ova zajedno). Tako vam boga.
pascal.391 nlazic, -> #389, jasicp
> se pomocu Fail izadje iz konstruktora, da li PNeki ostaje > _uvek_ NIL ili ima teorije da ne bude NIL ? Kada se pri izvršavanju programa stigne do BEGIN reči konstruktora, BP garantuje da će se objekat uspešno instalirati na heap. To znači da New skoro nikada neće vratiti NIL. Međutim, ako se koristi Fail, konstruktor će automatski da izbriše sa heap-a sve što je na njega postavljeno pri ulasku u konstruktor i vratiće vrednost NIL da bi ukazao na neuspešan pokušaj inicijalizacije objekta. Jednostavno rečeno, odgovor na tvoje pitanje je: Posle Fail-a nema teorije da konstruktor varti bilo šta osim NIL-a. :) Nebojša :)
pascal.392 dejanr, -> #388, nesh
>> Nov sam ovde pa da nebih lutao molim da mi neko javi gde da se dokopam >> nekih unita za TP5.0 koji rade sa bazama podataka? Probaj u direktorijumu R:\PASCAL, ima raznih stvari. Takođe, pogledaj poruke u ovoj konferenciji uz koje postoje fajlovi (mail read pascal /a /t), a takođe i u konferencijama PC.PROG.4, PC.PROG.3 itd.
pascal.393 postmast,
From: markom@setnet.co.yu (Marko Milivojevic) Subject: Re: pascal Date: Wed, 10 May 1995 13:59:22 -=> Reply to: "Vladimir Maric" <=- #=> while (1=1) do "M> "M> while 1 do ;) Mislim da TP ovo ne bi progutao. -=> MM <=- ... Shareware girls - try for 30 days, then legalize or quit * Origin: SETNet - Exodus, Beograd #137-477# from 22:00 to 09:00 (38:103/130)
pascal.395 postmast,
From: zoran.rilak@rstones.durlan.co.yu (Zoran Rilak) Subject: Pascal Date: Sat, 13 May 1995 23:14:00 CET QWK To: Mladen Adamovic (Tekst poruke: Mladen Adamovic, na temu PASCAL) > Sad imam jos jedno pitanje za tebe (vidim da se lepo razumes u > ove stvari). Kako da obezbedim DA MI SE SVE ODVIJA ISTOM > BRZINOM NA RACUNARIM RAZLICITE BRZINE? MA> Zapamtis vreme,pokrenes svoj program 10 iteracija, i zatim MA> izmeris delta vreme i proracunas brzinu, odredis pauzu izmedu MA> iteracija, i to ti je to... Ili: INT 13H se izvrsava svakih 55 ms. To vreme se moze promeniti (na svim PC racunarima), a mogu se i koristiti i Extended & Tape Functions (ne znam koji INT), medju kojima postoje funkcije za za zaustavljanje programa odredjen broj milisekundi i za merenje opet nekog broja milisekundi, pri cemu program nastavlja da radi i povremeno proveri da li je vreme isteklo (proverava fleg). Ako te interesuje kako, javi. 3OPAH ... Ideja nije nova, ali je originalna! --- Blue Wave/RA v2.12 [NR] * Origin: BBLink <tm> * Rolling Stones * 018.325.314 * Nis (0:0/0)
pascal.396 postmast,
From: zoran.rilak@rstones.durlan.co.yu (Zoran Rilak) Subject: Pascal Date: Sat, 13 May 1995 23:15:00 CET QWK To: Milivoje Ognjanovic (Tekst poruke: Milivoje Ognjanovic, na temu PASCAL) MO> Jel' bi bio neko ljubazan da mi ovo prevede na Pascal ? MO> Ili ako ima neki drugi source za prikazivanje PCX slika u 256 boja u MO> pascalu da ga dostavi. Ovo ne moze da se prevede na Pascal. Moze na Turbo Pascal 5.5 i iznad, kao i na jos neke druge prevodioce. Reci za koji ti je potrebno? 3OPAH ... Ko je u vladi, ne boji se gladi! --- Blue Wave/RA v2.12 [NR] * Origin: BBLink <tm> * Rolling Stones * 018.325.314 * Nis (0:0/0) #! rnews 1088
pascal.397 vgenije,
HI jel moze neko da mi pomogne -odnosno sastavi proceduru pomocu koje ce racunar softverski da pali i gasi monitior(zatamnjenje)
pascal.398 jkpbvk, -> #396, postmast
+| Ovo ne moze da se prevede na Pascal. Moze na Turbo Pascal 5.5 i iznad, kao +| i na jos neke druge prevodioce. Reci za koji ti je potrebno? Turbo Pascal 7.0
pascal.399 nlazic,
Nabavio sam neki CD sa gomilom (osamdesetak) programčića za paskal. Ima ih za sve verzije, od 5.0 do 7.0 i TPW. Neki od njih se mogu naći i na SEZAM-u, ali većina ne. Iako su nešto starijeg datuma, mogu se naći izuzetno korisni i poučni primeri. Ovo govorim zato što među njima ima dosta primera koji rešavaju mnoge probleme o kojima je bilo reči u ovoj konferenciji (na primer super precizni tajmeri, ispravke bug-a u proceduri DELAY u TP6.0, rad sa stekom i heapom, pristup disku iz TSR-a, izračunavanje matematičkih izraza i što je posebno zanimljivo kompletan BTrieve). Pošto sam na SEZAM-u tek od aprila ove godine, lako je moguće da je neko pre mene ovo već ponudio. Za svaki slučaj prilažem uz poruku spisak datoteka sa kratkim opisima svake od njih, pa ako mislite da tu ima nešto intersantno, javite pa da pošaljem i kompletnu biblioteku (oko 4.5Mb sorseva). Pozdrav, :) Nebojša :) P.S. Zamolio bih nekoga ko zna da je ovako nešto već bilo na SEZAM-u da mi kaže gde je, kako bih ga i ja pogledao. listpas.zip
pascal.400 nemko, -> #397, vgenije
)>- HI )>- jel moze neko da mi pomogne -odnosno sastavi proceduru pomocu )>- koje ce racunar softverski da pali i gasi )>- monitior(zatamnjenje) Sve zavisi od monitora i kartice, neradi to kod svih.
pascal.401 kriss, -> #399, nlazic
˙˙ javite pa da pošaljem i kompletnu biblioteku (oko 4.5Mb ˙˙ sorseva). Šalji i ne pitaj.
pascal.402 nlazic, -> #401, kriss
>> Šalji i ne pitaj. Veoma sa rad da pošaljem sve što imam. Međutim, prilično sa frišak na SEZAM-u, pa bih molio da mi neko objasni kako je najzgodnije da upload-ujem .zip-ove od 4.5Mb. Imam modem od 2400 BPS, mada kod drugara imam i 14400. Unapred hvala. Pozdrav ű, :) Neboa :)
pascal.403 bulaja, -> #402, nlazic
│Međutim, prilično sa frišak na SEZAM-u, pa bih molio da mi neko objasni │kako je najzgodnije da upload-ujem .zip-ove od 4.5Mb. Imam modem od │2400 BPS, mada kod drugara imam i 14400. └─── Najbolje će biti da uposliš drugara sa 14.4k modemom i uploaduješ to na PRO-BA Sezam, pa ćemo prebaciti to i ovde u dir. :)
pascal.404 mmitrovic, -> #389, jasicp
::::: Ovde je, po defaultu, PNeki=NIL (jel' tako ?) Ne, po defaultu je nedefinisano. ::::: Ako u Init metodu kod funkcije New imam neke provere da li treba ili ne ::::: treba da se aktivira objekat, pa se ispostavi da ne treba, pre ::::: poziva Inherited Init ili pre kraja metoda Init, pa se objekat NE ::::: aktivira, nego se pomocu Fail izadje iz konstruktora, da li PNeki ::::: ostaje _uvek_ NIL ili ima teorije da ne bude NIL ? Kad mu daš Fail, BP kreira end sekciju iz dva dela, jedan za normalan kraj, drugi za Fail kraj. Fail nije procedure, već komanda koja generiše jmp na Fail deo end sekcije. U tom delu se nalazi poziv rutine za dealokaciju koja između ostalog postavlja Self na NIL. Tako da će povratna vrednost biti NIL.
pascal.405 mmitrovic, -> #391, nlazic
::::: Kada se pri izvršavanju programa stigne do BEGIN reči konstruktora, ::::: BP garantuje da će se objekat uspešno instalirati na heap. To znači New pri kreiranju objekata je samo zadovoljavanje forme. Samu alokaciju objekta radi begin sekcija konstruktora. Konstruktoru se (osim ostalih parametara i VMTa) prosleđuje i jedan pointer zvani SELF. Ako je pointer različit od nil u pitanju je objektna promenljiva, ili objekat koji je već kreiran, npr: var a:TObject; ukoliko je pointer nil, objekat nije kreiran i konstruktor uradi alokaciju i u AX:DX vrati pointer na objekat. Alokacija se unutar konstruktora obavlja u BEGIN sekciji.
pascal.406 mmitrovic, -> #395, postmast
::::: Ili: INT 13H se izvrsava svakih 55 ms. To vreme se moze promeniti (na ::::: svim PC racunarima). Nije INT 13h nego INT 1Ch. INT 13h su low-level disk funkcije. Što se tiče promene brzine (da bude više od 18.2puta/sec) princip je drugačiji. Moraš da preuzmeš INT 08 (njega u stvari poziva tajmer, a int 8 poziva int 1c kad završi svoje), i da namestiš handler tako da poziva originalni int 08 18.2 puta/sec. Ukoliko to ne uradiš sistemski časovnik će početi da warp-uje :) Sama promena brzine tajmera obavlja se serijom OUTa na određene portove. I da, ukoliko pišeš rezidentni program koji koristi ovu metodu, moraš da preuzmeš INT 21h i sprečiš drugi program da preuzme na sebe int 08. E sad ako i drugi program bude menjao tajmer, ne gine ti kuršlus. Opšta preporuka: uklopi se u 18.2 puta/sec i ne diraj ako ne moraš. :)
pascal.407 mmitrovic, -> #397, vgenije
::::: jel moze neko da mi pomogne -odnosno sastavi proceduru pomocu koje ce ::::: racunar softverski da pali i gasi monitior(zatamnjenje) Imaš u nekim starim računarima source Screen Savera. Pogledaj u RINDu.
pascal.408 nlazic, -> #397, vgenije
> jel moze neko da mi pomogne -odnosno sastavi proceduru pomocu > koje ce racunar softverski da pali i gasi monitior(zatamnjenje) To se na mono i CGA sistemima radi ovako: ┌──────────────────┬──────────┬────────┐ │ │ Mono │ CGA │ ├──────────────────┼──────────┼────────┤ │ Adresa porta │ 3B8h │ 3D8h │ ├──────────────────┼──────────┼────────┤ │ Isključivanje │ 21h │ 25h │ ├──────────────────┼──────────┼────────┤ │ Uključivanje │ 29h │ 2Dh │ └──────────────────┴──────────┴────────┘ Ovo međutim ne radi na (mojoj) VGA. "Gašenje" monitora ma VGA se izvodi na sledeći način: procedure ScreenOFF; procedure ScreenON; var R:Registers; var R:Registers; begin begin with R do with R do begin begin AH:=$12; AH:=$12; BL:=$36; BL:=$36; AL:=1; AL:=0; end; end; intr ($10,R); intr ($10,R); end; end; Nadam se da će to ovo pomoći. :) Pozdrav, :) Nebojša :)
pascal.409 nlazic, -> #405, mmitrovic
> New pri kreiranju objekata je samo zadovoljavanje forme. Samu > alokaciju objekta radi begin sekcija konstruktora. Konstruktoru se Evo sta ja mislim o tome. Ako se napise nesto poput ovoga: var P : PObject; begin P := New(PObject, Init(...) ); desava se sledece. Kada BP naidje na New(PObject) on nalaze Heap Manager-u da na heap-u rezervise potreban prostor za smestanje instance TObject-a (pod pretpostavkom da je PObject = žTObject, naravno). Ukoliko tog prostora nema generise se Run Time Error 203 (ovo se moze izbeci ako se globalna promenljiva HeapError postavi da pokazuje na neku user-defined funkciju koja uvek vraca vrednost 1. U tom slucaju ne generise se RTE, vec se P postavlja na NIL i prelazi se na izvrsavanje sledeceg reda.). Prema tome ako BP dodje do BEGIN sekvence konstruktora, to znaci da je na heap-u uspesno rezervisan prostor za trazeni objekat i na taj prostor ukazuje SELF. Konstruktor sada (u okviru tog prostora koji je napravio New) pravi VMT i ostalo sta treba. Moze se desiti da se u toku rada konstruktora pojavi potreba da se ponovo nesto alocira na heap-u. Ovo, medjutim, ne mora da uspe. U tom slucaju opet moze da dodje do RTE 203 ili ne i to opet u zavisnosti od broja koji vraca funkcija na koju pokazuje HeapError. Ako ta funkcija vrati 1 konstruktor generise kod koji oslobadja sve sto je on do tada uradio, vraca vrednost NIL (tj. postavlja P na Nil) i zavrsava sa radom. Generisanje istog ovog koda, za nasilno prekidanje konstruktora i ponistavanje rezultata njegovog rada, ostvaruje se komandom Fail, koja i moze biti pozvana samo unutar konstruktora. Ukoliko se koristi Fail, rezultat koji vraca funkcija na koju ukazuje HeapError se i ne poziva, pa ni njen rezultat nije bitan (ova funkcija se, u stvari, poziva samo ako dodje do greske pri alociranju memorije, a ne i ako korisnik zatrazi Fail). Znaci, posle Fail-a P je uvek NIL. Na kraju krajeva, za korisnika i nije bitno kako se sve ovo desava, sve dok moze da bude siguran da ce mu posle Fail-a P biti Nil. Pozdrav, :) Nebojša :) P.S. Izvinjavam se zbog nasih slova, ali koristim YUSCII koji cesto zna da smeta, pogotvo pri pisanju programa sa pointerima :)))))). P.P.S. Zaista ti cestitam na kolicini odgovora koju saljes u ovu konferenciju. :)
pascal.411 biki,
(* Ovo je program u Pascalu koji bi trebalo da manipulise sa fajlovima kada je ukljucen Share u Windows-ima. Medjutim neradi procedura DeleteFile sve dok je Share aktivan. U cemu je problem. Unapred hvala. *) program IOFile; {$S-,R-} uses WinTypes, WinProcs, WinDos; const OneIO = 16383; { Number bytes handled per huge IO operation } var Buffer: array [0..OneIO] of Char; function _LFileSize(F : integer) : longint; {- an equivalent to TP's FileSize() function } var CurPos : longint; begin CurPos := _llseek(F,0,1); _LFileSize := _llseek(F,0,2); _llseek(F,CurPos,0); end; { Copy file (full pathname) Returns 0 if error.} function CopyFile(FileNameS, FileNameD: PChar): byte; var Fs: Integer; { File Handle for Windows file functions } Fd: Integer; { File Handle for Windows file functions } Size: Longint; { Size of bitmap, Size of color spec } begin CopyFile := 0; Fs := _LOpen(FileNameS, of_Read); if Fs = -1 then Exit; _LCreat(FileNameD, 0); Fd := _LOpen(FileNameD, of_Write); repeat size:= _LRead(Fs, Buffer, SizeOf(Buffer)); _lwrite(Fd, Buffer, Size); until size = 0; _LClose(Fs); _LClose(Fd); end; { Move file (full pathname) Returns 0 if error.} function MoveFile(FileNameS, FileNameD: PChar): byte; var Fs: Integer; { File Handle for Windows file functions } Fd: Integer; { File Handle for Windows file functions } Size: Longint; { Size of bitmap, Size of color spec } Obuff: TOfStruct; begin MoveFile := 0; Fs := _LOpen(FileNameS, of_Read); if Fs = -1 then Exit; _LCreat(FileNameD, 0); Fd := _LOpen(FileNameD, of_Write); repeat size:= _LRead(Fs, Buffer, SizeOf(Buffer)); _lwrite(Fd, Buffer, Size); until size = 0; _LClose(Fs); _LClose(Fd); OpenFile(FileNameS, Obuff, of_Delete); end; { Delete file (full pathname) Returns 0 if error.} function DeleteFile(FileNameS: PChar): byte; var Obuff: TOfStruct; begin DeleteFile := OpenFile(FileNameS, Obuff, of_Delete); end; begin CopyFile('c:\1\file.pas', 'c:\1\file.bak'); MoveFile('c:\1\file.pas', 'c:\2\file.pas'); DeleteFile('c:\1\file.bak'); end.
pascal.412 kriss, -> #406, mmitrovic
˙˙ program koji koristi ovu metodu, moraš da preuzmeš INT 21h i ˙˙ sprečiš drugi program da preuzme na sebe int 08. E sad ako i Pa i nije neko rešenje - dosta programa menja direktno vektore interapata, što je (skoro) nemoguće sprečiti. No kao što reče, ne dirati ako se baš ne mora. :)
pascal.413 mmitrovic, -> #409, nlazic
::::: Evo sta ja mislim o tome. Ako se napise nesto poput ovoga: ::::: var P : PObject; ::::: P := New(PObject, Init(...) ); ::::: desava se sledece. Kada BP naidje na New(PObject) on nalaze Heap ::::: Manager-u da na heap-u rezervise potreban prostor za smestanje instance ::::: TObject-a (pod pretpostavkom da je PObject = žTObject, naravno). Ne. Nisi u pravu. Kad naleti na New koji alocira objekat, BP alokaciju prepušta konstruktoru. Konstruktor nalaže Heap Manageru da na HEAPu alocira prostor za VMT pointer i podatke iz objekta. ::::: Prema tome ako BP dodje do BEGIN sekvence konstruktora, ::::: to znaci da je na heap-u uspesno rezervisan prostor za trazeni objekat ::::: i na taj prostor ukazuje SELF. Ne. Vidi gore. Drugo, SELF se prosleđuje konstruktoru kao parametar i po njemu se razlikuje da li je potrebno alocirati objekat ili on već postoji. Ako objekat postoji (što je slučaj sa na primer var a: TObject, kome je prostor već rezervisan u Data Segmentu), alokacija se preskače. ::::: Konstruktor sada (u okviru tog ::::: prostora koji je napravio New) pravi VMT i ostalo sta treba. Objekat ne sadrži kopiju VMTa, već NEAR pointer na VMT lociran u Data segmentu. Taj VMToffset se prosleđuje konstruktoru. ::::: Moze se desiti da se u toku rada konstruktora pojavi potreba da se ::::: ponovo nesto alocira na heap-u. ::::: Ovo, medjutim, ne mora da uspe. U tom slucaju opet moze da dodje do RTE ::::: 203 ili ne i to opet u zavisnosti od broja koji vraca funkcija na koju ::::: pokazuje HeapError. Ako ta funkcija vrati 1 konstruktor generise kod ::::: koji oslobadja sve sto je on do tada uradio, vraca vrednost NIL (tj. ::::: postavlja P na Nil) i zavrsava sa radom. To nema nikakve veze jedno sa drugim. Objekat neće biti dealociran ako kod konstruktora (između begin i end) pokuša alokaciju za svoje potrebe i dođe do greške. Ukoliko HeapError funkcija vraća 1, alokacija će vratiti NIL i kod konstruktora će koristiti NIL. Koliko je to zdravo, to je drugo pitanje. Ono što je sigurno je da ako počne izvršavanje konstruktorovog koda, onda je objekat uspešno alociran unutar begin sekcije. ::::: Generisanje istog ovog koda, za nasilno prekidanje konstruktora i ::::: ponistavanje rezultata njegovog rada, ostvaruje se komandom Fail, koja i ::::: moze biti pozvana samo unutar konstruktora. Ukoliko se koristi Fail, ::::: rezultat koji vraca funkcija na koju ukazuje HeapError se i ne poziva, ::::: pa ni njen rezultat nije bitan (ova funkcija se, u stvari, poziva samo ::::: ako dodje do greske pri alociranju memorije, a ne i ako korisnik zatrazi ::::: Fail). Znaci, posle Fail-a P je uvek NIL. Razlog zbog kog se posle Fail komande vraća nil je što se Fail interpretira kao JMP na posebni deo end sekcije (koja postoji samo ako postoji Fail) koji dealocira objekat sa HEAPa i postavlja SELF na NIL. Ukoliko alokacija propadne na samom početku, izvršavanje nikad neće doći do Fail. Druga nezgodacija je što Fail deo dealocira samo objekat, dok će memorija koja je alocirana unutar konstruktora (pre Fail) ostati zarobljena. Kao rezultat toga, MemAvail na početku i kraju programa neće biti isti (izvor nerviranja za programerske picaj*le, u koje i sam spadam). ::::: P.P.S. Zaista ti cestitam na kolicini odgovora koju saljes u ovu ::::: konferenciju. :) Zahvaljem. :)
pascal.414 jovca.car, -> #409, nlazic
/* P.S. Izvinjavam se zbog nasih slova, ali koristim YUSCII koji cesto zna Što ih onda ne koristiš u celoj poruci?