PCPROG.3

26 Jul 1993 - 22 Apr 1994

Messages - pascal

pascal.618 vvelisavljev, -> #613, markom
> Ako je iz TPW6, onda me ne čudi, jerbo je to PUNO bagova, > ali direktno gađanje video memorije je osnova 60% mojih > programa pisanih u TP 6 !! Ako to ne radi u sedmici, > ostadoh ja na 6 :)) To ne radi jedino ako u BP kompajliraš u protected modu. Ako radiš sa turbo ili ako u BP staviš Real sve će raditi isto kao i u TP 6.0.
pascal.619 peca.st, -> #615, ilazarevic
!->> Daklem, procita ga Ok, ali kad mu kazem writeln(linija.str2) !-> !-> Ovo ne može da radi zato što je fajl sastavljen od rekorda. Dakle, !-> ti možeš da upišeš samo jedan ceo rekord, čijim elementima !-> dodeljuješ vrednosti. Da je tekst fajl, moglo bi. Il, nisi dobro video šta je napisao čovek. :) Piše: writeln(linija.str2), dakle, nije u fajl, nego na ekran. Peđa.
pascal.620 markom, -> #618, vvelisavljev
■■■ To ne radi jedino ako u BP kompajliraš u protected modu. Ako ■■■ radiš sa turbo ili ako u BP staviš Real sve će raditi isto ■■■ kao i u TP 6.0. Pa mene baš zanima da li mogu direktno da pucam u VM u protected modu, ako ne može, je*em ti taj program koji prozore crta sa WriteLn ;) Marko
pascal.621 kriss, -> #617, paki
˙˙ Da nije zbog toga što CRT ima i inicijalizaciju? Misliš jedno Begin End. kao 'startujući deo'?
pascal.622 peca.st, -> #621, kriss
!-> Misliš jedno Begin End. kao 'startujući deo'? I nešto između tog Begin End. :) To sam ti rekao u klubu, i mislim da je to u pitanju. A šta tu radi - pojma nemam, verovatno nešto bitno, čim je tu. :) Peđa.
pascal.623 jovca.car, -> #602, markom
/* Reci mi iskreno, da li si IKADA vide savrsen program? Windows 3.1? ;))))))))
pascal.624 markom, -> #623, jovca.car
■■■ Windows 3.1? ;)))))))) HAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHA, reče on ;> Marko
pascal.625 mzdravkovic,
Pisem jedno programce u Pascalu, ali zbog nedovoljnog znanja, potrebna mi je pomoc. Kako da program bude rezidentan u memoriji i da se stalno izvrsava ? HVALA !
pascal.626 andrejt, -> #625, mzdravkovic
===> Pisem jedno programce u Pascalu, ali zbog nedovoljnog znanja, potrebna ===>mi je pomoc. Kako da program bude rezidentan u memoriji i da se stalno ===>izvrsava ? U memoriju ga ostavljas sa Keep.Rezidentni programi se izvrsavaju tako sto se promeni vektorska tabela prekida,koja sadrzi adrese procedura koje se izvrsavaju posle odredjenog prekida. Recimo imas neku proceduru u tom tsru koja se zove proc_1 i hoces da se ona izvrsava na int9(tastatura) onda uradis : Getintvec(9,@StaraProcedura); {Gde je StaraProcedura : Procedure} Setintvec(9,@proc_1);{procedura koja se izvrsava na int9} Keep(0); Takodje je pametno posle izvrsenja proc_1 pustiti i StaraProcedura.
pascal.627 markom, -> #625, mzdravkovic
■■■ Pisem jedno programce u Pascalu, ali zbog nedovoljnog znanja, ■■■ potrebna mi je pomoc. Kako da program bude rezidentan u ■■■ memoriji i da se stalno izvrsava ? Koliko ja znam, sa KEEP ga napraviš rezidentnim, a to da se stalno izvršava mo- žeš da postigneš tako što ćeš da napraviš jednu interapt proceduru koja će da se izvršava recimo na svakom petom otkucaju sistemskog sata. Kako ovo uraditi i ne znam baš najbolje ... Marko
pascal.628 dr.grba, -> #623, jovca.car
>> /* Reci mi iskreno, da li si IKADA vide savrsen program? >> >> Windows 3.1? ;)))))))) ... Trgom se prolomi uzvik. "Tako je", povikaše seljaci, "ja i narod ćemo vikati!" ... (;║■
pascal.629 isekulovic,
Da li postoje neki neželjeni efekti ukoliko se umesto: st:=copy(st,1,x); uradi: st[0]:=x; ivan ps var st : string;
pascal.630 andrejt, -> #627, markom
Evo tebe da dopunim to se radi (valjda) sa INT 8. (Mada postoje i neke funkcije za sat koje prate ta otkucavanja ali ovako je najlakse)
pascal.631 andrejt, -> #629, isekulovic
===>Da li postoje neki nezeljeni efekti ukoliko se umesto: ===>st:=copy(st,1,x); ===>uradi: ===>st[0]:=x; Za copy bas i ne znam ali st[0]:=x; sigurno nista nece da uradi zato sto(valjda) charovi u stringu idu od 1 do 255. P.S. Ali cini mi se da ti i ono st:=copy(st,1,x); nece raditi (valjda nije ta sintaksa) pa posto verovatno oba ne rade nista korisno nezeljenih efekata nece biti (u odnosu na st := copy(st,1,x);
pascal.633 predragd, -> #590, niklaus
> Preporučujem ti da koristiš QEMM zajedno sa DPMI dodatkom > za DPMI. Kako ti je uspelo da nateraš QEMM-ov QDPMI da radi da BP-om. Meni BP uvek pukne po startovanju i javi cd QDPMI sa nekom porukom o grešci. Peđa.
pascal.634 predragd, -> #603, markom
> žekaj, stani malo... Kaži mi da ako sa BP 7.x program > prevedeš u protected modu, i iz njega probaš direktno da > gađaš video memoriju, ovaj će da pukne ?!? > > Ako je to istina onde ću morati da pišem 99% programa iz > početka :((( Mislim da nećeš imati toliko posla oko prepravljanja programa. Već sam to negde napomenuo, potrebno je samo konvertovati segment adresu u descriptor. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR AX = 0002h BX = real mode segment Return: CF clear if successful AX = selector corresponding to real mode segment (64K limit) CF set on error AX = error code (DPMI 1.0+) (8011h) (see AX=0000h) Notes: multiple calls for the same real mode segment return the same selector the returned descriptor can never be modified or freed not supported by MS Windows 3.0 in Standard mode Peđa.
pascal.632 predragd, -> #592, vvelisavljev
> DPMI ?? Da li ima negde na Sezamu nešto detaljnije o ovome? INTER37*.* > žega bi trebalo da se pridržavam u svom programu? Da ne pristupaš direktno memoriji (ako baš moraš poželjno bi bilo da pre toga konvertuješ segment adresu u descriptor, int 31h), da real mode interrupt-e pozivaš funkcijom koju sam nedavno ostavio u ovoj temi. Programi pisani u asembleru za real mode će morati pretrpeti neke izmene. Moguće je da ima još nekih pravila kojih se treba pridržavati, ali ja bar za sada nisam uspeo da ih pronađem. > Izgleda da nisam dobro objasnio šta me muči. Nešto mi > olako BP javlja poruke da nema dovoljno memorije i sl. > Imam 2 MB RAMa, a moj exe kompajliran u Real modu ima oko > 130 kB a u protected oko 150 kB. Najbolje mi radi bez > ikakvih menadžera, čak i bez HIMEMa. Da bi se uopšte pokrenuo BP zahteva minimum 2 Mb RAM-a, tako da nije ni malo čudno što se BP buni. U ovakvoj sutuaciji najbolje je raditi bez ikakvih menadžera i drajvera (ukoliko je to moguće). > Kako treba da izgleda $M direktiva za protected mod? U > real modu mi izgleda ovako : š$M 32768,0,131072ć. U protected modu se definiše samo veličina steka (max 64Kb). Ostale dve stavke se ne uzimaju u obzir. Peđa.
pascal.635 markom, -> #632, predragd
■■■ U protected modu se definiše samo veličina steka (max 64Kb). U TP-u 6.0 ne može svih 64K, već _samo_ 65520 b :) Marko
pascal.636 markom, -> #634, predragd
■■■ Mislim da nećeš imati toliko posla oko prepravljanja ■■■ programa. Već sam to negde napomenuo, potrebno je samo ■■■ konvertovati segment adresu u descriptor. Na žalost nisam te baš najbolje razumeo, ali ajde :( Pazi ovo: Definišem promenljivu VM, tipa ARRAY[1..4000] OF BYTE na adresi $B000:$8000, znači na adresi video memorije. Ako probam da pišem u taj niz, da li će prijavljivati grešku ? Marko
pascal.637 markom, -> #629, isekulovic
■■■ st[0]:=x; Ako ti je x integer, byte, ili slično, a to je iz datog primera očigldeno ;), onda postoje :)) Moraš da napišeš st[0] := Chr(x), jer st[0] je char, a ne broj :) Marko
pascal.638 peca.st, -> #629, isekulovic
!-> Da li postoje neki neželjeni efekti ukoliko se umesto: Ne bi trebalo, pod uslovom da je x <= Length (st) Ako je veće, onda se ćeš u ostatku stringa dobiti razno đubre. Inače, promena dužine stringa preko stŠ0Ć je, po meni, sasvim legalan put. Peđa.
pascal.639 dzakic, -> #629, isekulovic
> Da li postoje neki neželjeni efekti ukoliko se umesto: > st:=copy(st,1,x); > uradi: > st[0]:=x; Apsolutno ne! Drugi metod je daleko brži, kraći, meni i pregledniji. Nedavno sam gledao neke sorseve junita koje je sâm Borland pablikovao (ne mogu sad da se setim o čemu se radi) i vidim da i oni obilato koriste trikove tipa: inc(s[0]); s[length(s)]:=' '; umesto s:=s+' '; Drugi način je za početnike, kompajler tu poziva procedure za konkatenaciju ;) stringova, u code segmentu čuva konstantni string ' ' i brdo nepotrebnih stvari oko sitnice kao što je ova. Prvi način je daleko kraći, bukvalno se uradi jedan inc na bajt koji čuva dužinu stringa i na kraj se upiše potreban znak. Ne treba se plašiti 'funkcije' length koja izgleda rogobatno kad se kuca, njom se samo čita nulti bajt stringa, nije potprogram kao što mora da bude u C-u. Jedina razlika između ove dve stvari je što ne postoji kontrola dužine dobijenog stringa. U drugom slučaju se sigurno ne bi desilo ništa ružno: dodavanje na već pun string ne bi ga izmenilo, dok ako se ti onim s[0]:=chr(x) zaletiš pa upišeš dužinu veću od dozvoljene (deklarisane), može da bude svašta. Ukoliko si siguran šta radiš i naknadno proveravaš dužinu novodovijenog stringa, nema nikakvih problema.
pascal.640 dzakic, -> #639, dzakic
>> st:=copy(st,1,x); >> st[0]:=x; Sad nešto gledam. Ovo će da radi samo ako string st treba skratiti. Ukoliko je x veće od prethodne dužine st, nije svejedno. Pretpostavljam da ti je jasno zašto.
pascal.641 dejanr, -> #629, isekulovic
>> Da li postoje neki neželjeni efekti ukoliko se umesto: >> st:=copy(st,1,x); >> uradi: >> st[0]:=x; Treba chr(x), inače će da prijavi grešku. Ako se to ne računa, metod ne da ne pravi štetu, nego izaziva ubrzanje. Koristi ga i Borland u raznim Toolkit-ima. Jedino moraš biti oprezan da tako ne "produžiš" string, pošto će "rep" imati slučajan sadržaj. Za razliku od toga, copy naredba kontroliše sve što treba.
pascal.642 markom, -> #638, peca.st
■■■ Inače, promena dužine stringa preko stŠ0Ć je, po meni, sasvim ■■■ legalan put. Štaviše, ponekad i neophodan ;) Marko
pascal.643 markom, -> #639, dzakic
■■■ dužinu stringa i na kraj se upiše potreban znak. Ne treba se ■■■ plašiti 'funkcije' length koja izgleda rogobatno kad se kuca, ■■■ njom se samo Da, ali se Length(s) lepo zameni sa jednim Ord(s[0]), a to je još lepše i kraće ze kucanje ;) Marko
pascal.644 bulaja,
**** new file **** R:\IBMPC\PASCAL\*.* ---------------------- tspa3370 zip 107638 Timo Salmi's TPU collection (Turbo Pascal 7.0) Prof. Timo Salmi's TPU collection of nearly 200 useful Turbo Pascal 7.0 routines for text-mode programs.
pascal.646 andrejt,
s[0] := 'A'; Ovo nista ne radi sem sto u s ubaci i neke dodatne charove.Zasto ?(s je string) Ja sam mislio da je to zbog toga sto su charovi od 1-255 ali onda stvarno nista ne bi trebalo da uradi ili bi izbacio gresku.
pascal.647 markom, -> #646, andrejt
■■■ s[0] := 'A'; Ovo postavlja dužinu stringa s na 65 znakova. (ASCII kod 'A' = 65) Marko
pascal.648 pedjak, -> #629, isekulovic
> Da li postoje neki neželjeni efekti ukoliko se umesto: > st:=copy(st,1,x); > uradi: > stŠ0Ć:=x; Verovatno si mislio stŠ0Ć:=chr(x). Ekvivalentna stvar onom copy(st,1,x), samo brža.
pascal.649 dzakic, -> #646, andrejt
> s[0] := 'A'; > Ovo nista ne radi sem sto u s ubaci i neke > dodatne charove.Zasto ?(s je string) Zato što jse u nultom bajtu stringa čuva njegova dužina.
pascal.650 eagle, -> #638, peca.st
> Inače, promena dužine stringa preko stŠ0Ć je, po meni, sasvim > legalan put. A kako se inače menja dužina stringa? ;)
pascal.651 eagle, -> #639, dzakic
> inc(sŠ0Ć); sŠlength(s)Ć:=' '; umesto s:=s+' '; > Drugi način je za početnike, kompajler tu poziva procedure za > konkatenaciju ;) stringova, u code segmentu čuva konstantni string Dobar kompajler bi sve izraze s:=s+... preveo na prvi način, kad već ne postoji funkcija adds(s1,s2) koja inline nadovezuje s2 na s1. TP slabo optimizuje, čak je i move potprogram.
pascal.652 isekulovic, -> #626, andrejt
>> Getintvec(9,@StaraProcedura); {Gde je StaraProcedura : Procedure} >> Setintvec(9,@proc_1);{procedura koja se izvrsava na int9} >> Keep(0); Ima tu još dosta stvari da se uradi. Kao prvo proc_1 treba da se definiše kao interapt procedure tj. Procedure proc_1; interrupt; Dalje na početku procedure mora da se uradi Inline($9c); tj. pushf. Pošto DOS koristi isti prostor za stek za sve funkcije od $00 do $0C početak izvršavanja jedne funkcije dok se izvršava druga će izazvati blokiranja kompa kada se memorija bude vratila drugog funkciji da nastavi rad. Da se to ne bi dogadjalo potrebno je proveriti da li je aktivna već neka funkcija, a to se radi tako što se proverava vrednost tkzv. InDos flega. Ukoliko je 0 nijedna funkcija nije aktivna. Njegovu adresu vraća funkcija $34 u registrima ES:BX. Ipak ukoliko je InDos<>0 ipak u jednom specificnom slucaju smemo da izvrsimo nasu funkciju, a to je ako se trenutno izvrsava funkcija $06 koja čeka da korisnik nešto otkuca. Tada DOS (a i neki programi koji ne koriste dos-ove funkcije za ocitavanje tastature, npr. TP) stalno poziva prekid $28 tkzv. DOS Idle ili DosOK. Treba još preusmeriti i vektore koji su zaduženi za poruke o greškama, npr. $24 za presretanje greske u radu sa datotekama, da command.com ne bi ispisao ono nesretno Retry, Abort, Ignore, Fail? >> Takodje je pametno posle izvrsenja proc_1 pustiti i StaraProcedura. Zavisi od interpta koji preuzimamo. Npr. u slučaju $08, $09 mora se obavezno pozvati stara procedura. Ako program startujemo preko PrintScreen tastera ($05) onda nema potreba da zovemo staru proceduru. Kod $09 je jos kvaka da se stara procedura mora pozvati POSLE ocitavanja tastera sa porta $60 (ako hoćemo da program radi i na XT-u). Ivan
pascal.653 andrejt, -> #625, mzdravkovic
I jos da dodam da bi bilo pametno da se na pocetak stavi {$M} da ogranici koriscenu mem. na steku. (ako se ne stavi nece da radi uopste)
pascal.654 peca.st, -> #640, dzakic
!->>> st:=copy(st,1,x); !->>> stŠ0Ć:=x; !-> !-> Sad nešto gledam. Ovo će da radi samo ako string st treba !-> skratiti. Ukoliko je x veće od prethodne dužine st, nije !-> svejedno. Pretpostavljam da ti je jasno zašto. Pa da, ali ni ono prvo ne bi ništa uradilo ako je x veće od prve dužine. Peđa.
pascal.655 dzakic, -> #654, peca.st
> Pa da, ali ni ono prvo ne bi ništa uradilo ako je x veće od prve dužine. Copy('sezam',1,200) opet će biti 'sezam'. A ne 'sezamďň╠┼ž...' kao što bi bilo kad bi u s[0] upisao chr(200).
pascal.656 vitez.koja, -> #652, isekulovic
#=> Dalje na početku procedure mora da se uradi Inline($9c); #=> tj. pushf. Ne mora, čak ne sme. pushf treba ubaciti neposredno pred poziv rutine koja je ranije opsluživala prekid, i to samo ako je pozivaš pointerom na funkciju koji je implementiran u samom jeziku; ako koristoš neki drugi način potivanja, ko zna...
pascal.657 eagle, -> #652, isekulovic
> Dalje na početku procedure mora da se uradi Inline($9c); tj. pushf. Pushf se radi neposredno pre poziva _stare_ procedure, zato što se ista završava sa iret (ret far + popf). Pozivi preko proceduralnog tipa su uvek far, ostaje ti još da pokriješ popf. Ako ne pozivaš staru proceduru ne treba ti ni pushf. > Tada DOS (a i neki programi koji ne koriste dos-ove funkcije za > ocitavanje tastature, npr. TP) stalno poziva prekid $28. QEdit, na primer. Na osnovu čega si zaključio da TP poziva int 28h?
pascal.658 isekulovic, -> #657, eagle
>> QEdit, na primer. Na osnovu čega si zaključio da TP poziva int 28h? Pročitao u nekoj knjizi/časopisu/fajlu ne sećam se više.
pascal.659 peca.st, -> #650, eagle
!-> A kako se inače menja dužina stringa? ;) U, pa ima dosta načina: delete, copy, s1 := s1 + s2... O:) Peđa.
pascal.661 bearboy, -> #600, peca.st
> Kako najbrže staviti pixel na ekran u rezoluciji 640*480*256? > Mem Š$a000:xĆ radi samo do određene granice, zato što, naravno, > obuhvata samo jedan segment od 64k. Dakle, koje su adrese > ostalih segmenata video memorije? A000:x, naravno :) Samo što treba da koristiš rutinu za menjanje stranica. Odmah da odgovorim na sledeće pitanje :) - Skini VGADOC2 sa Sezama, tamo imaš opis dosta video kartica & kako treba na njima menjati stranice.
pascal.662 andrejt,
Ako stavim finddirst('*.*',directory,dir); i posle par puta findnext(dir);write(dir.name); ispisace ne samo direktorijume.Pa pitanje je zasto ne razlikuje te ostale fajlove od direktorijuma ?(ako ih ne razlikuje) A 2. pitanje je dal' postoji neki nacin da ispisuje samo dirove a ne i ostale fajlove(sem da se stavi: if dir.attr = directory then write(dir.name);)?
pascal.663 isekulovic,
Ima li neko Timo Salmijeve unite, ali za TP 6.0?
pascal.664 peca.st, -> #661, bearboy
!-> A000:x, naravno :) Samo što treba da koristiš rutinu za menjanje !-> stranica. Odmah da odgovorim na sledeće pitanje :) - Skini VGADOC2 !-> sa Sezama, tamo imaš opis dosta video kartica & kako treba na !-> njima menjati stranice. Hvala puno, skinuću, ako nešto bude nejasno biću slobodan da priupitam. :). Peđa.
pascal.666 eagle, -> #662, andrejt
> Ako stavim finddirst('*.*',directory,dir); i posle > par puta findnext(dir);write(dir.name); ispisace > ne samo direktorijume.Pa pitanje je zasto ne razlikuje Obične fajlove sa atributom $20 uvek nalazi, a parametar attrib u findnext definiše dodatne flegove koje uzima u obzir, pored pomenutog. Verovatno nije bag u TP-u već tako radi odgovarajuća dosova funkcija.
pascal.667 dejanr, -> #662, andrejt
>> Ako stavim finddirst('*.*',directory,dir); i posle >> par puta findnext(dir);write(dir.name); ispisace >> ne samo direktorijume.Pa pitanje je zasto ne razlikuje >> te ostale fajlove od direktorijuma ?(ako ih ne razlikuje) Tako je napravljena DOS funkcija - imaš mogućnost da maskiraš šta da se *ne* prikazuje ali fajlovi su uvek tu. Dakle, moraće sa IF
pascal.668 andrejt, -> #667, dejanr
===>Tako je napravljena DOS funkcija - imas mogucnost da maskiras sta ===>da se *ne* prikazuje ali fajlovi su uvek tu. Dakle, morace sa IF Ipak nece morati sa IF jer (primetio sam) da ako stavim FindFirst('',Directory,Dir); ... FindNext(Dir); Write(Dir); ... ispisivce samo direktorijume.
pascal.669 andrejt,
Kako da izbacim TSR iz memorije ?
pascal.671 niklaus, -> #668, andrejt
(:> ispisivce samo direktorijume. A ako ne budeš hteo da ne prikazuješ fajlove sa jednim atributom manje (recimo ARS, kada želiš samo Hidden i Direktorijume), moraćeš sa IFom... (:niklaus:)
pascal.670 niklaus, -> #661, bearboy
(:> A000:x, naravno :) Samo što treba da koristiš rutinu za menjanje (:> stranica. Odmah da odgovorim na sledeće pitanje :) - Skini VGADOC2 sa (:> Sezama, tamo imaš opis dosta video kartica & kako treba na njima (:> menjati stranice. Neophodno je (po potrebi) menjati banke video memorije (64kb blokovi), pa se upisuje normalno po apsolutnoj adresi $A000:0000. Ovo za VGADOC2 stoji, valja ga pročitati... (:niklaus:)
pascal.672 predragd, -> #636, markom
> Pazi ovo: Definišem promenljivu VM, tipa ARRAYŠ1..4000Ć OF > BYTE na adresi $B000:$8000, znači na adresi video > memorije. Ako probam da pišem u taj niz, da li će > prijavljivati grešku ? Naravno da hoće. Potrebno je da uz pomoc funkcije, koju sam ti poslao u prethodnoj poruci, konvertuješ segment adresu (u ovom slučaju $B000) u descriptor i tvoj program bi trebalo da radi bez problema. Ako ti ovo nije baš razumljivo, možda će ti primer koji sledi pomoći. Uses Dos; var Descriptor: Word; function Segment_to_Descriptor (RealModeSegment: Word; var DPMISegment: Word): Boolean; var Regs: Registers; begin FillChar (Regs, Sizeof (Regs), 0); Segment_to_Descriptor:=TRUE; With Regs do begin Ax:=$0002; Bx:=RealModeSegment; Intr ($31, Regs); If (Flags and 1) = 1 then š Error in Ax ć Segment_to_Descriptor:=FALSE else š No error ć DPMISegment:=Ax; end; end; begin If Segment_to_Descriptor ($B800, Descriptor) then Mem ŠDescriptor:$0000Ć:=Ord ('A'); end. Peđa.
pascal.673 ppekovic, -> #669, andrejt
>> Kako da izbacim TSR iz memorije ? Ako sam tsr nema opciju uninstall, onda uz pomoć programa mark i release. Nalaze se u arhivi TSR???.zip. Potraži sa dir /s tsr*.*. Paya
pascal.674 andrejt, -> #673, ppekovic
Verovatno sam ja lose postavio pitanje ali to nije ono sto sam ja hteo da znam,mene zanima kako da izbacim svoj tsr iz memorije(uninstall) posto vratim sve int vektore kako su bili.
pascal.675 ndragan, -> #593, vvelisavljev
/ Da video sam. :( Po mom prevodu to znači: "Pristup memoriji pre nego / što je lokalni adresni prostor dodeljem mojoj aplikaciji." Tako Ne, nego _izvan_ lokalnog adresnog prostora dodeljenog aplikaciji. Profurao tarabu, zaglavio u jendek. Bue_ Ndragan
pascal.676 ndragan, -> #611, kriss
/ Glup je, al samo za crt. Inače je kompajler pametan, sad je Ne bih bio siguran. Ko zna šta koja od procedura iz crt.tpu poziva unutar samog crt.tpu? Uostalom, ubaci i neko farbanje ekrana i neko skrolovanje, pa ako se pojave neke nove rutine na mapi, onda znači da ti ipak nije onog prvog puta ubacio ceo crt. Bue_ Ndragan
pascal.677 dragisha, -> #674, andrejt
-> Verovatno sam ja lose postavio pitanje ali to nije -> ono sto sam ja hteo da znam,mene zanima kako da -> izbacim svoj tsr iz memorije(uninstall) posto vratim -> sve int vektore kako su bili. Tako što oslobodiš memoriju koju isti zauzima odgovarajućim DOS pozivima. Prvo korak je da utvrdiš PSP koji je identifikacija tvog programa i kojim su potpisani MCBovi koje owniraš (ha:). Onda nedokumentovanim DOS pozivom 52H uhvatiš head spiska MCB-ova i nađeš svoj (ha2:) MCB. Kad hoćeš da to počistiš, počisti taj nađeni MCB. Mislim da i sljedeći MCB isto treba počistiti, ali najbolje da ovim kodom ispod prođeš *sve* MCBove i da ondak čistiš sve što je potpisano tvojim MCB. Ovo ispod su neki fragmenti koda iz mog TSR modula, a ako to nije dovoljno, mail me za ostatak. Sintaksa [mcb:3] je za mcb=03cH ustvari adresa 03ch:3. PROCEDURE NextMCB(mcb: CARDINAL): CARDINAL; TYPE CP=POINTER TO CARDINAL; BEGIN RETURN (mcb+[mcb:3 CP]^+1); END NextMCB; (* Get PSP *) R.AX:=5100H; Lib.Intr(R, 21H); ProgPSP:=R.BX; (* Current PSP *) (* Get first MCB *) R.AH:=52H; Lib.Intr(R, 21H); s:=[R.ES:R.BX-2 CP]^; (* Nađi MCB od PSP *) WHILE [s:0 BP]^=4DH DO IF [s:1 CP]^=ProgPSP THEN ProgMCB:=s; END; (* Next MCB *) INC(s, [s:3 CP]^+1); END; (* žišćenje. *) R.AH:=49H; R.ES:=ProgMCB+1; (* MCB+1 su podaci, sam Memory Control Block je jedan paragraf prije podataka. *) Lib.Intr(R, 21H); -- [Pave the bay.]
pascal.678 dragisha, -> #677, dragisha
-> počistiš, počisti taj nađeni MCB. Mislim da i sljedeći MCB isto treba -> počistiti, ali najbolje da ovim kodom ispod prođeš *sve* MCBove i da Prvi MCB na koji naletiš je environment, drugi je program. Ili tako nešto:)). Zavisno od toga kako radi heap manager možeš da naletiš na još koji MCB, ali ne vjerujem da će to da ti se desi u TSR. -> ondak čistiš sve što je potpisano tvojim MCB. Tvojim PSP, ali nema veze:)). -- [There are so many upgrades, I am bankrupt.]
pascal.679 luks, -> #663, isekulovic
> Ima li neko Timo Salmijeve unite, ali za TP 6.0? Šta ima u tim unit-ima. Da ne skidam badava?
pascal.680 ognjen, -> #614, markom
)-> Cekaj malo, nadam se da si tu promenljivu FI, definisao kao )-> FILE OF type, a ne kao TEXT, jerbo ako si je tako definisao )-> nije ni cudo sto ti ne radi ;) Naravno!!!! I dalje ne radi! ;( )-> P.S. Uz poruku je program koji SIGURNO radi! Ne radi!!!! Utata... :9 :P :b :) )-> P.P.S. Naravno, podrazumeva se da fajl nije prazan :) Prvo, kad sam mu dao fajl od 32b otptilige ovakav: ------------------ abcd efghijkl 1234 56789000 ------------------ Prijavio je da fajl ima 0 bajtova!!!! Dobro, gledam source, i mislim "Gde li je greska???!?!", ali greske prosto, naprosto, nema!!!!!!!! Jebote (sorry, moram :), kad mu kazem falesize(f) on kaze 0!!!! Kako NULA kad ima TRIDEST I DVA!!!! Dobro, kad sam se malo smirio, :) ubacio sam mu neki TEXTPAD (umesto proba.fil) od 170 Kilobajta, i uradio je isto sranje, kao program koji sam ja ranije napisao... Ispisivao je neke delove fajla... Tad sam uvideo gresku. Definisao si record od 2 stringa nedefinisane duzine... Probao sam da stavim s1, s2: string[5], ali je tad uradio sranje, koje ja u zivotu nisam video... Ispisao je (pomesano) delove fajla, i neke naucnofantasticne karaktere! Odokativno sve zajedno je iznosili 200 bajtova, ali kako 200 (!?!) kad sam mu ja rekao da ispise dva stringa po 5 bajtova.... U cemu je greska ("iksovati" tacan odgovor): [ ] U meni [ ] U programu [ ] U pascalu [ ] U wirthu [ ] Duhovi? [ ] Virus nove generacije? [ ] Nesto sedmo?
pascal.681 ognjen,
Ima li neko elegantnije resenje odo ovoga: var linija: integer; read_lin:string; f: text; bagin pardon, begin ;) assign (f, 'file.ext'); reset (f); while not eof(f) do begin readln(f, read_lin); linija:=linija+1 end; writeln ('U fajlu ima ', linija, 'linija :) '); end. Da se prebroje linije u fajlu?
pascal.682 dejanr, -> #681, ognjen
>> Ima li neko elegantnije resenje odo ovoga: >> ... >> Da se prebroje linije u fajlu? Nema naročito elegantnijih, ali ima bržih. Najlakše je da napraviš jedan bafer, ili sa: var buf: array[1..10000] of byte ili, ako nećeš da opterećuješ data segment, na heap-u (ono sa getmem) i onda: assign (f, 'file.ext'); settextbuf(f,buf[1], 10000); reset(f); Ostalo je isto.
pascal.683 markom, -> #680, ognjen
■■■ [X] U meni <-- tebi ■■■ [ ] U programu ■■■ [ ] U pascalu ■■■ [ ] U wirthu ■■■ ■■■ [ ] Duhovi? ■■■ [ ] Virus nove generacije? ■■■ [ ] Nesto sedmo? Kao prvo, ne možeš sam da napraviš fajl tipa File of <tip>, zato što ni sam ne znam kako to Pascal radi. Napravi jednu proceduru koja će u taj fajl da upiše slog. Filesize NE VRAĆA veličinu fajla u bajtovima, već u slogovima, i to isključivo za tipske i netipske datoteke, tj. neće da radi (prijavljuje grešku) sa fajlovima tipa TEXT. Dakle, ako već pričaš -- utata, ne radi --, moraš i znati neke stvari. Ako budeš imao još ovakvih problema, mailni me pa da ti na mail okačim program ... Marko
pascal.684 ajankovic,
Hi 2 all. Hitno potreban originalni Borlandov paket "Turbo Pascal for Windows v 1.5" Nov ili polovan :) Ponude na mail ..ma wr ajankovic..:) ili na 011/101-728 Sale...
pascal.685 ognjen,
Aha, dakle, malo mi se razbistrilo ono sa recordima... Pascal sâm ubacuje bajtove koji oznacavaju koliko je dugacak record... Npr: ------------------------------ [chr(3)]abc[chr(7)]1234567 ------------------------------ itd... Ali, sta ako imam fajl otprilike ovakvog izgleda: Petar Petrovic Njegos Jovan Bulajic Bulaja isl. ──────┬─────── ───┬── │ └── Nadimak └────────────── Ime (banalan primer) Racunajuci i space char izmedju ova dva recorda... Mogu li ovde da koristim recorde (u pascalu)? Tacnije da li je moguce rad sa recordima primeniti na DBF fajlovima?
pascal.686 kriss, -> #680, ognjen
˙˙ Prijavio je da fajl ima 0 bajtova!!!! Dobro, gledam source, i ˙˙ mislim "Gde li je greska???!?!", ali greske prosto, naprosto, ˙˙ nema!!!!!!!! Jebote (sorry, moram :), kad mu kazem falesize(f) ˙˙ on kaze 0!!!! Kako NULA kad ima TRIDEST I DVA!!!! Eh, gde li mi se samo zaturi taj kod ;) U sred programa stoji jedno Readln(x); -> pri izvršavanju se preskoči (!!?!?!) Kada se stavi još jedno iza ovog prvog -> pita te 2 puta !!!!!!!! Zona sumraka, Turbo Pascal 6.0 :)
pascal.687 nikac, -> #685, ognjen
Imas u nekom od dir-ova poveliki program (i to za c) za rad sa dbf bazama. I lepo neko rece NE MOZES ti da napravis file of nesto. Moze s da napises program koji ce pravi konverziju ascii->file_of. Na primer: ... Readln(S); i:=pos(' ',s)); slog.ime:=copy(s,1,i); s:=copy(s,i,length(s)-i)); slog.prezime:=... ... write(f,slog); ...
pascal.688 peca.st, -> #680, ognjen
!-> U cemu je greska ("iksovati" tacan odgovor): !-> !-> Š Ć U meni Dafinitivno u tebi. :). Najbolje pošalji kompletan source i fajl nad kojim si ga probao (okači uz poruku, zipovano) pa ćemo da vidimo... Peđa.
pascal.689 peca.st, -> #683, markom
!-> Kao prvo, ne možeš sam da napraviš fajl tipa File of <tip>, zato !-> što ni sam ne znam kako to Pascal radi. Pascal to radi ko i svi kompajleri. (i ne samo kompajleri) Slog je jednostavno skup bajtova, on te bajtove upiše u fajl i kraj. To što ti vidiš u fajlu kuke i kvake, to je druga stvar. Svaki broj zauzima 1, 2, ili 4 bajta (zavisno od tipa) pa to kad se pretvori u neki(e) znak(ove) ne izgleda baš kao broj. Peđa.
pascal.690 peca.st, -> #687, nikac
!-> I lepo neko rece NE MOZES ti da napravis file of nesto. Nije da ne može, ali će ići malo teže. :))). Peđa.
pascal.691 markom, -> #689, peca.st
■■■ Pascal to radi ko i svi kompajleri. (i ne samo kompajleri) ■■■ Slog je jednostavno skup bajtova, on te bajtove upiše u fajl ■■■ i kraj. Hmm, mora da sam se pogrešno izrazio. Ovoliko sam i ja zna, ali ajde ti napravi fajl tipa Word i u njega upiši četiri prizvoljna broja, ali ručno iz nekog edi- tora. To sam mislio pod onim da ni meni nije jasno kako Pascal to radi :) Marko
pascal.692 markom, -> #685, ognjen
■■■ Tacnije da li je moguce rad sa recordima primeniti na ■■■ DBF fajlovima? Teško, ali imaš u sezamovom direktorijumu, a i u nekom od FON-ovih TPU(ove) za rad sa DBF fajlovima. Ali ako već radiš iz TP-a, bolje ti je da praviš sam svo- je baze ... Marko
pascal.693 markom, -> #690, peca.st
■■■ Nije da ne može, ali će ići malo teže. :))). Dobro, file of String će lako napraviti, ali ajde napravi file of word... Marko
pascal.694 markom, -> #686, kriss
■■■ ˙˙ nema!!!!!!!! Jebote (sorry, moram :), kad mu kazem ■■■ falesize(f) ˙˙ on kaze 0!!!! Kako NULA kad ima TRIDEST I ■■■ DVA!!!! ■■■ ■■■ Eh, gde li mi se samo zaturi taj kod ;) Nemoj komentarisati nešto što ne znaš. Filesize NE VRAĆA veličinu fajla u bajtovima nego u SLOGOVIMA. FileSize može da vrati 1 i na fajlu od 50 K, ako napraviš toliki slog.. Marko
pascal.696 eagle, -> #686, kriss
> U sred programa stoji jedno Readln(x); -> pri izvršavanju se > preskoči (!!?!?!) Verovatno imaš negde pre toga još neko read ili readln.
pascal.695 eagle, -> #693, markom
> Dobro, file of String će lako napraviti, ali ajde napravi file > of word... Kod stringova moraš uneti i dužinu, i napraviti razmak pre sledećeg stringa. File of word je lako napraviti ako imaš hex editor.
pascal.697 ognjen,
Kad se vec govori o TSR programima, jasno je kako da se startuje na pritisak (bilo kog tastera), ali kako srediti da se startuje na pritisak odredjene kompinacije (Npr: Shft+Shft+Space), a kako da se startuje posle tacno odredjenog vremena...
pascal.698 ognjen, -> #682, dejanr
)-> Nema narocito elegantnijih, ali ima brzih. Najlakse je da )-> napravis jedan bafer, ili sa: )-> ... Da, radi. :) Ali, mogu li sad da znam zasto? :) Mislim, zasto je ovo resenje brze...?
pascal.699 ognjen, -> #683, markom
)-> Kao prvo, ne mozes sam da napravis fajl tipa File of <tip>, )-> zato sto ni sam ne znam kako to Pascal radi. Da, shvatio sam. :( )-> Napravi jednu proceduru koja ce u taj fajl da upise slog. E, to mi ne treba, jer fajl ne pravi _moj_ program, on je vec napraljen (mislim, fajl iz koga se cita), i najvise lici na DBF fajl... )-> Dakle, ako vec pricas -- utata, ne radi --, moras i znati )-> neke stvari. Ok, sorry, pretendovalo je da bude sala... :) )-> Ako budes imao jos ovakvih problema, mailni me pa da ti na )-> mail okacim program ... Ok... :)
pascal.700 andrejt, -> #697, ognjen
Ne znam za ostale ali neke tastere imas na adresi $40:$17 (po bitovima : insert,caps-lock,num-lock,scroll-lock,alt, ctrl,levi shift,desni shift) pa njih mozes da proveris i kad je vise njih pritisnuto,za ostale ne znam :(.Posle tacno odredjenog vremena mozes da ga startujes ako radi na INT 8(ako napravis proceduru koja uvecava neku prom. za recimo 1 i kad dostigne recimo 200 pustis tsr da radi- ovo verovatno moze i bolje ali ne mogu da se trenutno setim niceg pametnijeg.
pascal.701 andrejt, -> #698, ognjen
... ===> Da, radi. :) Ali, mogu li sad da znam zasto? :) Mislim, zasto ===>je ovo resenje brze...? Zato sto inace pri svakom citanju iz fajla on cita char po char, a ovako smesti recimo 512 charova u mem. pa radi sa memorijom sto je mnogo brze.
pascal.702 dejanr, -> #698, ognjen
>> Da, radi. :) Ali, mogu li sad da znam zasto? :) Mislim, zasto >> je ovo resenje brze...? Zato što onako pozivaš DOS za svaki karakter (? ili nekoliko karaktera?) a ovako odmah prenese po 10-tak kilobajta (ili više) pa posle samo čita iz bafera. Dakle, štedi se pakovanje parametara, pozivi DOS funkcija itd. Razlika ume da bude drastićna. Plaćena je i određena cena... u tekst datoteci ne možeš da radiš seek! Osim pomoću trikova ;)
pascal.703 isekulovic, -> #679, luks
>> Šta ima u tim unit-ima. Da ne skidam badava? Gomila stvari, ali veoma malo pametnih. Nažalost pobrisao sam verziju za sedmicu tako da nemam spisak svih procedura. Ono što mene interesuje je procedura SetEnv (kao pandan TP-ove GetEnv).
pascal.704 kriss, -> #694, markom
˙˙ ■■■ Eh, gde li mi se samo zaturi taj kod ;) ˙˙ ˙˙ Nemoj komentarisati nešto što ne znaš. Filesize NE VRAĆA ˙˙ veličinu fajla u bajtovima nego u SLOGOVIMA. FileSize može da ˙˙ vrati 1 i na fajlu od 50 K, ako napraviš toliki slog.. Kao prvo nisam komentarisao filesize, već Bug turbo pascala koji se javljao na 3 (tri) različite mašine. Kao drugo - nema drugo :)
pascal.705 peca.st, -> #691, markom
!-> fajl tipa Word i u njega upiši četiri prizvoljna broja, ali ručno !-> iz nekog edi- Word? žetiri broja? Ovako: Dopiši na kraj tog fajla 8 (4*2) bilo kojih znakova, i, eto, dopisao si mu 4 broja. A koje si brojeve dopisao, znaćeš tako što uzmeš prva dva broja, pa onda druga dva... i prvi od njih pomnožiš (Ord (ch1)) sa 256 i dodaš mu drugi (Ord (ch2)). Peđa.
pascal.706 peca.st, -> #702, dejanr
!-> Plaćena je i određena cena... u tekst datoteci ne možeš da radiš !-> seek! Pa... za šta bi služilo seek u tekstualnoj? Mislim, na koju poziciju bi to trebalo da pomeri pointer? Eventualno da se kao jedna pozicija računa jedan red, ali je to onda teško (nemoguće?) izvodljivo. (zbog promenljive dužine reda) Peđa.
pascal.708 markom, -> #695, eagle
■■■ Kod stringova moraš uneti i dužinu, i napraviti razmak pre ■■■ sledećeg stringa. File of word je lako napraviti ako imaš ■■■ hex editor. Arrrrgggggghhhh!!!! Zar ti nije lakše da napraviš proceduru koja će to da radi? Ja sve vreme o tome pričam bre !! Marko
pascal.709 markom, -> #704, kriss
■■■ Kao prvo nisam komentarisao filesize, već Bug turbo pascala ■■■ koji se javljao na 3 (tri) različite mašine. Kao drugo - nema ■■■ drugo :) Ali to nije bug, to tako radi i gotovo... Marko
pascal.707 markom, -> #699, ognjen
■■■ Ok, sorry, pretendovalo je da bude sala... :) Opraštam ti :) Marko
pascal.710 ognjen, -> #687, nikac
)-> Imas u nekom od dir-ova poveliki program (i to za c) za rad )-> sa dbf bazama. Ne programiram u cu :)
pascal.711 ognjen, -> #688, peca.st
)-> Najbolje posalji kompletan source i fajl nad kojim si ga )-> probao (okaci uz poruku, zipovano) pa cemo da vidimo... Neah. Nije ni bitno, odustao sam od recorda... :)
pascal.712 isekulovic, -> #685, ognjen
>> Tacnije da li je moguce rad sa recordima primeniti na DBF >> fajlovima? Ako ti već treba nešto za rad sa .dbf fajlovima potraži fajl dbasendx.arj uz poruku pc.prog.2 6.632 by pedjak.
pascal.713 isekulovic, -> #697, ognjen
>> ali kako srediti da se startuje na pritisak odredjene kompinacije Npr. shift-ctrl-alt-spc kombinacija. Proveravaš port[$60] i registruješ svako pritiskanje/otpuštanje crtl/shift/alt tastera u nekim Boolean promeljivima, tako da znaš stalno šta je pritisnuto a šta nije. Kad se pritisne space proveriš da li su pritisnuti ctrl i shift i alt i ako jesu treba da se aktivira. >> a kako da se startuje posle tacno odredjenog vremena... Postaviš da procedura na int $08 uvećava neki brojač svaki put kada okine (18.2 puta u sekundi) i kada brojač dostigne neku vrednost tada program treba da se aktivira.
pascal.714 eagle, -> #713, isekulovic
> Postaviš da procedura na int $08 uvećava neki brojač svaki put > kada okine (18.2 puta u sekundi) i kada brojač dostigne neku > vrednost tada program treba da se aktivira. SIgurnije je svaki put pročitati vreme sa 40h:6Ch adrese.
pascal.715 eagle, -> #705, peca.st
> uzmeš prva dva broja, pa onda druga dva... i prvi od njih > pomnožiš (Ord (ch1)) sa 256 i dodaš mu drugi (Ord (ch2)). Obrnuto.
pascal.716 markom, -> #713, isekulovic
■■■ Npr. shift-ctrl-alt-spc kombinacija. Ajde ako te ne mrzi nabaci primer ... Marko
pascal.717 kriss, -> #709, markom
˙˙ Ali to nije bug, to tako radi i gotovo... Nije bug? Ok, možda ti to zoveš nekim drugim imenom, ali to je bag. Sad sam se setio da sam zbog toga i morao da pišem sopstvenu proceduru unos, tako da je definitno taj deo koda transformisan :( Šteta, inače bih ga poslao da se uveriš ;)
pascal.718 ognjen,
Znaci, SetTextBuf() sluzi za izdvajanje dela memorije u koji ce se citati x bajtova fajla... I, prvo se ucita u taj bafer prvih x bajtova, pa kada se oni privedu kraju, sledecih x... do kraja fajla... Jesam li dobro razumeo?
pascal.719 ognjen,
Kako se moze odsvirati neka melodijica u pascalu, ali tako da se ne koristi primitivno sound, nego, da li ima neka komanda, ekvivalentna basic komandi play?
pascal.720 andrejt, -> #719, ognjen
QUOTE>> Kako se moze odsvirati neka melodijica u pascalu, ali tako da QUOTE>>se ne koristi primitivno sound, nego, da li ima neka komanda, QUOTE>>ekvivalentna basic komandi play? Ja mislim da nema niceg slicnog play,ali i sa sound mozes svasta da odsviras ako se potrudis,no imas negde(valjda na FENIXu a verovatno i na jos nekim mestima) neki tpu za odsviravanje pa cu videti da ga skinem i da ti dostavim preko maila.