pascal.312dejanr,
-> #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.313postmast,
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.314postmast,
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.315postmast,
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.316postmast,
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.317postmast,
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.318postmast,
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.319postmast,
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.320postmast,
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.321postmast,
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.322niklaus,
-> #312, dejanrSubject: 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.323niklaus,
-> #318, postmastSubject: 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.324dejanr,
-> #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.325bulaja,
-> #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.326postmast,
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.327postmast,
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.328postmast,
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.329postmast,
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.330postmast,
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.331nlazic,
-> #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.332nlazic,
-> #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.333nlazic,
-> #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.zippascal.334flash,
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.335postmast,
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.336postmast,
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.337postmast,
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.338postmast,
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.339jasicp,
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.340nemko,
-> #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.341nlazic,
-> #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.zippascal.342nlazic,
-> #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.343duzle,
-> #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.344janko,
-> #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.345madamovic,
-> #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.346madamovic,
-> #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.347nemko,
-> #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.348mmitrovic,
-> #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.349mmitrovic,
-> #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.350nlazic,
-> #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.351nemko,
-> #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.352postmast,
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.353postmast,
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.354postmast,
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.355postmast,
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.356postmast,
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.357postmast,
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.358nemko,
-> #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.359sslavko,
-> #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.paspascal.360postmast,
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.361nexy,
Hitno bi mi trebao GraphGET (GraphREAD) za Pascal.
P.S. U strasnoj sam frci pa ne mogu da ga pravim.
Pozdrav,
Wizard NEXY
pascal.362eburanj,
-> #353, postmastIzraz (1=1) <=> TRUE u paskalu što je mnogo jednostavniji izraz
(mada bi TP trebao da opš#timizuje (1=1) u TRUE...
pascal.363jasicp,
-> #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.364jasicp,
-> #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.365vitez.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.366duzle,
-> #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.367jkpbvk,
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.368nemko,
-> #365, vitez.koja)>Ć- while 1 do ;)
pascal.369mmitrovic,
-> #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.370mmitrovic,
-> #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.371nemko,
-> #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.372pirke,
-> #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.373nemko,
-> #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.374nemko,
-> #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.375vitez.koja,
-> #371, nemko#=> )>-)> Ć- while 1 do ;)
#=> Trebalo je da glasi: Zar je nesto ovako moguce u
#=> pascalu?
Nije :) Bar ne u Turbo Paskalu.
pascal.376mmitrovic,
-> #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.377mmitrovic,
-> #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.378postmast,
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.379postmast,
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.380postmast,
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.381postmast,
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.382postmast,
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.383pirke,
-> #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.384billy,
-> #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.385duzle,
-> #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.386dejanr,
-> #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.388nesh,
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.389jasicp,
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.390nemko,
-> #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.391nlazic,
-> #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.392dejanr,
-> #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.393postmast,
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.395postmast,
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.396postmast,
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.397vgenije,
HI
jel moze neko da mi pomogne -odnosno sastavi proceduru pomocu koje ce
racunar softverski da pali i gasi monitior(zatamnjenje)
pascal.398jkpbvk,
-> #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.399nlazic,
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.zippascal.400nemko,
-> #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.401kriss,
-> #399, nlazic˙˙ javite pa da pošaljem i kompletnu biblioteku (oko 4.5Mb
˙˙ sorseva).
Šalji i ne pitaj.
pascal.402nlazic,
-> #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.403bulaja,
-> #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.404mmitrovic,
-> #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.405mmitrovic,
-> #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.406mmitrovic,
-> #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.407mmitrovic,
-> #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.408nlazic,
-> #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.409nlazic,
-> #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.411biki,
(*
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.412kriss,
-> #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.413mmitrovic,
-> #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.414jovca.car,
-> #409, nlazic/* P.S. Izvinjavam se zbog nasih slova, ali koristim YUSCII koji cesto zna
Što ih onda ne koristiš u celoj poruci?