PCPROG.2

06 Nov 1992 - 26 Jul 1993

Topics

  1. algoritmi (223)
  2. ms.dos (250)
  3. asembler (141)
  4. jezici (278)
  5. pascal (1307)
  6. cccc (752)
  7. cpp (91)
  8. clipper (1027)
  9. baze.podataka (229)
  10. razno (379)
  11. van.teme (189)
  12. basic (56)

Messages - pascal

pascal.1 ppekovic,
U staroj PC.PROG konferenciji, ova tema je bila jedna od najposećenijih, verujem da će i dalje biti tako. Dakle: Pascal ... Paya
pascal.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? Da pojasnim: đ----đ /Đ đ đ u / Đ ------ Đ Đ Đ / Đ / Đ/ Ovako ispade i u različitim dimenzijama, ali inače ne trba. Nadam se da me neko raumeo :).
pascal.3 drpr, -> #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.4 bulaja, -> #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.5 nenadb.,
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.6 almi, -> #5, nenadb.
Imas u trubo viziji primer za textsearch mislim da je u programu tvedit.pas Pozdrav Almi.
pascal.7 almi,
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.arj
pascal.8 nenadb., -> #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.9 ztuke, -> #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.10 ilazarevic, -> #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.11 bearboy,
Kako da u TPU ubacim OBJ ? Kad naiđr na external definiciju, crkne :(
pascal.12 dejanr, -> #11, bearboy
>> Kako da u TPU ubacim OBJ ? Koristi klauzulu {$L ime.OBJ}
pascal.13 ssokorac, -> #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.14 bearboy,
Gde se može naći/nabaviti/skinuti OBJ2ASM ? Treba mi hitno. PS. Potrebno za SUPI, tako da bolje požurite :)
pascal.15 skoprivica, -> #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.16 almi, -> #9, ztuke
Ja koristim navedeni kodni raspored!! Pozdrav Michel
pascal.17 almi, -> #13, ssokorac
Kao 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.18 almi, -> #8, nenadb.
Evo ti listing gde postoji search funkcija i search & replace funkcija pozdrav almi. editors.pas
pascal.19 ssokorac,
Kako da saznam ime tekućeg direktorijuma? Pretpostavljam da je vrlo jednostavno, ali prekopah ceo help i ne nadjoh ništa :(.
pascal.20 almi, -> #19, ssokorac
Probaj 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.21 ssokorac, -> #20, almi
Probaj 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.22 dejanr, -> #19, ssokorac
>> Kako da saznam ime tekućeg direktorijuma? Koristi funkciju getdir, npr. getdir(0, rez) i dobiješ ime u string promenljivoj rez.
pascal.23 stomic, -> #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.24 bdm., -> #19, ssokorac
## Kako da saznam ime tekuceg direktorijuma? Pretpostavljam da je vrlo ## jednostavno, ali prekopah ceo help i ne nadjoh nista :(. GetDir BDM.
pascal.25 ssokorac, -> #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.26 vitez.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.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?
pascal.28 dejanr, -> #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.29 janko, -> #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.30 ssokorac, -> #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.31 ssokorac, -> #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.32 janko, -> #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.33 zzile,
Kako da junit za pascal 5.5 prevedem u junit za 6.0, a nemam source kod?
pascal.34 minja.,
Da li neko zna gde mogu da nađem zbirku zadataka iz turbo pascala, napisao ju je Milan žabarkapa? pozdrav, minja
pascal.35 kenza, -> #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.36 drpr, -> #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.37 dejanr, -> #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.38 lunic, -> #34, minja.
Mozes knigu Cabarkapu(ZBIRKU) da nadjes kod mene LUNIC.
pascal.40 zzile, -> #37, dejanr
Probao 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.41 janko, -> #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.42 predragd, -> #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.43 hacker, -> #42, predragd
E pa to Úbi bilo fino, ovaj TPU OBJ kÚonvertor...
pascal.44 adzem,
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.45 almi,
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.46 ssokorac, -> #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.47 dejanr,
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.48 drpr,
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.49 almi, -> #48, drpr
Ja nisam mnogo radio sa {$l ...} ali mislim da probaš sledeće Procedure Lcomm; {$l lcomm.obj} Begin Lcomm End.
pascal.50 predragd, -> #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.arj
pascal.51 stomic, -> #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.52 dejanr, -> #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.53 janko, -> #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.54 ilotina,
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.55 djelovic, -> #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.56 djelovic, -> #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.57 drpr, -> #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.58 almi,
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.arj
pascal.59 ssokorac, -> #54, ilotina
─┼┤ var a:stringŠ1Ć; b:char; ─┼┤ begin ─┼┤ b:=a; ─┼┤ šžžžžžć ─┼┤ end. A što ne bi ovako: b:=aŠ1Ć;
pascal.60 drpr, -> #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.61 mjova, -> #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.62 dzakic, -> #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.63 dzakic, -> #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.64 vitez.koja, -> #59, ssokorac
#=> b:=aS1C; Al ste naporni s tim yusciijem :(
pascal.65 stomic, -> #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.66 stomic, -> #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.67 dejanr, -> #65, stomic
Shvatam, 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.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.
pascal.69 dzakic, -> #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.70 darone, -> #64, vitez.koja
>> # => b:=aS1C; >> >> Al ste naporni s tim yusciijem :( Nabaci YU slova, manje će ti smetati. darone
pascal.71 zzile, -> #41, janko
Ja 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.73 zzile, -> #42, predragd
Voleo bih da mi posaljes konvertor TPU -> OBJ , pa makar bio i za tp4.0 jer imam i tu verziju junita. Unapred hvala.
pascal.74 stomic, -> #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.75 dejanr,
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.76 inesic, -> #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.77 mjova, -> #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.78 ssokorac, -> #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.79 dejanr, -> #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.80 predragd, -> #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.81 predragd, -> #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.82 vitez.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.83 dejanr, -> #82, vitez.koja
>> var KBD: procedure; >> inline ($9C); >> KBD; >> GetIntVec(9,@KBD); Svaka čast za ideju :) Ja to radio mnogo komplakovanije.
pascal.84 d.petrovic, -> #82, vitez.koja
Ajde sad to prevedi na pseudo jezik (ceo primer) ili na C pa si zaradio sok od šargarepe :))
pascal.85 drpr, -> #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.86 mmile, -> #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.87 isekulovic, -> #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.88 mjova, -> #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.89 vitez.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.90 vitez.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.91 ssokorac, -> #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.92 ssokorac, -> #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.93 ssokorac, -> #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.94 drpr, -> #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.95 dejanr, -> #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.96 zolika, -> #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.97 vitez.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.98 janko, -> #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.99 ssokorac,
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.100 inesic, -> #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.101 mmile, -> #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.102 ppekovic, -> #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