pascal.1ppekovic,
U staroj PC.PROG konferenciji, ova tema je bila jedna od najposećenijih,
verujem da će i dalje biti tako. Dakle: Pascal ...
Paya
pascal.2ssokorac,
Ako uzmem neku 'sličicu' sa getimage, da li mogu da je put-ujem na ekran
iskošenu, za ugao izmedju 0 i 90 stepeni, 0 znam ;) a i 90, ali da li može
izmedju?
Da pojasnim:
đ----đ /Đ
đ đ u / Đ
------ Đ Đ
Đ /
Đ /
Đ/
Ovako ispade i u različitim dimenzijama, ali inače ne trba. Nadam se da
me neko raumeo :).
pascal.3drpr,
-> #1, ppekovic-> U staroj PC.PROG konferenciji, ova tema je bila jedna od
-> najposećenijih, verujem da će i dalje biti tako. Dakle:
-> Pascal ...
Vrlo je zanimljivo kako je u ovoj temi bilo dosta poruka,
korisnih rasprava,solidan broj datoteka, a nema na sezamu dir
za pascal, a postoji za c i clipper.Možda fajl moderatori imaju
šta da kažu na ovu temu ali mislim da bi bilo dosta stvari koje
bi mogle da se nađu u tom diru .
cope
pascal.4bulaja,
-> #3, drpr│Vrlo je zanimljivo kako je u ovoj temi bilo dosta poruka,
│korisnih rasprava,solidan broj datoteka, a nema na sezamu dir
│za pascal, a postoji za c i clipper.
└───
Dir-a za Pascal nema, jer nema ni datoteka koje bi isle u njega. Koliko
sam pratio pascal temu, nisam primetio neki ozbiljniji program koji bi
mogao da ide u \pc\program dir. Ako neko ima nesto za sta misli da treba
da ide u dir nek slobodno posalje. U svakom slucaju, posebnog PASCAL
direktorijuma nece biti dokle god se u \ibmpc\program ne nakupi dovoljan
broj (recimo desetak) datoteka za njega.
pascal.5nenadb.,
Potreban mi je najefikasniji algoritam ( i source) po mogućnosti
za proceduru
pretrazivanja po zadatoj reci. Ako uzmemo u obzir postojeće programe
glavni zadatak bi bio nalazenje podreci bez obzira na nacin pisanja
(case insensitive, non-word search).
Ako neko ima pomenuti algoritam ( i source eventualno) molio bih ga da
ga UL u ovo konferenciju.
unapred hvala
NenadB.
pascal.6almi,
-> #5, nenadb.Imas u trubo viziji primer za textsearch mislim da je u programu
tvedit.pas
Pozdrav
Almi.
pascal.7almi,
Evo svim pascalovcima program koji crta bezierovu krivu tj. B-SPLINE.
Ovo je preveden i obrađen program sa C-a iz Racunara 78.Dodata je
mogućnost pomeranja tačaka kontrolnog poligona putem miša.Objašnjeno je
sve kao komentar u programu.
Pozdrav ALMI.
ps. koristio sam svoj unit za miša pa vam i njega dajem uz listing
bezr78.arjpascal.8nenadb.,
-> #6, almi>> Imas u trubo viziji primer za textsearch mislim da je u programu
>> tvedit.pas
Nazalost nemam TV. Moze li to da sljaka na TP5.5?? Ako moze
molim te UL program.
unapred hvala
NenadB.
pascal.9ztuke,
-> #7, almi*>mogućnost pomeranja tačaka kontrolnog poligona putem miša.Objašnjeno je
*>sve kao komentar u programu.
Ajde podesi kodni raspored sa SET CODE na 852CP, mislim! Kuke i kvake...
tuke
pascal.10ilazarevic,
-> #2, ssokorac█ Ako uzmem neku 'sličicu' sa getimage, da li mogu da je
█ put-ujem na ekran iskošenu, za ugao izmedju 0 i 90
█ stepeni, 0 znam ;) a i 90, ali da li može izmedju?
Ja mislim da ne može... Ovo je i mene zanimalo, ali nikako nisam uspeo
da nađem rešenje :(
pascal.11bearboy,
Kako da u TPU ubacim OBJ ? Kad naiđr na external definiciju, crkne :(
pascal.12dejanr,
-> #11, bearboy>> Kako da u TPU ubacim OBJ ?
Koristi klauzulu {$L ime.OBJ}
pascal.13ssokorac,
-> #7, almi ─┼┤ ps. koristio sam svoj unit za miša pa vam i njega dajem uz listing
Meni onaj .pas za miša ne radi ok, nece da pomera kursor u donju
polovinu ekrana. Mozda zbog vga?
I, da, zaboravio si CloseGraph na kraju programa :), a takodje stavio
si i ReadKey na kraj programa, i to samo ReadKey, bez ičeg drugog :).
pascal.14bearboy,
Gde se može naći/nabaviti/skinuti OBJ2ASM ? Treba mi hitno.
PS. Potrebno za SUPI, tako da bolje požurite :)
pascal.15skoprivica,
-> #10, ilazarevic│ █ Ako uzmem neku 'slicicu' sa getimage, da li mogu da je
│ █ put-ujem na ekran iskosenu, za ugao izmedju 0 i 90
│ Ja mislim da ne moze... Ovo je i mene zanimalo, ali nikako nisam
Cini mi se da moze u basicu. Stvarno sto nema basic topica ovde?
pascal.16almi,
-> #9, ztukeJa koristim navedeni kodni raspored!!
Pozdrav
Michel
pascal.17almi,
-> #13, ssokoracKao prvo Closegraph moze i ne mora,a kao drugo ako se ukljuci $x+ tj.
ekstended sintaxa onda pozivi funkcija bez dodele vrednosti prolaze u TP6.0
Pozdrav Almić
pascal.18almi,
-> #8, nenadb.Evo ti listing gde postoji search funkcija i search & replace funkcija
pozdrav
almi.
editors.paspascal.19ssokorac,
Kako da saznam ime tekućeg direktorijuma? Pretpostavljam da je vrlo
jednostavno, ali prekopah ceo help i ne nadjoh ništa :(.
pascal.20almi,
-> #19, ssokoracProbaj da uradiš ovako nešto:
tekuci:=paramstr(0);
to daje komadnu liniju.
A postoji ja mislim i rešenje u r:\ibmpc\info\ pascal manual.
To je ono što znam.
Pozdrav
Almi!!
pascal.21ssokorac,
-> #20, almiProbaj da uradiš ovako nešto:
tekuci:=paramstr(0);
to daje komadnu liniju.
------------------------------------
Tako dobijem samo direktorijum u kome se nalazi program kada je startovan,
ali ako je tekuci neki drugi...?
pascal.22dejanr,
-> #19, ssokorac>> Kako da saznam ime tekućeg direktorijuma?
Koristi funkciju getdir, npr. getdir(0, rez) i dobiješ ime u string
promenljivoj rez.
pascal.23stomic,
-> #21, ssokorac$ Tako dobijem samo direktorijum u kome se nalazi program
$ kada je startovan, ali ako je tekuci neki drugi...?
Isečak iz TP 6.0 helpa... Nadam se da ovim nisam oštetio autorska
prava ;))).
-------------------------------------------------
GetDir Procedure
Returns the current directory of specified drive
Syntax:
GetDir(d: Byte; var s: string);
d Actual
Value Drive
-------------
0 Default
1 A
2 B
3 C
... ...
{ Example for GetDir }
var
s : String;
begin
GetDir(0,s); { 0 = Current drive }
WriteLn('Current drive and directory: ',
s);
end.
-------------------------------------------------
Pozdrav, Slobodan Tomic.
pascal.24bdm.,
-> #19, ssokorac## Kako da saznam ime tekuceg direktorijuma? Pretpostavljam da je vrlo
## jednostavno, ali prekopah ceo help i ne nadjoh nista :(.
GetDir
BDM.
pascal.25ssokorac,
-> #23, stomic ─┼┤ GetDir Procedure
Thanks i tebi i dejanu, ja sam tražio u dos unitu takvu proceduru,
kad ono ona je izvan dos-a...:)
pascal.26vitez.koja,
-> #19, ssokorac#=> Kako da saznam ime tekuceg direktorijuma? Pretpostavljam
#=> da je vrlo
Procedura GetDir... Valjda GetDir(var Dirname : string; drive:byte);
Drive je Broj diska (1=A,2=B,0=Trenutni). Mozda su parametri navedeni
suprotnim redosledom, ali to je to.
pascal.27ssokorac,
Kako se moze proveriti da li je disketa ubacena u drajv, bez da DOS uleti sa
svojim Retry, Abort, Ignore, Fail? ako nije ubacena?
pascal.28dejanr,
-> #27, ssokorac>> Kako se moze proveriti da li je disketa ubacena u drajv, bez da DOS uleti
>> sa svojim Retry, Abort, Ignore, Fail? ako nije ubacena?
Ne znam da li je to baš najregularniji metod, ali ja koristim:
repeat
writeln ('Insert diskette in drive itd, itd');
write ('Press any key to copy');
repeat until keypressed; a:=readkey;
size:=disksize (diskno);
until size>0;
pascal.29janko,
-> #27, ssokorac> Kako se moze proveriti da li je disketa ubacena u drajv,
> bez da DOS uleti sa svojim Retry, Abort, Ignore, Fail? ako
> nije ubacena?
TP to radi sam, (ne puŠta DOS da uleti). Probaj.
pascal.30ssokorac,
-> #28, dejanr ─┼┤ Ne znam da li je to baš najregularniji metod, ali ja koristim:
Nije važno da l' je regularan, važno da radi :). Baš dobar fazon,
thanks!
pascal.31ssokorac,
-> #29, janko ─┼┤ TP to radi sam, (ne puŠta DOS da uleti). Probaj.
Probao i stvarno ne pušta. Ali, probao sam jednostavno
Repeat
a:=ReadKey;
š$I-ć
ChDir('a:Đ')
š$I+ć
Until IOResult=0;
ChDir('c:Đ')
i radilo je, dok se nije završio program, tad je javio Internal
Error <broj>, report to Borland.
pascal.32janko,
-> #31, ssokorac> Probao i stvarno ne pušta. Ali, probao sam jednostavno
> ChDir('a:Đ')
Nisam ni mislio na to, nego na onu funkciju kojoj poturiš broj
diska.
Inače, ta f-ja se direkno remapira u Dosov int, ali TP
okruženje 'hvata' kada Dos digne frku.
Za razliku od TP-a, TC i BC to ne rade, već moraš sam da pišeš
'hendlere.' Zato sam rekao da TP to radi sam.
pascal.33zzile,
Kako da junit za pascal 5.5 prevedem u junit za 6.0, a nemam source kod?
pascal.34minja.,
Da li neko zna gde mogu da nađem zbirku zadataka iz turbo pascala, napisao
ju je Milan žabarkapa?
pozdrav, minja
pascal.35kenza,
-> #34, minja. [:> Da li neko zna gde mogu da nadem zbirku zadataka iz
[:> turbo pascala, napisao ju je Milan Cabarkapa?
Mozes da je nadjes u Jugoslovenskoj Knjizi u Palati Albanija,
u maloj knjizari na Studentskom Trgu,a u krajnjem slucaju
mozes da je pozajmis od nekog iz MG-a i fotokopiras ;)
pascal.36drpr,
-> #33, zzile-> Kako da junit za pascal 5.5 prevedem u junit za 6.0, a nemam
-> source kod?
Nikako , nažalost :((.Ovo je jedan od velikih razloga sto ne
prelazim na 6.0 za sad.Možda uz najavljenu verziju stigne nešto
tako , bar se nadam da hoće .
cope
pascal.37dejanr,
-> #33, zzile>> Kako da junit za pascal 5.5 prevedem u junit za 6.0, a nemam source kod?
Jako teško. Jedino što možeš da probaš jeste da da kažeš NU XX.TPU. Negde
na samom vrhu videćeš da piše TPU6. Probaj to da prepraviš u TPU7 (ili
šta već TP6.0 traži, ne sećam se napamet, možeš da pogledaš neki njegov
unit). Na taj način ćeš ga "prevariti" da primi taj unit tj. da ne prijavi
grešku. Ali to još ne znači da će tako "primljen" unit korektno raditi.
Obično ne radi :(
Ali, obzirom da operacija kratko traje, vredi probati.
pascal.38lunic,
-> #34, minja.Mozes knigu Cabarkapu(ZBIRKU) da nadjes kod mene LUNIC.
pascal.40zzile,
-> #37, dejanrProbao sam da editujem tpu datoteku (treba TPU9) ali je posle pascal ne
prihvata. Probao sam i neki tpu disasembler ali ne daje ocigledne rezultate.
Nadao sam se da neko zna neki tpu -> obj konverter ili slicno. Imam neku
biblioteku od Hewlet Packarda ali su oni umesto da daju obj i jedan fajl sa
pratecim sorsom dali niz *3.tpu .tpu *55.tpu ...Valjda da me vezu na
dozivotni upgrade! :-(((((.K
pascal.41janko,
-> #40, zzile> biblioteku od Hewlet Packarda ali su oni umesto da daju
> obj i jedan fajl sa pratecim sorsom dali niz *3.tpu .tpu
> *55.tpu ...Valjda da me vezu na dozivotni upgrade!
> :-(((((.K
Jesi li siguran da u programu koristiš bilo šta od TP-a što ima
samo u 6.0 a nema u 5.5? Zašto ne bi preveo pomoću 5.5 svoj
program?
pascal.42predragd,
-> #40, zzile> Nadao sam se da neko zna neki tpu -> obj konverter ili slicno.
Pa sad, ja imam konvertor kakav koji pretvara .TPU u .OBJ, ali on
to radi sam za TP 5.0. Imam i konvertor koji radi .TPU u .ASM za TP
4.0. Ako bi ova starudija mogla pomoći javi se.
Peđa.
pascal.43hacker,
-> #42, predragdE pa to Úbi bilo fino, ovaj TPU OBJ kÚonvertor...
pascal.44adzem,
Slučajno sam pronašao jedan štos u editoru TP-a (možda ga već znate,
ali nema veze, ima ko ne zna).
Ako dva puta puta pritisnete Ctrl-O, na pocetku programa pojaviće se
spisak direktiva prevodiocu i to onako kako je podešeno u Options
meniju.
(* $A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,R-,S+,V+,X- *)
(* $M 16384,0,655360 *)
Zgodna stvar, a radi i u 5.5 i 6.0 verziji. Starije nisam proverio.
pascal.45almi,
Evo jednog notesa(čitaj mini-rokovnik) pisanog u pascalu.Ako je neko
zainteresovan za source neka mi se javi.
U exe-datoteci treba promeniti jedan direktorijum. Nadji C:\ i zameni sa
dir-om gde je program.
Pozdrav ALMI.
pascal.46ssokorac,
-> #45, almi ─┼┤ U exe-datoteci treba promeniti jedan direktorijum. Nadji C:Đ i zameni sa
─┼┤ dir-om gde je program.
Nažalost, uz poruku nema nikakvog fajla :(. Inače, da ne bi korisnik morao
ručNo da menja ime direktorijuma, sa paramstr(0) dobijaš puno ime
direktorijuma u kome je startovan program, i onda sa njim radi šta ti je
volja :).
pascal.47dejanr,
Pre nekog vremena smo (čini mi se) ovde pričali o exit procedurama
u turbo pascalu. Onako jako ukratko, sve se svodi na:
var exitsave: pointer
temp: file;
...
procedure myexit;
begin
exitproc:=exitsave;
close(temp);
erase(temp);
... ovde ide deo programa koji se izvršava kada program završi rad
end;
...
begin { glavni program }
exitsave:=exitproc;
exitproc:=@myexit;
... radni deo programa ...
exitproc:=exitsave;
end.
Ideja je da se u okviru myexit pozatvaraju fajlovi, obrišu temp datoteke
i tako to. Jedini način da se zna za handle-ovi tih fajlova u exit
proceduri je, koliko shvatam, da se kao u gornjem primeru koristi
globalna promenljiva.
Lepo, a sad evo još jednog primera:
var exitsave: pointer
temp: file;
...
procedure radni_deo(...)
var temp: file;
procedure myexit;
begin
exitproc:=exitsave;
close(temp);
erase(temp);
end;
begin {radni deo}
...
end;
begin { glavni program }
exitsave:=exitproc;
exitproc:=@myexit;
radni(...);
exitproc:=exitsave;
end.
Sve lepo, samo što ne radi, uopšte ne uspeva da zatvori fajl! Najzad
mi padne na pamet da pogledam šta je u proceduri myexit seg(temp) i
dobijem "nešto sasvim levo". Dakle, exit procedura mora da bude na
"nultom" nivou a njeni parametri prave globalne promenljive!
pascal.48drpr,
Haj svima!
Imam jedan problem:
Odlučih da pravim jedan svoj komunikacioni program ali imam
frku sa linkovanjem :(.Za početak sam hteo da koristim zz-ov
lcomm iz računara 57 (btw ima fajl na sezamu) u kome se nalazi
lcomm.asm i navodi se da je potrebno program kompajlirati sa
masm lcomm /Mx;
To sam i uradio;dobio sam .obj i sada sam ušao u tp i reko hajde
da probam da li će u opšte tp5.5 da vidi dati obj te napisah
sledeće:
program tel;
{$L lcomm}
begin
end.
Kada kucnuh ALT-F9 kompajler mi prijavi grešku sledećeg
sadržaja:
Invalid relocatable reference (LCOMM.OBJ)
Dalje sa svim pokušajima da stavim i {$L lcomm.obj} i sa
path-om ništa nije uspelo.Palo mi je na pamet da se
Majkrosoftov masm I Borlandov TP ne trpe ali rekoh nije valjda
u tome razlog.
Eto to je ceo istorijat mog problema pa se nadam da će mi neko
pomoći.
cope
PS
Nemam Tasm da bih probao sa njim ali mislim da ne bi trebalo
(smelo ??) da bude razlike. U napred hvala svima koji odgovore!
pascal.49almi,
-> #48, drprJa nisam mnogo radio sa {$l ...} ali
mislim da probaš sledeće
Procedure Lcomm;
{$l lcomm.obj}
Begin
Lcomm
End.
pascal.50predragd,
-> #43, hacker> E pa to Úbi bilo fino, ovaj TPU OBJ kÚonvertor...
E pa malo sam zeznuo stvar. TPU u OBJ konvertor je za verziju
TP 4.0, TPU u ASM je za TP 5.0.
Peđa.
tpu2obj.arjpascal.51stomic,
-> #47, dejanr$ Sve lepo, samo što ne radi, uopšte ne uspeva da zatvori
$ fajl! Najzad mi padne na pamet da pogledam šta je u
$ proceduri myexit seg(temp) i dobijem "nešto sasvim levo".
$ Dakle, exit procedura mora da bude na "nultom" nivou a
$ njeni parametri prave globalne promenljive!
Ako ovo dozvoljava (tvoja verzija, 5.0?) TP onda je ovo bug!
On dozvoljava da exit pokazuje na ugnježdenu proceduru!?
Prvo, ako se ona direktno pozove iz glavnog programa, neće uopšte
biti definisane promenljive iz procedure na nivou više (što se kod tebe
dešava).
Drugo, po ovome bi mogao direktno da pozoveš ugnježdenu proceduru da
se izvrši iz glavnog programa? Ugnježdena procedura uopšte nije vidljiva
iz glavnog programa.
BTW, TP6.0 neće da prihvati tvoj primer :). Sorry, ako grešim :).
ST.
pascal.52dejanr,
-> #51, stomic>> Ako ovo dozvoljava (tvoja verzija, 5.0?) TP onda je ovo bug!
To je bilo na TP 5.5, nikad se nisam navikao na ovaj 6.0. Da,
valjda to treba nazvati bug, ali u svakom slučaju vredno pažnje.
>> BTW, TP6.0 neće da prihvati tvoj primer :).
žudno... koji deo neće da prihvati tj. šta se desi?
pascal.53janko,
-> #48, drpr> Imam jedan problem:
> Odlučih da pravim jedan svoj komunikacioni program ali
> imam frku sa linkovanjem :(.Za početak sam hteo da
> koristim zz-ov lcomm iz računara 57 (btw ima fajl na
> sezamu) u kome se nalazi lcomm.asm i navodi se da je
> potrebno program kompajlirati sa
> program tel;
> š$L lcommć
> begin
> end.
Nije to tako jednostavno kao što misliš. NE MOčE se mašinac za
C linkovati u TP program bez posledica. Moraš da pišeš mašinac
za TP, odnosno da prepraviš LCOMM tako da odgovara Turbo
Paskalu. Kako se to radi, duuuuga je priča. Nabavi origninalna
uputstva (ili njihove kopije;) za TP ili za TASM, trebalo bi
da tamo sve piše na tu temu.
pascal.54ilotina,
HI!
Koji je najbrzi & najbolji nacin za pretvaranje string[1] u char.
To mi treba jerbo nemoze da se napise nesto ovako:
var a:string[1]; b:char;
begin
b:=a;
{^^^^^}
end.
Ivan
pascal.55djelovic,
-> #54, ilotina> Koji je najbrzi & najbolji nacin za pretvaranje stOgingŠ1Ć u ch
> To mi treba jerbo nemoze da se napise nesto ovako:
b := a Š1Ć;
pascal.56djelovic,
-> #48, drpr> Odlučih da pravim jedan svoj komunikacioni program ali imam
> frku sa linkovanjem :(.Za početak sam hteo da koristim zz-ov
> lcomm iz računara 57 (btw ima fajl na sezamu) u kome se nalazi
1. Nemoj da korstiš taj lcomm već jedan patchovani koji imaš u
PC.SOFT a koji ima veći bafer i radi sa sva četiri porta.
2. lcomm takav kakav jeste ne može da se poveže sa Pascalom jer
očekuje da se parametri prenose kao u C-u. Ono što ti treba jeste jedan
C modul koji će da izgleda recimo ovako
---------------- INTERFACE.C --------------------
#include "lcomm.h"
int pascal lcomm_init_new (int port, int speed)
š
lcomm_init (port, speed);
ć
... i slicne rutine
------------------------------------------------
u kome ćes svaku C rutinu da obaviješ u drugu rutinu sa deklaracijom
Pascal. Na taj nacin ćeš u svom programu da zoveš ove nove rutine koje
su za Pascal a one će dalje da zovu standarden lcomm rutine.
3. Uz turbo pascal si dobio i primer povezivanja C rutina sa
Pascal programom. Šmekni to pa ubaci INTERFACE.OBJ u LCOMM.OBJ u neki
unit.
4. Ukoliko nešto nije jasno, co jo pc.prog, pa vikaj.
pascal.57drpr,
-> #49, almi-> Procedure Lcomm;
-> {$l lcomm.obj}
->
-> Begin
-> Lcomm
-> End.
Hvala na odgvoru ali mislim da to nije što ja hoću.U okviru
lcomma mi se nalaze procedure i funkcije koje želim da pozovem.
cope
pascal.58almi,
Evo jedne modifikovane verzije SVGABI31.arj tj. jedan tp-unit koji
sam ja sam sklepao iz pomenute arhive.Uz njega ide i DOC pa kome
se svidi moze da ga koristi.
Pozdrav ALMI.
grafika.arjpascal.59ssokorac,
-> #54, ilotina ─┼┤ var a:stringŠ1Ć; b:char;
─┼┤ begin
─┼┤ b:=a;
─┼┤ šžžžžžć
─┼┤ end.
A što ne bi ovako:
b:=aŠ1Ć;
pascal.60drpr,
-> #56, djelovic-> 1. Nemoj da korstiš taj lcomm već jedan patchovani koji imaš
-> u PC.SOFT a koji ima veći bafer i radi sa sva četiri porta.
Hvala na odgovoru i ide jedno pitanje:
Gde da nađem taj pačovani tj. kako se zove da bih ga ja
potražio u pc.soft?
cope
pascal.61mjova,
-> #48, drpr> Nemam Tasm da bih probao sa njim ali mislim da ne bi
> trebalo (smelo ??) da bude razlike. U napred hvala svima
> koji odgovore!
mislim da ti je najbolje rešenje da uzmeš lepo TP60 i u njemu to sve
pišeš. znam da ti je problem jer imaš puno toga za 5.5, ali ipak ;).
malo je neodgovorno od borlanda to što TPU nije vertikalno
kompatibilan pa se narod teže prebacuje u novu verziju, kad bi bar
dali definicuju TPU-ova pa da neki tip lepo napiše konverter iz jednog
u drugi i reši problem milionima ;).
elem, uzmi 6.0, unesi asm u pas uz potrebne izmene i rešio si problem.
što se tiče pitanja tih rutina, mislim da nisu baš sjajne, bar po
zakovim rečima (njega je strah da o tome piše ;) tako da zahtevaju
izvesne prepravke da bi bile savršene ;)
pascal.62dzakic,
-> #61, mjova>> što se tiče pitanja tih rutina, mislim da nisu baš sjajne, bar po
>> zakovim rečima (njega je strah da o tome piše ;) tako da
>> zahtevaju izvesne prepravke da bi bile savršene ;)
Da, ne znam zašto se zz odlučio za onako čudnu varijantu bafera,
uglavnom ja sam rutine prepravio da rade sa pravim kružnim baferom (to
maximize performance, što bi rekli oni što su pisali async.pas :).
Zatim, u tim rutinama nema podrške hardverskoj CTS/RTS kontroli, a
pomenuta 'patch' verzija koju je kasnije ostavio vkostic nepotrebno je
nagomilana kodom koji se već nalazi u biosu. Svejedno, lcomm biblioteka
je lepa ilustracija kako to sve funkcioniše i šta se sve od toga može
napraviti.
pascal.63dzakic,
-> #48, drpr>> program tel;
>> {$L lcomm}
>> begin
>> end.
Kao što su ti već rekli, potrebne su modifikacije i u samom asemblerskom
delu, a što se paskala tiče, treba staviti samo jedno {$L lcomm.obj} na
početku, a zatim deklarisati svaku proceduru ponaosob kao external.
function comm_install(portno:byte):boolean; external;
procedure comm_setparam(param:byte); external;
procedure comm_remove; external;
itd.
Možda će ti biti zanimljiv još jedan podatak -- sve procedure koje se
nalaze u .obj-u, iz glavnog programa će biti pozivane kao NEAR, dok ako
lcomm biblioteku odlučiš da staviš u junit, biće pozivane kao FAR. O
tome treba voditi računa kada se piše asemblerski deo. Naravno, sve je
logično, ali kad se počinjalo... i nije baš :). Dakle, lakše ti je da
sve procedure forsiraš da budu far, i deklarišeš ih sa, recimo:
Procedure comm_put(c:char); external; far;
Ili uključi {$F+} direktivu. A, kao što ti je neko već pomenuo, najlakše
je da sve to uradiš u šestici ovako:
Procedure comm_interrupt; interrupt; assembler;
asm
push ax
push bx
itd.
procedure comm_put(c:char); assembler;
asm mov al,c
cmp output_busy,1
itd.
i od toga napraviš junit za komunikaciju. Tada, sâm kompajler vodi
računa šta je near a šta far, prenošenje parametara ide daleko
jednostavnije i sl. Jedino što za prebacivanje u ovaj oblik treba
razumeti svaku liniju koda. Ako te zanima više detalja, tu sam.
Zak
pascal.64vitez.koja,
-> #59, ssokorac#=> b:=aS1C;
Al ste naporni s tim yusciijem :(
pascal.65stomic,
-> #52, dejanr$ žudno... koji deo neće da prihvati tj. šta se desi?
Kompajler javi: Unknown identifier. Jednostavno ne vidi tu proceduru.
Evo ti primer što sam kompajlirao:
=================
PROGRAM Primer;
PROCEDURE P1;
PROCEDURE P2;
BEGIN
WriteLn('Hi 2');
END;
BEGIN
WriteLn('Hi 1');
END;
BEGIN
exitproc:=@P2; <-- Unknown identifier.
END.
=================
ST.
pascal.66stomic,
-> #53, janko$> program tel;
$> š$L lcommć
$> begin
$> end.
$
$ Nije to tako jednostavno kao što misliš. NE MOčE se
$ mašinac za C linkovati u TP program bez posledica. Moraš
$ da pišeš mašinac za TP, odnosno da prepraviš LCOMM tako da
$ odgovara Turbo Paskalu. Kako se to radi, duuuuga je priča.
$ Nabavi origninalna
Pa ako imaš (poruka se odnosi Drpr korisniku) TP6.0 relativno
je lako srediti. Ovo sam radio pre 6-7 meseci i kod mene je OK
bilo. Ako te interesuje poslaću ti. Neverujem da bi bilo mnogo
teže uraditi i u ASM pa linkovati OBJ fajl.
ST.
pascal.67dejanr,
-> #65, stomicShvatam, ali šta ako je exitproc:=@P2; ne u glavnom programu
nego u P1 proceduri koja "vidi" P2? Kod mene baš tada nastupa
problem da ta procedura radi, ali ne vidi dobro parametre
deklarisane takođe u okviru P1.
pascal.68ssokorac,
Da li je mnogo komplikovano napraviti program koji će, recimo, kada
pritisnem u dos-u Alt-C da obriše ekran, npr. Tj. kako napraviti rezidentan
program. Ako je predugačko, never mind, ali ako nekog ne mrzi bio bih mu
veoma zahvalan.
Thanks, Stasha.
pascal.69dzakic,
-> #67, dejanr>> problem da ta procedura radi, ali ne vidi dobro parametre
>> deklarisane takođe u okviru P1.
Parametri deklarisani u okviru P1 nalaze se na steku. Kako je trenutak
nastanka greške nepredvidiv, exitprocedura ne može da zna koliko su
'daleko' parametri iz P1 i logično je da ih ne vidi dobro (meni bar).
Paskal dozvoljava dodelu adrese proceduri, ali kada treba da se izvrši -
ne radi kako treba.
pascal.70darone,
-> #64, vitez.koja>> # => b:=aS1C;
>>
>> Al ste naporni s tim yusciijem :(
Nabaci YU slova, manje će ti smetati.
darone
pascal.71zzile,
-> #41, jankoJa sam naravno resio problem koristeci turbo pascal 5.5 ali mi je to pravilo
probleme a i ne volim da koristim vise verzija jednog paketa, tako da mi je
problem i dalje aktuelan.
pascal.73zzile,
-> #42, predragdVoleo bih da mi posaljes konvertor TPU -> OBJ , pa makar bio i za tp4.0 jer
imam i tu verziju junita. Unapred hvala.
pascal.74stomic,
-> #69, dzakic$>> problem da ta procedura radi, ali ne vidi dobro
$>> parametre deklarisane takođe u okviru P1.
$
$ Parametri deklarisani u okviru P1 nalaze se na steku. Kako
$ je trenutak nastanka greške nepredvidiv, exitprocedura ne
$ može da zna koliko su 'daleko' parametri iz P1 i logično
$ je da ih ne vidi dobro (meni bar).
Baš tako :). A i kada nastane exitproc, IP može da bude bilo
gde u programu, tako da parametri deklarisani u okviru P1 ne
moraju biti ni na steku.
ST.
pascal.75dejanr,
Na žalost, i novi BP 7.0 ima "problema" sa onih 64 K. Džabe DPMI
kad kod radi i na 286, a tamo je i dalje 64K po deskriptoru :(
No više nema limita za podatke, pa mogu da se rade ovakve stvari
ako su potrebne veće strukture:
program BigStuff;
uses
Objects,
WinAPI;
type
PBigData = ^TBigData;
TBigData = object(TObject)
NumRecs: Longint;
RecSize: Word;
Start: Word;
constructor Init(ANumRecs: Longint; ARecSize: Word);
destructor Done; virtual;
procedure GetSetData(Index: Longint;
var Data; SetData: Boolean);
virtual;
end;
constructor TBigData.Init(ANumRecs: Longint; ARecSize: Word);
begin
TObject.Init;
NumRecs := ANumRecs;
RecSize := ARecSize;
Start := GlobalAlloc(gmem_Moveable, RecSize * NumRecs);
if Start = 0 then
Runerror(201);
end;
destructor TBigData.Done;
begin
TObject.Done;
GlobalFree(Start);
end;
procedure TBigData.GetSetData(Index: Longint;
var Data; SetData: Boolean);
var
Selector, Offset: Word;
P: Pointer;
begin
if Index >= NumRecs then
begin
RunError(201);
end;
Index := Index * RecSize;
Selector := (Index div 65536) * SelectorInc + Start;
OffSet := Index mod 65536;
P := GlobalLock(Selector);
P := Ptr(Selector, Offset);
if SetData then
Move(Data, P^, RecSize)
else
Move(P^, Data, RecSize);
GlobalUnlock(Selector);
end;
type
PBigInt = ^TBigInt;
TBigInt = object(TBigData)
constructor Init(ANumRecs: Longint);
procedure PutItem(Index: Longint; Value: Integer);
function GetItem(Index: Longint): Integer;
end;
constructor TBigInt.Init(ANumRecs: Longint);
begin
TBigData.Init(ANumRecs, SizeOf(Integer));
end;
procedure TBigInt.PutItem(Index: Longint; Value: Integer);
begin
TBigData.GetSetData(Index, Value, True);
end;
function TBigInt.GetItem(Index: Longint): Integer;
var
Value: Integer;
begin
TBigData.GetSetData(Index, Value, False);
GetItem := Value;
end;
var
BI: TBigInt;
begin
BI.Init(200000);
BI.PutItem(100000, 777);
Writeln(BI.GetItem(100000));
BI.Done;
end.
pascal.76inesic,
-> #68, ssokorac>
> Da li je mnogo komplikovano napraviti program koji će,
> recimo, kada pritisnem u dos-u Alt-C da obriše ekran, npr.
> Tj. kako napraviti rezidentan program. Ako je predugačko,
> never mind, ali ako nekog ne mrzi bio bih mu veoma
> zahvalan.
I ja sam ovo odavno hteo da znam, ali sam se stideo :) da
pitam. Zapravo me zanima kako napraviti rezidentan program, ali
bez tamo nekih inlajnova, asmova, inkludova i sličnog. Mislim
čist pascal bez izleta u asembler i C. Pošto u TP ima naredbi
koje mogu da obave posao, bilo bi divno da se nađe neka dobra
duša i veže nama, običnim smrtnicima, clrScr za Alt-nešto.
Ivica
pascal.77mjova,
-> #68, ssokorac> Da li je mnogo komplikovano napraviti program koji će,
> recimo, kada pritisnem u dos-u Alt-C da obriše ekran, npr.
pa mislim da ovo nije posebno komplikovano napraviti, ali sumnjam da si
baš to hteo ;). ako ti je želja da na Alt-C obrišeš ekran, stavi alias
u 4dos-u tako da na tu kombinaciju startuješ 'cls'. time si rešio
problem ;)
što se tiče rezidentnog programa, mislim da je dobro rešenje okačiti
se na int 16 i kad se poziva neka određena (fn wait/getkey) fn
proveriti da li se radi o zadatom tasteru i da li je trenutno u dosu
(prompt). najbolja fora što ovo nije baš toliko sigurno jer se taster
može uzeti i direktno iz bafera, ali je po meni kvalitetnije rešenje.
bolje rešenje je okačiti se na int 9, izvršiti staru rutinu, i onda
proveriti da li postoji nešto u baferu, ako postoji proveri da li je
to hotkey i onda, ako jeste, proveri da li si u promptu, itd.
pascal.78ssokorac,
-> #75, dejanr ─┼┤ Na žalost, i novi BP 7.0 ima "problema" sa onih 64 K. Džabe DPMI
Je l' BP 7.0 isto što i TP 7.0? :)
pascal.79dejanr,
-> #78, ssokorac>> Je l' BP 7.0 isto što i TP 7.0? :)
Nije! Kao i kod C-a, Borland deli paskal na "veliki" i "mali". BP 7.0
je "veliki i skup" a TP 7.0 "mali i skup". Ovaj, "mali i jeftin" ;)
pascal.80predragd,
-> #73, zzile> Voleo bih da mi posaljes konvertor TPU -> OBJ , pa makar
> bio i za tp4.0 jer imam i tu verziju junita. Unapred
> hvala.
To što tražiš se nalazi u poruci 6.50.
Peđa.
pascal.81predragd,
-> #68, ssokorac> Da li je mnogo komplikovano napraviti program koji će,
> recimo, kada pritisnem u dos-u Alt-C da obriše ekran, npr.
> Tj. kako napraviti rezidentan
Ja ću ti napisati takav program ako hoćeš, međutim moja biblioteka
za rezidentne programe je glupava, tako da će ti programčić zauzimati
minimum 12K RAM-a. Ako si još uvek zainteresovan javi se.
Peđa.
pascal.82vitez.koja,
-> #68, ssokorac#=> Da li je mnogo komplikovano napraviti program koji ce,
#=> recimo, kada pritisnem u dos-u Alt-C da obrise ekran,
#=> npr. Tj. kako napraviti rezidentan
Nije tesko :) naprotiv
na pocetku mu smanjis memoriju na minimum sa $M direktivom - npr.
{$M 1024,0,0}. Odlucis na koji interapt ces da zakacis svoju proceduru,
i odlucis se npr. za 9. Onda odlucis da li ces da pozivas starog
vlasnika vektora (za int 9 moras), i ako hoces deklarises jednu
promenljivu tipa procedure :) izgleda sasavo ali je zapravo ok. onda
poredis sta treba sa vektorima, i zavrsis program se Keep(exitcode);.
Najlakse je citati tastaturu direktno sa porta 60h, ali tad ne mozes da
detektujes kombinacije tastera. Evo ti npr. program koji na pritisak na
F12 brise ekran, a sa F11 ga aktiviras-dezaktiviras.
{$M 1024,0,0}
Program Cls;
uses
Crt,Dos;
var
KBD : procedure;
Act : boolean;
Procedure BrisiBre; interrupt;
begin
inline ($9C);
KBD;
if (Port[$60]=88) and Act then
begin
ClrScr;
Sound(3000);
Delay(20);
NoSound;
GoToXY(1,1);
end;
if Port[$60]=87 then Act:=not(act);
end;
begin
SwapVectors;
GetIntVec(9,@KBD);
SetIntVec(9,Addr(BrisiBre));
writeln(' * vm * CLS *');
Act:=true;
Keep(0);
end.
Jos ponesto... Proceduru na koju postavljas interapt moras da deklarises
sa 'interrupt', da bi sacuvala flegove, registre i tako-to. kad zoves
starog vlasnika vektora moras prvo da gurnes flegove na stek (PUSHF),
jerbo se iz te procedure koju pozivas izlazi sa IRET (ili RETI? nisam
bas siguran, nesto tako), koja prvo vrati flegove sa steka pa tek onda
preda stafetu. U lepo ponasanje spada i da na pocetku vratis sve vektore
na staro stanje sa SwapVectors - tp ih celu gomilu prikaci na sebe i
ometa, izmedju ostalog, ctrl-break, sto nije pohvalnmo za rezidnetni
program.
pascal.83dejanr,
-> #82, vitez.koja>> var KBD: procedure;
>> inline ($9C);
>> KBD;
>> GetIntVec(9,@KBD);
Svaka čast za ideju :) Ja to radio mnogo komplakovanije.
pascal.84d.petrovic,
-> #82, vitez.kojaAjde sad to prevedi na pseudo jezik (ceo primer) ili na C pa si
zaradio sok od šargarepe :))
pascal.85drpr,
-> #76, inesic-> I ja sam ovo odavno hteo da znam, ali sam se stideo :)
-> da pitam. Zapravo me zanima kako napraviti rezidentan
-> program, ali bez tamo nekih inlajnova, asmova, inkludova
-> i sličnog. Mislim čist pascal bez izleta u asembler i C.
-> Pošto u TP ima naredbi koje mogu da obave posao, bilo bi
-> divno da se nađe neka dobra
Ovih dana bi trebao da dobijem sorceove svi programa iz
O'Brien-ove knjige o tp6.0 gde između ostalog stoji i kako
napraviti svoj TSR te je dat primer screen savera koji se pali
na određeno vreme.
cope
pascal.86mmile,
-> #68, ssokorac
> Da li je mnogo komplikovano napraviti program koji će, recimo,
> kada pritisnem u dos-u Alt-C da obriše ekran, npr. Tj. kako
> napraviti rezidentan program. Ako je predugačko, never mind,
> ali ako nekog ne mrzi bio bih mu veoma zahvalan.
> Thanks, Stasha.
Evo programa :
{$m 1024,0,0} { Stack , Heap min., Heap max. }
uses crt,dos;
Procedure Main;interrupt;
begin
if (port[$60]=46) { Da li je pritisnut taster C }
and (mem[$40:$17] and 8 = 8) { i da li je pritisnut Alt. }
then clrscr; { ako jeste onda obrisi ekran }
end;
Begin
SetIntVec($1c,@main); { ovim se svakih 18.5ms izvrsi }
keep(0); { procedura main. }
End.
pascal.87isekulovic,
-> #76, inesic>> I ja sam ovo odavno hteo da znam, ali sam se stideo :) da
>> pitam. Zapravo me zanima kako napraviti rezidentan program, ali
Pogledaj fajl uz poruku pc.prog 4.562, zatim diskusiju u pc.soft
trubo.pascal negde pri kraju teme i Moj mikro 9/91.
pascal.88mjova,
-> #86, mmile> Procedure Main;interrupt;
> begin
> if (port[$60]=46) { Da li je pritisnut taster C }
> and (mem[$40:$17] and 8 = 8) { i da li je pritisnut Alt. }
> then clrscr; { ako jeste onda obrisi ekran }
> end;
jedini (manji) problem je to što se na portu za tastaturu nalazi
*ispravan* znak samo ako se desio int 9 koji je uslovljen pritiskom na
taster. sadržaj porta za tastaturu je različit zavisno od situacije:
kad se generiše int 9, onda ima ispravan sadržaj. ovaj sadržaj ostaje
gde je dokle god se kontroleru ne stavi do znanja da je znak preuzet,
i dok se ne resetuje. kakav će sadržaj biti posle resetovanja to niko
ne garantuje.
kako si ovo okačio na čest int onda će se ovo verovatno i dešavati,
ali nije ispravno rešenje.
pascal.89vitez.koja,
-> #85, drpr#=> Ovih dana bi trebao da dobijem sorceove svi
#=> programa iz O'Brien-ove knjige o tp6.0 gde izmedu
#=> ostalog stoji i kako napraviti svoj TSR te je dat
#=> primer screen savera koji se pali na odredeno vreme.
Taj screen saver nije neka mudrost... Ima jednu globalnu promenljivu
koja odbrojava, jednu proceduru vezanu za int 8 koja smanjuje tajmer, i
jednu na int 9 koja ga postavlja na max i/ili restaurira ekran... Ni on
ne zna da vrati alociranu memoriju :(
pascal.90vitez.koja,
-> #84, d.petrovic#=> Ajde sad to prevedi na pseudo jezik (ceo primer) ili na
#=> C pa si zaradio sok od sargarepe :))
Nema problema, ali nemoj posle da se izvlacis na blokadu i kako nema
sargarepe i tako to ;)))
pascal.91ssokorac,
-> #85, drpr ─┼┤ O'Brien-ove knjige o tp6.0 gde između ostalog stoji i kako
─┼┤ napraviti svoj TSR te je dat primer screen savera koji se pali
─┼┤ na određeno vreme.
Nemoj da zaboraviš da pošalješ! :)
pascal.92ssokorac,
-> #79, dejanr ─┼┤ je "veliki i skup" a TP 7.0 "mali i skup". Ovaj, "mali i jeftin" ;)
Osim što je jedan veliki a drugi mali :), koje su razlike? Da li prg. u tp
radi i u bp (obrnuto pretpostavljam da ne važi). Naravno, ne mislim na
programe koje bi i običan pascal razumeo, nego neki tp egzotičan program? :)
pascal.93ssokorac,
-> #82, vitez.koja ─┼┤ Program Cls;
E, hvala ti mnoooogo :). Radi odlično, petnest minuta lupam F12 i
oduševljavam se :). Još kad bi rekao i način za kombinacije tastera -
dobiješ besplatno prvog supija koji bude koštao preko $100 O:).
pascal.94drpr,
-> #89, vitez.koja-> Taj screen saver nije neka mudrost... Ima jednu globalnu
-> promenljivu koja odbrojava, jednu proceduru vezanu za int 8
-> koja smanjuje tajmer, i
MA nisam mislio da je neka mudrost, ali za početak i učenje
principa mislim da je sasvim ok.
cope
pascal.95dejanr,
-> #92, ssokorac>> > BP 7.0 je "veliki i skup" a TP 7.0 "mali i skup". Ovaj, "mali i
>> > jeftin" ;)
>>
>> Osim što je jedan veliki a drugi mali :), koje su razlike?
Ja na žalost nemam TP 7.0 (a nemam ni BP 7.0 ali bar imam beta verziju)
tako da sve što ti kažem, kažem na osnovu vesti koje si i ti mogao da
pročitaš u NOVOSTI/microb. Dakle, ako oni lažu mene i ja lažem vas :)
BP 7.0 pravi aplikacije za Windows i za DOS, a u DOS-u može da pravi
aplikacije koje rade na AT+ u protected modu (DPMI). Tada nema ograničenja
za podatke (do 16 mega), ali je struktura i dalje ograničena na segment :(
TP 7.0 je DOS pascal, dakle ništa Windows i ništa DPMI. BP može da pravi
i neku vrstu DLL-ova za DOS, TP (izgleda?) ne može. Sve u svemu, TP 7.0
je "izrastao" iz TP 6.0, a BP 7.0 je nova stvar.
>> Da li prg. u tp radi i u bp (obrnuto pretpostavljam da ne važi).
Verujem da radi.
pascal.96zolika,
-> #76, inesic>> I ja sam ovo odavno hteo da znam, ali sam se stideo :) da
>> pitam. Zapravo me zanima kako napraviti rezidentan program, ali
>> bez tamo nekih inlajnova, asmova, inkludova i sličnog. Mislim
>> čist pascal bez izleta u asembler i C. Pošto u TP ima naredbi
""""""
Uzmi Modulu-2, imaš u TSR modulu procedure koje ti omogućuju da napišeš
svoj TSR program. To se kod nas na fakultetu radi na vežbama (pisanje
TSR programa).
pascal.97vitez.koja,
-> #93, ssokorac#=> Još kad bi rekao i način za kombinacije tastera
Testiras neki bit neke sistemske promenljive u biosovom segmentu za
podatke ;))) valjda 40:nesto. I nekom od fajlova u direktorijumima
sezama imas opis toga, ali u koje ne znamo ;)
pascal.98janko,
-> #75, dejanr> No više nema limita za podatke, pa mogu da se rade ovakve
> stvari ako su potrebne veće strukture:
>
> program BigStuff;
> (.. sledi listing ...)
Za nas koji ne kapiraju, opiši u reč-dve kakve stvari...
Ukapirao sam da zove neke njegove junite da bi radio to što
radi, ali šta to radi i kako nisam.
Dovoljno je da kažeš šta, kako nije bitno. ;)
pascal.99ssokorac,
var p:žbyte;
begin
p:=ptr($40,$17);
pž:=pž or 32
end.
Ovime ću uključiti Num Lock, ali tek kada neki taster bude pritisnut :(.
Na koji način mogu 'simulirati' pritisnuti taster, ili postoji drugi način
uključivanja num locka? (osim da pritisnem num lock;).
pascal.100inesic,
-> #96, zolika> Uzmi Modulu-2, imaš u TSR modulu procedure koje ti
> omogućuju da napišeš
Pa ti si genije. Koga da ubijem za modulu-2 koja će da radi
na mom XTu? Ne tražim ja pascal džabe. (Tri prog. jezika u
čamcu, a o asembleru da i ne govorimo.)
Ivica
pascal.101mmile,
-> #99, ssokorac> Na koji način mogu 'simulirati' pritisnuti taster, ili postoji
> drugi način uključivanja num locka? (osim da pritisnem num
> lock;).
begin
MemŠ$40:$17Ć:=memŠ$40:$17Ć or 32;
end.
pascal.102ppekovic,
-> #97, vitez.koja>> Testiras neki bit neke sistemske promenljive u biosovom segmentu za
>> podatke ;))) valjda 40:nesto. I nekom od fajlova u direktorijumima
>> sezama imas opis toga, ali u koje ne znamo ;)
0417H: bit
0 p RIGHT SHIFT
1 p LEFT SHIFT
2 p CTRL
3 p ALT
4 l SCROLL LOCK
5 l NUM LOCK
6 l CAPS LOCK
7 l INSERT
0418H: bit
0 p LEFT CTRL
1 p LEFT ALT
2 p SYS REQ
3 l PAUSE
4 p SCROLL LOCK
5 p NUM LOCK
6 p CAPS LOCK
7 p INSERT
p - pushed; l - locked
Paya