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.330 ssokorac, -> #325, inesic
─┼┤ dve tehnike, tj kako da kažem programu da malo gleda na miša, a ─┼┤ malo na tastaturu, tj. da očekuje ulaz s obe strane. Pa, recimo ovako repeat if keypressed then case readkey of . . proveravaš tastere koje hoćeš . end; GetMouseXY(x,y); (* ili kako ti se već zove procedura *) If (x in Š1..120Ć) and (y in Š1..30Ć) Then blablabla... until šta_ti_je_već_uslov_za_kraj;
pascal.331 skerl, -> #328, isekulovic
Evo malog objasnjenja: > function xyz (var S:string) : string; Promenljiva koja se na ovaj nacin prenese nekoj f-ji ili proc je globalnog karaktera. Svaka promena njene vrednosti, nakon pozivanja f-je ili proc, ostaje i posle kraja izvrsavanja te f-je ili proc. > function xyz (S:string) : string; U ovom slucaju je promenljiva cisto lokalnog karaktera (u odnosu na f-ju ili proc) kao i svaka njena promena, sto znaci da ce nakon izlaska iz te f-je ili proc parametar imati istu vrednost koju je imalo pre pozivanja te f-je ili proc. Postoji i treci nacin pozivanja f-je ili proc: procedure xyz (var X); Takvi parametri se nazivaju 'netipskim parametrima'. Prednost je u mogucnosti prenosenja promenljivih bilo kog tipa podatake, i bilo koji tip podataka je ispravan. Medjutim, kada se koristi netipski parametar, f-ja ili proc nema informaciju o tipu podataka koje treba da ocekuje pa prihvata sve sto joj se prenese i ocekuje od programera da zna sta radi! Posto je X netipska prom, ona se ne moze direktno koristiti vec se mora deklarisati prom koja mora biti oznacena kao absolute X. Ta nova prom ce biti na istoj adresi kao X. procedure Primer (var X); var Y : integer absolute X; begin writeln (y); (* ispravno; Y je tipa integer *) writeln (x); (* neispravno; X nema tipa *) end; U ovom primeru ce Y biti locirano na istom mestu u memoriji kao X. Tada je moguce koristiti Y umesto X. Izvin'te ako sam oduzio bez potrebe. Pozdrav, Skerl.
pascal.332 peca.st, -> #319, pedjak
!-> Evo ga NDX.PAS žemu služi taj NDX, mrzi me da potrošim 10 sec na skidanje istog! Ozbiljno, čemu služi? P e C a
pascal.333 peca.st, -> #321, inesic
!-> Štad da mu radim? Instaliraj TP6.0 ili još bolje ako nabaviš TP7.0 Jednostavno! P e C a
pascal.334 peca.st, -> #325, inesic
!-> Međutim ono što mi nikako ne dolazi to !-> je kako da kombinujem ove dve tehnike, tj !-> kako da kažem programu da malo gleda na !-> miša, a malo na tastaturu, tj. da očekuje !-> ulaz s obe strane. Pa to je lako. Ne znam kako se zovu procedure iz tog unita ali recimo da se pritisak na levo dugme ošitava sa leftclick (boolean) a za desno rightclick. Onda ti lepo napišeš: repeat ... šovde ne mora nista da stoji, ali mozeć until leftclick or rightclick or keypressed; if (not leftclick) and (not rightclick) then begin ch:=readkey; case ch of #27: .... #13: .... . . . end end else begin if leftclick then .... if rightclick then .... end; Valjda bi ovako trebalo da radi! (tako sam ja koristio sa onim unitom iz Računara) CU P e C a
pascal.335 pedjak, -> #325, inesic
> ono što me je posebno oduševilo je dokumentacija. Ja još nisam > video da neko uloži toliki rad u kreiranje dokumentacije za PD > softver. Ne znam kako bih ja sebe naterao da toliko uradim, a da > mi za to niko ne plati. Hvala... Unit sam prvo uradio za sopstvenu upotrebu, a i dokumentaciju sam uradio čisto zbog sebe, jer dešava mi se da posle mesec dana od pisanja nekog unita, pomalo zaboravim šta sam sve ugradio u njega, zato ja napisah doc kako bi se i ja lako snalazio :) > Međutim ono što mi nikako ne dolazi to je kako da kombinujem ove > dve tehnike, tj kako da kažem programu da malo gleda na miša, a > malo na tastaturu, tj. da očekuje ulaz s obe strane. E, pošto hoćeš da koristiš moj unit, ondak ću ti ja pomognem :) Dakle, provera selektovanja opcija bi mogla da izgleda ovako: . . . repeat repeat levi:=buttonpressed(left); desni:=button(right); until keypressed or levi or desni; if levi and (xpress= nešto ) and (ypress= nešto ) then uradi_to; if desni and (xpress= nešto ) and (ypress= nešto ) then uradi_ovo; if keypressed then begin c:=readkey; if c=#13 then odabrano:=true; if c=bla_bla... . . end; until odabrano; . . . Eto to bi bila prva mogućnost ( to mi je prvo palo na pamet :) pedja
pascal.336 isekulovic, -> #325, inesic
>> Međutim ono što mi nikako ne dolazi to je kako da kombinujem ove >> dve tehnike, tj kako da kažem programu da malo gleda na miša, a >> malo na tastaturu, tj. da očekuje ulaz s obe strane. Ja to radim ovako: repeat until keypressed or buttonpressed(Anybutton); if buttonpressed(Anybutton) then begin repeat until buttonreleased(left+middle+right); ..... end else begin Ch:readkey; ........ end; Ivan ps da iskoristim priliku da se pridružim čestitkama za izvanredan unit, kad videh strelicu u grafičkom modu na hercu oduševih se
pascal.337 dzakic, -> #328, isekulovic
Nešto mi se čini da ti je tu paskal javio ono upozorenje da se ne slaže tip promenljive, jer si u funkciji za parametar stavio string, a pozivaš sa promenljivom koja je tipa string[10]. To se, priznaćeš, razlikuje. Paskal ti ne dozvoljava takvu kombinaciju jer ne zna da li funkcija recimo produžava string ili menja neke znake na poziciji većoj od 10 (koliko je stvarno dug string koji se obrađuje), i zato ti daje upozorenje. Iza string[10] u data segment su smeštene druge promenljive pa to može da napravi svakakve probleme. Kada skloniš var, paskal da bi pozvao funkciju generiše kod koji čitav string kopira na stek. U ovom slučaju se 11 bajtova kopira na stek na kome je predviđeno 256 bajtova i sve lepo radi a i funkcija se ne buni. Ako si ti siguran da tvoja xyz funkcija neće da petlja sa znacima na pozicijama većim od njegove stvarne dužine (odnosno, da neće produžavati string), onda možeš da isključiš 'Strict VAR checking' sa {$V-} i paskal će ti dozvoliti ovakvo prenošenje parametara, na tvoju odgovornost. Samo, nemoj posle da kukaš kad negde zapne i ispostavi da je to problem :)
pascal.338 dzakic, -> #329, dejanr
>> Isto je ako ta konstanta nije navedena "na licinom mestu" nego >> definisana u const sekciji. Ne uvek. U const sekciji se mogu deklarisati konstante i promenljive sa početnom vrednoćšu. Kad se stavi const pi=3.14; kompajler to primi isto kao i C onu #define direktivu (ili šta je već) i samo prilikom kompajliranja vrši replace u tekstu. To je prava konstanta i ne može se pozivati kao argument u funkcijama gde je parametar deklarisan sa VAR. Dok const ime:string[3]='zak'; Napravi PROMENLJIVU ime koja ima početnu vrednost. Tako se i ponaša, kao promenljiva, može da joj se menja vrednost, direktno ili preko procedure. Paskal se ne buni. Dakle, i nije neka konstanta... Njima se odvoji mesto u data segmentu, ali su inicijalne vrednosti snimljene u exe.
pascal.339 isekulovic, -> #329, dejanr
>> Ako u glavnom programu piše aaa:=xyz('x'); onda ovo ne može da >> se prevede, jer kako da se promeni konstanta 'x'. Isto je ako ta Ukapirao sam koja je razlika, ali opet ima malih nejasnoća :) Jasno mi je da ne može da se menja 'x', ali konstanta koja je definisana u deklaracionom delu može. Nije baš najpravilnije i najlogičnije, ali može. Takođe nije mi jasno zašto je funkcija onako definisana (sa var) htela da primi kao ulaz konstantu definisanu kao string, a nije htela definisanu kao string[n].
pascal.340 isekulovic, -> #336, isekulovic
>> repeat until keypressed or buttonpressed(Anybutton); >> if buttonpressed(Anybutton) >> then >> begin >> repeat until buttonreleased(left+middle+right); >> ..... >> end >> else >> begin >> Ch:readkey; >> ........ >> end; Mala ispravka samoga sebe: repeat until keypressed or buttonpressed(Anybutton); if buttonpressed(Anybutton) then begin ...... repeat until buttonreleased(left+middle+right); end else begin Ch:readkey; ............ end;
pascal.341 skerl,
Mali bug u mouse.pas unit-u iz paketa WCTUNITS.ZIP. Funkcija ButtonPressed ne razlikuje ButtonPressed(LeftButton) od ButtonPressed(RightButton). Vraca vrednost kao da je trazeno ButtonPressed(AnyButton). Prilozen je mali demo programcic koji to lepo prikaze (putem cula sluha :). Prvo ga pustite sa starom funkcijom a zatim zamenite staru sa novom pa probajte ponovo. Pojenta demo prog je da kada se pritisne levi taster comp pisti jednom visinom a kada se pritisne desni drugom :) (u kvadratu 72, 0 do 158, 72 sto mu u karakterima dodje 10, 1 do 20, 10) Stara f-ja: FUNCTION ButtonPressed(Mask : word) : boolean; BEGIN Reg.AX := 3; intr(MouseInt, Reg); IF (Reg.BX > 0) THEN ButtonPressed := true ELSE ButtonPressed := false; END; Ovako treba :) FUNCTION ButtonPressed(Mask : word) : boolean; BEGIN Reg.AX := 3; intr(MouseInt, Reg); IF (Mask = 7) AND (Reg.BX > 0) THEN ButtonPressed := true ELSE IF (Reg.BX = Mask) THEN ButtonPressed := true ELSE ButtonPressed := false; END; Pozdrav, Skerl. mousebug.zip
pascal.342 pedjak, -> #332, peca.st
> žemu služi taj NDX, mrzi me da potrošim 10 sec na skidanje istog! Unit za manipulaciju ( čitanje, pretraživanje ... ) dBASE III indeksnih datoteka. pedja
pascal.343 pedjak, -> #328, isekulovic
> Rešio sam, mada mi nije jasno kako. Probelm je bilo što funkcija nije > htela da prihvati onako definisan string, kao 'ulazni'. Rešio sam > tako što sam umesto > > function xyz (var s:string) : string; > > stavio > > function xyz (s:string) : string; > i sve je ok. Sad kad bi mi još neko objasnio razliku. Ja sam živeo u > zabludi E, pa ovako: Prilikom pozivanja funkcija i procedura, koje među listom parametara sadrže i stringove i to takve da se njihove vrednosti prenose po imenu znači procedure xyz(var s:string) onda se prilikom pozivanja procedure negde u programu moraju slagati tip stringa koji učestvuje kao parametar sa opisom parametra u zaglavlju procedure, znači ako u zaglavlju procedure stoji procedure xyz(var s:string) onda pri pozivanju procedure sa recimo xyz(AA); i promenljiva AA mora biti deklarisana kao var AA:string Takođe, mora se paziti na to da promenljive kao što su string, stringŠ10Ć ili stringŠ49Ć nisu istog tipa. Prilikom kompajliranja programa sam kopajler proverava sva takva mesta u programu i ako pronađe da se ne slažu tipovi tekstualnih paramatara sa samim opisom parametara u zaglavljima javlja 'Type mismatch'. Kompajlerskom direktivom š$V-ć se ukida provera tipova tekstualnih promenljivih koje se u funkcije i procedure prenose kao parametri tipa VAR. Znači negde na početku programa staviš š$V-ć i problem je rešen. ------------------- Nevezano za ovu raspravu, moram da naglasim da ako na početku programa napišete nešto poput const s:stringŠ10Ć='blabla' ne dobijate konstantu s. Ovom deklaracijom dobija se promenljiva tipa string maksimalne dužine 10 znakova, kojoj je na samom početku programa postavljena vrednost na 'blabla' i ta vrednost se kasnije u programu može i menjati. Uh završih :)) pedja
pascal.344 ssokorac, -> #331, skerl
─┼┤ Izvin'te ako sam oduzio bez potrebe. Ma kakvi samo piši, ovo je mnogo zgodno a nisam znao :).
pascal.345 dejanr, -> #339, isekulovic
>> Takođe nije mi jasno zašto je funkcija onako definisana (sa var) htela >> da primi kao ulaz konstantu definisanu kao string, a nije htela definisanu >> kao string[n]. Stavi u OPTIONS/Compiler String check relaxed (ili tako nešto) pa će hteti.
pascal.346 skerl,
Da se ne kaze da smo bas skroz ispali iz zbivanja u svetu :) Pozdrav, Skerl. ───────────────────────────────────────────────────────────────────── BP7BUGS1.LST - Version 1 of BP 7.0 bug list This is the first edition of my completely *un*official list of bugs in BP 7.0. It's partly based on bugs in TP 6.0 that weren't fixed in the new release. If you're interested in TP 6 bugs, look for TP6BUGS7.LST, the final release of my TP 6 bug list. There are more limitations to this list than there were to the previous lists, because BP 7.0 is a lot bigger than TP 6.0. I'm unable to test most Windows bugs, so they probably won't end up in this list. Most of my work is in real mode, so there's a definite bias towards bugs there. Finally, I don't do much in TurboVision, and bugs there are a real pain to confirm, so they're not so likely to make it in. (However, there are several TV bugs reported, and I've even included fixes for some.) I'm sure there are errors in this list, and some things that I call bugs are "design limitations" or "as designed". Don't rely on any of the fixes; none of them are official (even if they look like they come from Borland); only Borland can give you official fixes. If you want a reliable list, write to Borland (in particular Zack Urlocker, at Compuserve address 76217,1053 or Internet address 76217.1053@compuserve.com) and complain. Professional tools deserve professional support; a secret bug list, or one maintained by an amateur, is not professional support. The list is very abbreviated; if any of the items are too obscure, ask and I'll expand on them. One abbreviation I've been asked about: "BASM" is the built-in assembler used in asm blocks. The bugs reported here are gleaned from reports from dozens of people. In particular, Morten Welinder has found several new bugs and supplied fixes. Bugs in the list are numbered in order from oldest to newest. However, bugs 1 to 27 are taken from the last TP 6 list; those are more or less in newest to oldest order, because I was too lazy to reverse the list. If you're familiar with an older version of the list, check both the top for late breaking TP 6 bugs and the bottom for new BP 7 bugs.
pascal.347 skerl,
Evo i poslednjeg fajla sa bug-ovima iz TP 6.0 :) Pozdrav, Skerl. P.S. Bulaja, ovo bi moglo da ide upoascal direktorijum jer se nece vise update-ovati. ──────────────────────────────────────────────────────── TP6BUGS7.LST - Version 7 of TP 6.0 bug list This is the last edition of my completely *un*official list of bugs in TP 6.0. TP 7.0 and BP 7.0 were released in November 1992; I'm starting a bug list for those. The first edition (BP7BUGS1.LST) is being released at the same time as this last edition. For this list, I've noted which bugs appear to have been fixed in BP 7.0. There were (at least) two releases both numbered 6.00: the original one in October 1990, and another in June 1991. You can identify the later release by the date or by the file size: TURBO.EXE is 325982 bytes in the later release. Several bugs were fixed in the second release; some of those are marked below. I've also heard of a 6.01 release dated July 1991, but haven't tested any of these bugs against it. The list is very abbreviated; if any of the items are too obscure, ask and I'll expand on them. One abbreviation I've been asked about: "BASM" is the built-in assembler used in asm blocks. Juergen Schlegelmilch sent me a very detailed list of bugs & fixes in TP 6.0 & Turbovision; the file version (TP6BUGSn.ZIP) of this list contains all of his comments. It also contains a few patches and fixes that I've collected. The file version will be available on Fidonet on the PDN Pascal file echo area, and on Internet from garbo.uwasa.fi. It is also available on the PC Techniques section of CLMFORUM on Compuserve in DL 16, as TPBUGS.ZIP. Many other people have sent me their bug lists; thanks to all of them. In particular, some recent additions are from Andy McFarland, Arno Haket, Hans Schleichert, Norbert Juffa, and Jud McCranie. I know I've missed a few recent contributors; sorry!
pascal.348 almi,
treba mi program za tp-for windows koji crta "bar" sa određenim fill-stylom. Puno hvala ALMI.
pascal.349 almi,
jel može neko da mi opiše standardni postupak za crtanje nekih figura u tp for windows Hvala unapred, ALMI CONNECT 2400
pascal.350 skerl,
Jel' nekom bese trebao ovakav program ili se o njemu pricalo jer je vec nadjen, ne pamtim bas toliko :) Ako jeste neka vica da salje. Pozdrav, Skerl. ┌───────────────────────────────────────────────────────────────┐ │ │ │ Documentation for │ │ │ │ TPU2ASM.EXE │ │ │ │ A symbolic disassembler for │ │ Turbo Pascal version 5.0 units │ │ │ │ Copyright (C) 1989 by Per Bent Larsen │ │ All rights reserved │ │ │ │ Version 1.0, March 1989 │ │ │ └───────────────────────────────────────────────────────────────┘
pascal.351 bulaja, -> #347, skerl
│Evo i poslednjeg fajla sa bug-ovima iz TP 6.0 :) │Bulaja, ovo bi moglo da ide u pascal direktorijum │jer se nece vise update-ovati. └─── Hvala! prebaceno je u Pascal direktorijum, a takodje i spisak bugova za BP/TP 7.0 koji si poslao.
pascal.352 mbulat,
Mozda sam i pogresio conf. ali ne znam kako da HANGUPujem modem koji je on-line da li neko zna kako da se to izvedee u paskalu? Pokusavao sam nesto sa obaraŕnjedm DTR-a modema ali neide nesto... :(
pascal.353 d.petrovic, -> #352, mbulat
Ă> Mozda sam i pogresio conf. ali ne znam kako da HANGUPujem modem Možda ti ja odgovaram u pogrešnoj :), (a o paskalu pojma nemam) ali iz dos-a bi to uradio sa echo ath1 > com2: znači vidi koji je com port pa piši na njega, a ako je modam na vezi upiši prvo "+++" <- (nailazi komanda) a ne text, pa "ččč" <- (pauza).
pascal.354 skerl, -> #351, bulaja
>│ Evo i poslednjeg fajla sa bug-ovima iz TP 6.0 :) >│ Bulaja, ovo bi moglo da ide u pascal direktorijum >│ jer se nece vise update-ovati. >└─── > Hvala! prebaceno je u Pascal direktorijum, a takodje > i spisak bugova za BP/TP 7.0 koji si poslao. Nema na cemu. Uskoro stizu i patch-evi za BC ++ 3.1 Pozdrav, Skerl.
pascal.355 pstojanovic,
Napisao sam rezidentan .COM program koji omogucava koriscenje video memorije direktnim pucanjem u nju. Program se kaci na korisnicki prekid 61h i pruza dosta mogucnosti u radu sa video memorijom. Naravno, moze se koristiti iz svih jezika koji pruzaju mogucnost poziva prekida. Program inace zauzima 1.3 KB. Uz program sam prilozio i .NG a evo izvoda svih funkcija koje su za sada definisane : INT 61h,00h - Inicijalizacija video moda & Tekuca verzija programa INT 61h,01h - Crtanje prozora na zadatim koordinatama INT 61h,02h - Ispunjavanje ekrana sa definisanim karakterom INT 61h,03h - Stampa stringa direktno u video memoriju. INT 61h,04h - Setovanje tekuce boje teksta i pozadine INT 61h,05h - Vraca tekucu boju teksta i pozadine INT 61h,06h - Snimanje ekrana sa zadatim koordinatama u bafer INT 61h,07h - Vracanje ekrana na zadate koordinate iz bafera INT 61h,08h - Promena atributa boje u zadatim koordinatama INT 61h,09h - Sencenje prozora u zadatim koordinatama INT 61h,0Ah - Ispunjavanje prozora sa zadatim karakterom INT 61h,0Bh - Vraca karakter i kolor atribut sa zadatih koordinata Normalno je da mozete sami izvesti sve ove funkcije iz bilo kog jezika, ili biblioteke; mislim jednostavno da je ovo jedan od alternativnih pristupa. Hvala unapred na svim komentarima. vmtint61.zip
pascal.356 inesic, -> #335, pedjak
> E, pošto hoćeš da koristiš moj unit, ondak ću ti ja > pomognem :) Lepo od tebe :) ali problem nije tako jednostavan :( > Dakle, provera selektovanja opcija bi mogla da izgleda > ovako: > . > . > . >> repeat > repeat > levi:=buttonpressed(left); > desni:=button(right); > until keypressed or levi or desni; > if levi and (xpress= nešto ) and (ypress= nešto ) then > uradi_to; if desni and (xpress= nešto ) and (ypress= nešto > ) then uradi_ovo; if keypressed then > begin > c:=readkey; > if c=#13 then odabrano:=true; > if c=bla_bla... > . > . > end; > until odabrano; Svi koji su mi replicirali, imali su sličnu ideju, ali to zaista nije tako jednostavno. Hteo bih to da rešim jednom za svagda i da mu se više nikad ne vratim. Prvo, potrebna je procedura (možda još bolje funkcija) koja bi JEDNOZNAžNO vraćala karakter ili šta već, na pritisak nekog tastera na tastaturi. Gledao sam funkciju readAllKeys iz unita xcrt, koji je neko ovde poslao nedavno. Ne zadovoljava, jer daje isti rezultat kad se pritisnu različite kombinacije tastera, npr. Ctrl-[ je isto što i Esc i tome slično. Za izlaz ove funkcije, izgleda, malo je bajt i treba bar dva bajta tj. word. Još uvek nisam siguran kako da napravim ovakvu funkciju, no to je manji deo problema. Problem je što meni nije jasno kako tastatura radi. Kad sam u radnoj okolini TP, i brzo pritisnem F2, F9 i altX i to tako brzo da je altX pritisnuto pre nego je računar obradio F2, on sve jedno lepo uradi što je od njega traženo: snimi editor, kompajlira i na kraju izađe u DOS. Neko mi je rekao da tastatura ima svoj bafer u koji stane 15 tastera i sad, kad TP izvršavajući svoj kod naleti na readKey, on uzme prvi znak sa tastature pa ga obradi. Hoću da kažem kako pritisak na neki taster NE PREKIDA proces koji je upravo u toku. Međutim, kako sebi da objasnim kako rade programi tipa 'sačekajte, upravo se čvari, a ako vas mrzi, pritisnite Esc', drugim rečima kako ovde pritisak na taster PREKIDA proces koji je u toku. Neko mi je objašnjavao da su u pitanju interapti, pa kao postoje hardverski i softverski i na kraju ništa nisam shvatio. Ostalo mi je u glavi da pojedini delovi hardvera mogu da traže od cpu da im hitno obavi neki posao ali i da može da se podesi da se posle nekog vremenskog perioda tj. svako malo generiše interapt koji obustavi tekući proces i baci pogled na hardver (recimo neki merni uređaj). Da najzad pređem na pitanja. Voleo bih da mi neko kaže da li su tastatura i miš delovi hardvera koji mogu da generišu interapt ili se to radi tako što se svako malo veštački generiše neki koji baci pogled na njih (što bi me razočaralo). Da li je moguće napraviti program koji radi samo ono što je meni cilj i ne gubi vreme na tamo neka proveravanja hardvera, sve dok se ovaj sam ne pobuni? Ako je ovo moguće, bi li neko na brzaka sklepao programčić koji recimo u jednom u glu ispisuje bajt koji se inkrementira (tj. broji) i ne radi ništa drugo, a kad pritisnem m on ispiše m u drugom uglu, a kad pritisnem Esc on se vrati u DOS. Naravno, posle svega ništa ne treba da ostane rezidentno. Ima li ko da zna kako da se rešim muke. Ivica P.S. E, da bilo bi poželjno da se uradi u TP 5.5 u stvari, naglasak je na izbegavanju asemblera koliko je to moguće, a ni objektno programiranje nije oblast kojom dovoljno dobro vladam da bih sve odmah shvatio iz nekog takvog primera.
pascal.357 pedjolino,
Imam jedno pitanje pa ako neko ima vremena da mi odgovori. Zanima me kako da napisem neki rezidentni program koji ce nesto raditi kada se pritisne odgovarajuci taster (ili kombinacija). Koji bi vektor trebalo promeniti i uopste nesto o toj temi, ako moze i mali primer...(nadam se da ne trazim suvise). P.S. Kako izbaciti iz memorije program koji je ostavljen u memoriji sa keep.
pascal.358 zolika, -> #357, pedjolino
>> Zanima me kako da napisem neki rezidentni program koji ce >> nesto raditi kada se pritisne odgovarajuci taster (ili kombinacija). >> Koji bi vektor trebalo promeniti i uopste nesto o toj temi, >> ako moze i mali primer...(nadam se da ne trazim suvise). Najbolje je da uzmeš Modulu-2 i u njoj da radiš. Postoji modul TSR u kome su procedure za instaliranje i deinstaliranje rezidentnih programa. Ono što hoćeš da ti tvoj rezidentni program radi napišeš kao proceduru, izabereš kombinaciju tastera na koju će program da se odaziva i u glavnom programu samo pozoveš proceduru Install sa odgovarajućim parametrima. Ništa lakše. Evo i primera... Eh, da: izvinjavam se unapred što su komentari u programu na engleskom, al' to sam se zafrkavao sa asistentom. Program je možda malo dugačak, no tu postoji sve što treba, pa ako još nekome treba nešto slično, nek' analizira: MODULE SeeNoSee; (* This program is supposed to be the resident one, and called by pressing *) (* Alt-Z combination. It writes "Zdravo !" message on the screen and waits *) (* for SPACE to return to DOS. *) FROM TSR IMPORT Install, KBFlagSet, Alt; FROM SYSTEM IMPORT WORD, Registers; FROM Lib IMPORT Intr, IncFarAddr; FROM Str IMPORT Length; CONST ZScan =44; PROCEDURE Resident; (* OVO JE PROCEDURA KOJA SE INSTALIRA KAO REZIDENTNA *) CONST WindowWidth = 20; (* The width and height of the window with the message *) WindowHeight = 7; (* can be easily changed *) BlankScreen = 0720H; (* This is for clearing the screen *) BufferSize = WindowWidth*WindowHeight; LineNumber = 24; ColumnNumber = 80; Message = 'Zdravo !'; AttrScr = 7; (* attribute for the same purpose as BlankScreen *) TYPE BufferType = ARRAY[1..BufferSize] OF WORD; (* For putting the contents of the screen*) Action = (ToScreen, ToBuffer); (* Which action? *) VAR UpperLeftCornerLine, ScrBegin, UpperLeftCornerColumn, MessLine, MessColumn: CARDINAL; (* Where to write the message *) Buffer: BufferType; PROCEDURE TestScr(): CARDINAL; (* This procedure determines (or tries to *) VAR (* determine) the graphics card *) R: Registers; BEGIN Intr(R,11H); IF 4 IN BITSET(R.AX) THEN IF 5 IN BITSET(R.AX) THEN RETURN 0B000H (* Hercules *) ELSE (* Return something I don't know *) END ELSE IF 5 IN BITSET(R.AX) THEN RETURN 0B800H (* EGA/VGA *) ELSE RETURN 0B000H (* Hercules *) END; END; END TestScr; PROCEDURE WaitForSpace; (* This procedure waits for *) VAR R: Registers; BEGIN (* SPACE from the keyboard *) REPEAT R.AH:=0; Intr(R,16H); UNTIL CHAR(R.AL)=' '; END WaitForSpace; PROCEDURE BufferScreen(ScrBegin,Line,Column:CARDINAL; VAR Buf:BufferType; Mode:Action); VAR i, j: CARDINAL; (* this procedure moves block from video memory *) BegAddr: FarADDRESS; (* with Line and Column as coordinates of top- *) BEGIN (* -left-handside corner to Buf or from Buf *) BegAddr:=[ScrBegin: (* which depends on Action. Segment of screen *) 160*(Line-1)+2*(Column-1)]; (* begin is given in the ScrBegin *) FOR i:=Line TO Line+WindowHeight-1 DO FOR j:=Column TO Column+WindowWidth-1 DO IF Mode=ToBuffer THEN Buf[(j-Column+1)+WindowWidth*(i-Line)]:=BegAddr^; (* move to buffer... *) BegAddr^:=BlankScreen; ELSE BegAddr^:=Buf[(j-Column+1)+WindowWidth*(i-Line)]; (* ...or to screen! *) END; IncFarAddr(BegAddr,2); END; BegAddr:=[ScrBegin:160*i+2*(Column-1)]; (* new line *) END; END BufferScreen; PROCEDURE SetCursorPos(row,col: CARDINAL); (* With special thanks to ZJB *) VAR R: Registers; BEGIN R.DH:=BYTE(row); R.DL:=BYTE(col); R.BH:=00H; R.AH:=02H; Intr(R,10H); END SetCursorPos; PROCEDURE WriteAtAttrBIOS(row,col: CARDINAL; ch:CHAR; attr:BYTE); VAR R: Registers; (* Special thanks to ZJB again *) BEGIN SetCursorPos(row,col); R.AL:=BYTE(ch); R.BL:=attr; R.BH:=00H; R.CX:=0001H; R.AH:=09H; Intr(R,10H); END WriteAtAttrBIOS; PROCEDURE WindowBorder(row,col: CARDINAL); (* Put border around the *) VAR (* window *) i: CARDINAL; BEGIN WriteAtAttrBIOS(row,col,'╔',AttrScr); WriteAtAttrBIOS(row,col+WindowWidth-1,'╗',AttrScr); WriteAtAttrBIOS(row+WindowHeight-1,col,'╚',AttrScr); WriteAtAttrBIOS(row+WindowHeight-1,col+WindowWidth-1,'╝',AttrScr); FOR i:=col+1 TO col+WindowWidth-2 DO WriteAtAttrBIOS(row,i,'═',AttrScr); WriteAtAttrBIOS(row+WindowHeight-1,i,'═',AttrScr); END; FOR i:=row+1 TO row+WindowHeight-2 DO WriteAtAttrBIOS(i,col,'║',AttrScr); WriteAtAttrBIOS(i,col+WindowWidth-1,'║',AttrScr); END; END WindowBorder; PROCEDURE PrintMessage(row,col: CARDINAL; M: ARRAY OF CHAR); VAR i: CARDINAL; BEGIN FOR i:=col TO col+HIGH(M)-1 DO WriteAtAttrBIOS(row,i,M[i-col],AttrScr); END; END PrintMessage; BEGIN (* procedure Resident *) ScrBegin:=TestScr(); IF ODD(WindowHeight) THEN UpperLeftCornerLine:=((LineNumber-WindowHeight) DIV 2)+1 ELSE UpperLeftCornerLine:=((LineNumber-WindowHeight) DIV 2) END; UpperLeftCornerColumn:=((ColumnNumber-WindowWidth) DIV 2)+1; BufferScreen(ScrBegin,UpperLeftCornerLine,UpperLeftCornerColumn,Buffer,ToBuffer ); WindowBorder(UpperLeftCornerLine-1,UpperLeftCornerColumn-1); MessLine:=(LineNumber DIV 2)-1; MessColumn:=(ColumnNumber-Length(Message)) DIV 2; PrintMessage(MessLine,MessColumn,Message); WaitForSpace; BufferScreen(ScrBegin,UpperLeftCornerLine,UpperLeftCornerColumn,Buffer,ToScreen ); END Resident; BEGIN (* M a i n *) Install(Resident,KBFlagSet{Alt},ZScan,500); END SeeNoSee. Nadam se da će ovo nekome pomoći...
pascal.360 skerl, -> #357, pedjolino
│ Zanima me kako da napisem neki rezidentni program koji ce │ nesto raditi kada se pritisne odgovarajuci taster (ili │ kombinacija). Koji bi vektor trebalo promeniti i uopste │ nesto o toj temi, ako moze i mali primer...(nadam se da ne │ trazim suvise). │ │ P.S. Kako izbaciti iz memorije program koji je ostavljen u │ memoriji sa keep. └──── Necu da ti pisem program ali evo ti jedna arhiva za pravljenje TSR-ova. Napisana je za TP4.0 ali radi i na visim verzijama kada se izbaci {$T+}. Tu ti je dovoljno objasnjeno a imas i unit za pravljenje istih. Takodje unutra je i program za uklanjanje iz memorije postavljenih TST-ova. Naravno, treba da znas koji je potpis ostavio program. Pozdrav, Skerl. ─────────────────────────────────────────────────────────────────── This package contains all of the necessary tools for the creation of TSR (Terminate and Stay Resident) programs with Turbo Pascal 4.0. Filename Description -------- ------------------------------------------------------ DICE.PAS Unit source code for dice rolling DICE.TPU Compiled unit for dice rolling NODICE.BAT Batch version of the remove program NODICE.PAS Source for unload sample POPDICE.PAS Source code for example POPUP.DOC Document file POPUP.PAS Source code for TSR unit POPUP.TPU Compiled unit for creating TSR programs REMOVE.PAS Universal unloader source code TPOP.ASM Low-level assembler code for creating TSR programs TPOP.OBJ Linkable object module for low-level routines UNHOOK.PAS High-level code for removing a TSR from memory UNHOOK.TPU Compiled unit for unloading stuff UPPRCASE.ASM Assembler routine to convert strings to uppercase UPPRCASE.OBJ Linkabe object module - used by POPDICE.PAS WINDOWS.PAS Simple windowing unit source code WINDOWS.TPU Compiled unit for windowing package tppop16.arc
pascal.361 vitez.koja, -> #357, pedjolino
#=> Imam jedno pitanje pa ako neko ima vremena da mi #=> odgovori. Zanima me kako da napisem neki rezidentni #=> program koji ce nesto raditi kada se pritisne #=> odgovarajuci taster (ili kombinacija). Koji bi vektor #=> trebalo promeniti i uopste nesto o toj temi, ako moze i #=> mali primer...(nadam se da ne trazim suvise). Isto pitanje je neko nedavno postavio ovde... Pogledaj malo po ovoj temi
pascal.362 ssokorac, -> #357, pedjolino
─┼┤ Zanima me kako da napisem neki rezidentni program koji ce ─┼┤ nesto raditi kada se pritisne odgovarajuci taster (ili kombinacija). Stavi jedno ..co find pascal /a (rezident;) Baš sam i ja to isto pitao i dobio par primera...
pascal.363 paki, -> #356, inesic
­> proces koji je upravo u toku. Međutim, kako sebi da objasnim ­> kako rade programi tipa 'sačekajte, upravo se čvari, a ako ­> vas mrzi, pritisnite Esc', drugim rečima kako ovde ­> pritisak na taster PREKIDA proces koji je u toku. Pa, recimo, repeat ...> ...>>čvarenje ...> until krajčvarenja or keypressed; ili slično, u zavisnosti od programa. Dakle, ideja je da proces koji je upravo u toku proverava pritisak na taster. Može i preko interapta, ali teže (valjda).
pascal.364 ssokorac,
Šta ne valja ovde? var font:integer; Begin . . . font:=InstallUserFont('font.chr'); If GraphResult<>GrOK then Halt; SetTextStyle(font,0,5); OutText('Ne radi.'); . . . end. Koji god font stavim posle InstallUserFont, GraphResult bude GrOK ali je font uvek isti, onaj mali, debeli, ružni :) :(.
pascal.365 isekulovic, -> #357, pedjolino
>> Zanima me kako da napisem neki rezidentni program koji ce >> nesto raditi kada se pritisne odgovarajuci taster (ili kombinacija). Potraži datoteku stay42.arc u prošloj (a možda je ipak i u ovoj) conf pc.prog. Takođe je bio u Mom mikru članak o tome, ali ja ne mogu sad da nađem taj broj pošto mi je krš u sobi, ali neko je skoro pitao slično pitanje, pa potraži moj odgovor na to pitanja tamo ćeš naći broj MM-a.
pascal.366 predragd, -> #333, peca.st
> Instaliraj TP6.0 ili još bolje ako nabaviš TP7.0 Jel se kod nas pojavila komercijalana verzija BP 7.0, na bilo kom tržištu. Peđa.
pascal.367 predragd,
Zna li neko novi tel. broj CGIS BBS-a (vlasništvo firme "The Cobb Group", pored ostalih časopisa izdaju i "Inside Turbo Pascal". Hitno mi je potrebno. Peđa.
pascal.368 pedjak, -> #356, inesic
> Prvo, potrebna je procedura (možda još bolje funkcija) koja bi > JEDNOZNAžNO vraćala karakter ili šta već, na pritisak nekog > tastera na tastaturi. Gledao sam funkciju readAllKeys iz unita Probaj sa ovim INT 16H funkcija 00H ==================== žitanje znaka sa tastature Poziv sa: Rezultat: AH=00H AH=SCAN kod karaktera AL=ASCII kod karaktera Tebi je bitan SCAN kod jer on jednoznačno određuje svaki taster na tastaturi. > Neko mi je objašnjavao da su u pitanju interapti, pa kao postoje > hardverski i softverski i na kraju ništa nisam shvatio. Ostalo mi > je u glavi da pojedini delovi hardvera mogu da traže od cpu da im > hitno obavi neki posao ali i da može da se podesi da se posle Ti pojedini delovi hardvera trebali bi da su u stanju da generišu NMI interapt ( nemaskirani interapt ). NMI interapti trenutno prekidaju cpu i zahtevaju izvršenje nekog zadatka. Tipičan primer za NMI je reset cpu-a. > Da najzad pređem na pitanja. Voleo bih da mi neko kaže da li su > tastatura i miš delovi hardvera koji mogu da generišu interapt > ili se to radi tako što se svako malo veštački generiše neki koji > baci pogled na njih (što bi me razočaralo). Da li je moguće Da, tastatura i miš generišu interapte. Svaki put kad pritisneš taster generiše se interapt. > pobuni? Ako je ovo moguće, bi li neko na brzaka sklepao > programčić koji recimo u jednom u glu ispisuje bajt koji se > inkrementira (tj. broji) i ne radi ništa drugo, a kad pritisnem m > on ispiše m u drugom uglu, a kad pritisnem Esc on se vrati u DOS. To što ti tražiš baš ne može tako jednostavno da se izvede, a da se ne prekrše tvoji zahtevi. Mislim da se ovim krše minimalno tvoji zahtevi: uses crt,dos; var kbd2:procedure; kraj:boolean; count:word; š$F+ć procedure keyboard;interrupt; begin case portŠ$60Ć of 50: begin gotoxy(79,1); write('m'); end; 1: kraj:=true; end; inline($9C); kbd2; end; š$F-ć begin clrscr; getintvec($9,čkbd2); setintvec($9,addr(keyboard)); kraj:=false; count:=0; repeat gotoxy(1,1); write(count); inc(count); until kraj; setintvec($9,čkbd2); end. Jel' to što si tražio ? Praktično tvoj program samo odbrojava dok interapti brinu o tome šta je pritisnuto. Ako te još nešto zanima pitaj... pedja
pascal.369 pedjak, -> #357, pedjolino
> Zanima me kako da napisem neki rezidentni program koji ce > nesto raditi kada se pritisne odgovarajuci taster (ili kombinacija). Bilo je skoro u ovoj temi, ali da ponovimo. š$m 1024,0,0ć (* postave se minimalni memorijski zahtevi *) uses crt,dos; var oldint:procedure; š$F+ć (* forsiramo daleke pozive za interapt rutinu *) Procedure brisi;interrupt; begin if (portŠ$60Ć=46) (* ako je pritisnuto ALT-C *) and (memŠ$40:$17Ć and 8 = 8) (* obrisi ekran *) then clrscr; inline($9C); (* PUSH AF *) oldint; (* pozovi stari interapt *) end; š$F-ć Begin GetIntVec($1c,čoldint); (* sačuvaj stari interapt *) SetIntVec($1c,čmain); (* postavi novi *) keep(0); (* program ostaje rezidentan *) End. > P.S. Kako izbaciti iz memorije program koji je ostavljen u > memoriji sa keep. Pa sad to je malko komplikovanije jer standardni paskal set procedura i funkcija ne podržava takve stvari, ali postoje uniti koji rade tako nešto. Najjednostavnije je da pre pozivanja ovakvog programa startuješ program Mark, koji zapamti sadržaj svih vektora i još neke druge sistemske informacije, zatim startuješ svoj program, a kad ti i on dosadi startuješ program Release i time se memorija i interapti vrate u stanje pre zadnjeg Mark-a. Mark i Release imaš na SEZAM-u. pedja
pascal.370 janko, -> #356, inesic
> Prvo, potrebna je procedura (možda još bolje funkcija) > koja bi JEDNOZNAžNO vraćala karakter ili šta već, na > pritisak nekog tastera na tastaturi. Gledao sam funkciju > readAllKeys iz unita xcrt, koji je neko ovde poslao > nedavno. Ne zadovoljava, jer daje isti rezultat kad se > pritisnu različite kombinacije tastera, npr. Ctrl-Š je > isto što i Esc i tome slično. Za izlaz ove funkcije, Da li si probao nešto ovako: function myreadkey : integer; var r: integer; k : char; begin r:=ord(readkey); if k=0 then r := 256+ord(readkey); myreadkey:=r; end; Ovakav pristup je dovoljan za većinu primena, gde ne izmišljaš neke uvrnute kombinacije tastera da ti rade nešto. Ctrl-Š i treba da da ESC. Zašto bi ti to smetalo?
pascal.371 dejanr, -> #366, predragd
>> Jel se kod nas pojavila komercijalana verzija BP 7.0, na bilo kom >> tržištu. Ne znam šta znači "na bilo kom tržištu". Program se prodaje, mislim da ga CET ima. Prodaje se i po exYU, vidim na DECnet-u da ga u Sloveniji dosta koriste.
pascal.372 inesic, -> #363, paki
> Dakle, ideja je da proces koji je upravo u toku proverava > pritisak na taster. Može i preko interapta, ali teže > (valjda). Verujem da je teže, ali bih ipak voleo da mi neko objasni kako, pa da probam. Iz dva razloga, ako program dugo treba da krčka neke brojke, mislim zaista dugo, onda stvarno nema smisla mučiti ga da još i tastaturu proverava, a sem toga voleo bih i da naučim kako se to radi. Ako ima neko ko zna kako i koga ne mrzi, pliz send mesidž hir. Ivica
pascal.373 inesic, -> #358, zolika
> Najbolje je da uzmeš Modulu-2 i u njoj da radiš. Postoji > modul TSR u Pre nego što mi je puko hard (a, ja, Som, prethodno nisam bekapovao) neko je ovde ostavio šerver Modulu-2. Kad sam ponovo oporavio hard i DL celu temu pascal od nje više traga nije bilo. Da li je to obrisano, da li je negde prebačeno, da li je moj SOR zbingovo negde te poruke??? Zašto nema module koja je šerver? Halo, moderatore, da li znaš gde da je tražim? Ivica
pascal.374 inesic, -> #369, pedjak
> š$m 1024,0,0ć (* postave se minimalni > memorijski zahtevi *) Zbog čega ovo > š$F+ć (* forsiramo daleke pozive za interapt rutinu *) i čta ovo uopšte treba da znači, tj. šta su to daleki pozivi? Ivica
pascal.375 peca.st, -> #356, inesic
!-> pobuni? Ako je ovo moguće, bi li !-> neko na brzaka sklepao programčić !-> koji recimo u jednom u glu ispisuje !-> bajt koji se inkrementira (tj. broji) i !-> ne radi ništa drugo, a kad pritisnem m on !-> ispiše m u drugom uglu, a kad pritisnem !-> Esc on se vrati u DOS. count:=0; ch:=''; repeat gotoxy(75,1); inc(count); write(count); if keypressed then begin ch:=readkey; if ch='m' then begin gotoxy(1,1); write(ch); end; end; until ch=#27; Stvarno ne vidim u čemu je problem kod tebe. Ako ti je teško da u toku rada nekog ciklusa ispituješ nešto onda ti teško ima pomoći bez Assm-a i interapta. (pojma nemam kako se sa tim radi). Ovako nemaš nikakvih problema, samo treba ispitivati šta USER hoće, šta je pritisnuo i tako to. Ti bi izgleda hteo da kompjuteru samo objasniš tek onako šta bi ti hteo da radi, e, pa ipak moraš malo da se pomučiš, kompjuter jeste brz, ali nije baš inteligentan dok mu ti ne objasniš kako treba biti inteligentan. ;) Valjda sam ti pomogao. P e C a
pascal.376 pedjolino,
Zahvaljujem se svima na iscrpnim odgovorima u vezi rezidentnih programa. Pozdrav Nenad.
pascal.377 vitez.koja, -> #368, pedjak
#=>> Prvo, potrebna je procedura (mozda jos bolje #=>> funkcija) koja bi JEDNOZNACNO vracala karakter ili #=>> sta vec, na pritisak nekog tastera na tastaturi. #=>> Gledao sam funkciju readAllKeys iz unita #=> INT 16H funkcija 00H #=> Tebi je bitan SCAN kod jer on jednoznacno odreduje svaki #=> taster na tastaturi. Nema potrebe da se maltretiras sa interaptima, mozes da citas direktno sa porta 60h ( Port[$60] u TPu ) i dobijas scan kodove. Svaki taster ima po dva scan koda, jedan kad je pritisnut i drugi kad je otpusten. Scan kodovi su rasporedjeni 'po redu', ESC je 1, '1' je 2, i tako dalje. Detekcija tzv. specijalnih karaktera u TPu je resena upravo sa scan kodovima : npr za strelicu uzbrdo prvo dobijas 0, a zatim 72, sto je njen scan kod. Medjutim, iako tvoj program konstatuje scan kodove sa porta 60h, ipak moras da vodis racuna o baferu, tj. da ga redovno praznis, jer njegovo prepunjenje dovodi do onog odvratnog pistanja.
pascal.378 peca.st, -> #364, ssokorac
!-> font:=InstallUserFont('font.chr'); Prva stvar: ne smeš napisati 'font.chr' već samo 'font'. !-> OutText('Ne radi.'); Druga stvar: Ja ne koristim outtext, ja uvek outtextxy(x,y,s) mada ne vidim zašto bi ovo smetalo. Ne vidim nikakve druge greške, osim ako font ne postoji. P e C a
pascal.379 predragd,
Da li TP 7.0 (ne BP) može da pravi programe koji će se izvršavati u protected modu 286-ice, i da li on može da koristi DLL biblioteke. Peđa.
pascal.380 macak, -> #337, dzakic
█ Medjutim, iako tvoj program konstatuje scan kodove sa porta 60h, █ ipak moras da vodis racuna o baferu, tj. da ga redovno praznis... Mala dopuna ovoga. Najjednostavnije da prvo ispraznis bafer i onda citas scan code. Nesto u ovom stilu: while scancode <> 1 do begin ... registri.ah := $0C; registri.al := 7; intr($21,registri); scancode := port[$60]; ... end; Ovo provereno ne dovodi ni do kakvog pistanja. Sve radi solidno i kada je tastatura ubrzana.
pascal.381 dejanr, -> #379, predragd
>> Da li TP 7.0 (ne BP) može da pravi programe koji će se izvršavati >> u protected modu 286-ice Ne. >> i da li on može da koristi DLL biblioteke. Ne.
pascal.382 ssokorac, -> #378, peca.st
─┼┤ Prva stvar: ne smeš napisati 'font.chr' već samo 'font'. Probao i tako, ali neće :(. ─┼┤ Druga stvar: Ja ne koristim outtext, ja uvek outtextxy(x,y,s) mada ─┼┤ ne vidim zašto bi ovo smetalo. Ma, to nema nikakve veze...
pascal.383 ppekovic, -> #373, inesic
>> Halo, moderatore, da li znaš gde da je tražim? Pogledaj u temi jezici. Paya
pascal.384 pedjak, -> #364, ssokorac
> . > . > font:=InstallUserFont('font.chr'); <= ovde je greška > If GraphResult<>GrOK then Halt; > SetTextStyle(font,0,5); > OutText('Ne radi.'); > . Probaj ovako: font:=InstallUserFont('font'); Znači treba ime bez ekstenzije. P.S. ime fonta može biti najviše četiri znaka.
pascal.385 bearboy, -> #286, paki
║ Ma to je lako uraditi, ali tu sliku prvo treba da nacrtam. A recimo ║ da je crtam u PaintBrushu ili nečemu sličnom, morao bih da je snimam ║ u .PCX, da je učitavam iz TP, crtam, skidam u file i tek onda ║ ubacujem u moj program... Ovo je primenljivo na 3-4 sprajta, ali za ║ dvadesetak komada postaje pravo mučenje.Ako neko zna(ima) bolje ║ rešenje ili program, nek mi kaže. Fala... Jel' za SPRITES.TPU ? Ako jeste, najbolje je koristiti .CEL-ove Autodesk Animatora... A on ti radi sa GIF-ovima, tako da nema problema, a i sam ima lepe alatke za crtkanje...
pascal.386 bearboy, -> #293, ssokorac
║ ─┼┤ Pa to čudo bi bilo lepo da se okači ovde, ako nije problem :)) ║ ║ Ja bi vrlo rado, ali kao što rekoh, autor je bearboy, pa ako on smatra da ║ je pd i da je dostupno svima, on će i poslati. Ja ne mogu. Još ne :) Prvo da završim stvar, da stignem do verzije 2.0, da se izda SUPI 4 (ili više), pa ćemo da vidimo šta možemo... PS. Stasho, jesi li izabrao neki .MOD ? Mislim da sam pronašao način da linkujem .MOD u sam .TPU...
pascal.387 bearboy, -> #311, paki
║ Bearboy, reci da li si voljan da šilješ ili da upadam kod Staše u ║ stan i nosim unit sa sve hard diskom ;)) ║ Šalu na stranu, reci da li je to tvoje čedo pd&sw ili da se snalazimo... Moraćeš da upadaš :) A i inače, ne bi ti mnogo vredelo pošto unit pri startanju ispisuje nešto kao 'Sound Routines 4 SUPI 4', tako da nije bash previše korisno za druge programe...
pascal.388 wizard, -> #387, bearboy
>> unit pri startanju ispisuje nešto kao 'Sound Routines 4 SUPI 4', Jel to znači da taj SUPI neće da radi pod DV-om? No, ionako ih nisam igrao, nisam mogao da se naviknem na user-interface. :)
pascal.389 ndragan, -> #372, inesic
/ neke brojke, mislim zaista dugo, onda stvarno nema smisla mučiti A da jednom u hiljadu i(s)teracija zaviri u bafer tastature?
pascal.390 vvelisavljev,
Jel ima neki trik da proverim da li je disketa u drajvu? Ne bi da mi se, ako iz programa pozovem npr. COPY *.* A: , pojavi ono čuveno: Abort, Retry, Ignore.
pascal.391 pedjak, -> #377, vitez.koja
> sa porta 60h ( PortŠ$60Ć u TPu ) i dobijas scan kodove. Svaki taster ima > po dva scan koda, jedan kad je pritisnut i drugi kad je otpusten. Scan Nee... Svaki taster ima samo jedan SCAN kod. Njegova vrednost ide od 1-127. Ukoliko je taster pritisnut onda je sedmi bit resetovan, a ako je taster pušten onda je setovan. Zato se scan kodovi za pritisnut i otpušten taster razlikuju za 128. > Detekcija tzv. specijalnih karaktera u TPu je resena upravo sa scan > kodovima : npr za strelicu uzbrdo prvo dobijas 0, a zatim 72, sto je žini mi se da baš to nije tako... Mislim da ReadKey u TP-u radi preko MS-DOS interapta, funkcija 01H ( ulaz znaka sa ehom ) function ReadKey:char;assembler; asm mov ah,01h int 21h end; Probaj ovu funkciju, radi identično kao i ugrađena. > Medjutim, iako tvoj program konstatuje scan kodove sa porta 60h, > ipak moras da vodis racuna o baferu, tj. da ga redovno praznis, jer > njegovo prepunjenje dovodi do onog odvratnog pistanja. Da, svakako. Zato je bolje da se očitavanje tastera vrši preko DOS ili BIOS interapta, jer onda ne moraš da brineš o takvim stvarima... pedja
pascal.392 pedjak, -> #374, inesic
>> š$F+ć (* forsiramo daleke pozive za interapt rutinu *) > i čta ovo uopšte treba da znači, tj. šta su to daleki pozivi? $F direktiva utiče na pozivanje procedura i funkcija pri generisanju mašinskog koda. Daleki pozivi su takvi pozivi kada se potprogram poziva navođenjem kompletne segment:ofset adrese, dakle : CALL seg:ofs Ovom naredbom se na stek stavlja trenutna vrednost CS i IP registra, a zatim se skače na navedenu adresu. Pri završetku potprograma u glavni program se vraćamo pomoću RETF naredbe, koja skida sa steka prethodno stavljene vrednost CS i IP registra. Bliski pozivi potprograma se dobijaju navođenjem samo ofsetnog dela adrese potprograma. Iz ovog proističe da se potprogram mora nalaziti u okviru istog kodnog segmenta. Zašto se ova $F direktiva koristi ? Pa ima slučajeva u kojima se mora kompajleru narediti, kako će da pozove potprogram ( inače kompajler će to učiniti po nekom svom nahođenju ) Daleki pozivi moraju postojati pri pozivanju sopstvenih Exit procedura, eksternih procedura i interapt procedura ( za ovo zadnje nisam siguran, u nekim slučajevima radi i bez toga, ali bolje je staviti, 'leba ne jede ) inače će se program 'ladno zakucavati. Ako te još nešto interesuje o organizaciji koda koji generiše TP slobodno pitaj, tu sam... pedja
pascal.393 pedjak, -> #364, ssokorac
> font:=InstallUserFont('font.chr'); Sad sam primetio. Ime fonta se sastoji od najviše 4 slova i ime se piše bez ekstenzije. Drugo font ti se mora nalaziti u tekućem diru. Najverovatnije je tu greška ( banalno, šta ćeš :) pedja
pascal.394 dejanr, -> #390, vvelisavljev
>> Jel ima neki trik da proverim da li je disketa u drajvu? Pogledaj 6.28 u ovoj konferenciji.
pascal.395 peca.st, -> #382, ssokorac
!-> Probao i tako, ali neće :(. E, pa onda ti nešto nije u redu sa fontom. Odakle si ga uzeo? Ja sam nabavio onih pet fontova, valjda od QPro-a i oni lepo rade. Nikakvih problema nije bilo iz prve su proradili. P e C a
pascal.396 peca.st, -> #384, pedjak
!-> font:=InstallUserFont('font'); !-> Znači treba ime bez ekstenzije. Eh, to mu rekoh i ja, ali on kaže da nije. P e C a
pascal.397 drmarke,
Hitno potreban program koji bi OAK-067VGA karticu switch-ovao u Hercules rezoluciju. Nešto slično radi SVM89 za Trident kartice ali mi treba za žAK. Imam program koji je pisan u Pascal-u za Hercules pa mi i pored EGAVGA.BGI fali parče slike. Ako neko ima ideju kako bi se ova glupost prevazišla nek napiše neki red. Pozdrav DrMarke
pascal.398 dzakic, -> #392, pedjak
>> mora kompajleru narediti, kako će da pozove potprogram ( inače >> kompajler će to učiniti po nekom svom nahođenju ) Daleki pozivi Neće baš po nahođenju. Sve procedure iz istog junita smeštene su u segment i pozivaju se sa NEAR. Procedure iz drugih junita se pozivaju kao FAR jer svaki junit dobije svoj code segment. Za interapt procedure se ne mora naglašavati da su far, podrazumeva se. One se završavaju sa RTF - da pokupe i flegove.
pascal.399 darone, -> #397, drmarke
>> Imam program koji je pisan u Pascal-u za >> Hercules pa mi i pored EGAVGA.BGI fali parče >> slike. Ako neko ima ideju kako bi se ova glupost >> prevazišla nek napiše neki red. Evo ti jedan VGAMODE, za OAK 037, možda proradi. darone p.s. radi istu stvar ko i SVM89, ali ovde posle promene resetuj mašinu. vgamode.arj
pascal.400 inesic, -> #389, ndragan
> A da jednom u hiljadu i(s)teracija zaviri u bafer > tastature? Pa to bi, povrh svega, značilo da treba da postavim i brojač koji treba da odbroji tih 'iljadu i(S)teracija. To je gubljenje dragocenih femtosekundi.
pascal.401 vitez.koja, -> #391, pedjak
#=>> Svaki taster ima po dva scan koda, jedan kad je #=>> pritisnut i drugi kad je otpusten. #=> Nee... Svaki taster ima samo jedan SCAN kod. #=> Zato se scan kodovi za pritisnut i otpusten taster #=> razlikuju za 128. Protivrecis sam sebi :) Ali nema veze. Mislili smo na isto.
pascal.402 vitez.koja, -> #390, vvelisavljev
#=> Jel ima neki trik da proverim da li je disketa u drajvu? #=> Ne bi da mi se, ako iz programa pozovem npr. COPY *.* A: #=> , pojavi ono cuveno: Abort, Retry, Ignore. Probaj sa DiskSize, ako vrati smislenu vrednost znaci postoji disketa. Inace, 'ono cuveno' mozes da izbegnes tako sto ces da stavis {$I-} na pocetak i {$I+} na kraj kriticnog bloka naredbi - iskljucujes automatsku kontrolu I/O gresaka. Pri tom je zdravo da motris na promenljivu IOResult - ako nije 0 nesto ne valja...
pascal.403 pedjak, -> #387, bearboy
> Moraćeš da upadaš :) A i inače, ne bi ti mnogo vredelo pošto unit pri > startanju ispisuje nešto kao 'Sound Routines 4 SUPI 4', tako da nije bash Jel može nešto da mi se razjasni ? Nisam pratio baš ovu raspravu pa reko da proverim. Dakle, bear šta si ti to napravio ? Unit za sviranje .MOD fajlova na PC zujalici ? Ako nije tajna, na kom principu radi ? pedja
pascal.404 pedjak, -> #390, vvelisavljev
> Jel ima neki trik da proverim da li je disketa u drajvu? Bilo je već od ranije: repeat writeln ('Ubaci disketu'); readln (dummy1); size:=disksize (diskno); until size>0; pedja
pascal.405 ssokorac, -> #388, wizard
─┼┤ Jel to znači da taj SUPI neće da radi pod DV-om? No, ionako ih nisam ─┼┤ igrao, nisam mogao da se naviknem na user-interface. :) Da l' će da radi pod DV-om - nemam pojma, probaću kad ga napravim do kraja :). Ali user-interface je poptpuno drugačiji od starih. EGA/mouse. :)
pascal.406 ssokorac, -> #396, peca.st
─┼┤ Eh, to mu rekoh i ja, ali on kaže da nije. Štos je u onome - max 4 slova. Izem ti dužinu :), ali thanks, pedjak!
pascal.407 ssokorac, -> #393, pedjak
─┼┤ Najverovatnije je tu greška ( banalno, šta ćeš :) Bio je u pravom direktorijumu, fazon je u ona 4 slova... Zašto baš 4, tj. samo 4 ?
pascal.408 ssokorac, -> #395, peca.st
─┼┤ onih pet fontova, valjda od QPro-a i oni lepo rade. Nikakvih problema ─┼┤ nije bilo iz prve su proradili. Sam sam ih pravio :). Tj. GA pravio, jer je samo jedan.
pascal.409 ssokorac, -> #403, pedjak
─┼┤ reko da proverim. Dakle, bear šta si ti to napravio ? Unit za ─┼┤ sviranje .MOD fajlova na PC zujalici ? Ako nije tajna, na kom Još bolje. SVira u backgroundu.
pascal.410 pedjak, -> #401, vitez.koja
> Protivrecis sam sebi :) Ali nema veze. Mislili smo na isto. Da sad videh... :) Ali nema veze sporazumeli smo se. pedja
pascal.411 pedjak, -> #398, dzakic
> Neće baš po nahođenju. Sve procedure iz istog junita smeštene su ========= Pa dobro, nisam upotrebio pravu reč :)) Sve što stoji u tvojoj poruci je sasvim tačno, na to sam i mislio, ali se nisam dobro odrazio :) pedja
pascal.412 predragd, -> #381, dejanr
> Ne. > >>> i da li on može da koristi DLL biblioteke. > > Ne. Hvala ti na odgovoru zbog kog nisam baš sretniji ali šta se tu može, kad dođe BP biće drugačije. Koje su još razlike između TP i BP (7.0 naravo), pored navedenih. Peđa.
pascal.413 predragd, -> #386, bearboy
> PS. Stasho, jesi li izabrao neki .MOD ? Mislim da sam > pronašao način da linkujem .MOD u sam .TPU... Izvinjavam se što se mešam, ali ako vas interesuje postoje procedure za TP ili TC za korišćenje *.MOD-ova. Nisu baš sjajne ali rade, pa ako vam zatrebaju ... Peđa.
pascal.414 dejanr, -> #412, predragd
>> Koje su još razlike između TP i BP (7.0 naravo), pored navedenih. Pa, glavna razlika je što BP može da generiše Windows aplikacije dok je TP 7 ograničen na DOS. Možda će te zanimati da pogledaš preliminarni prikaz Pascala 7.0 u prošlim "Računarima"
pascal.415 vasic, -> #398, dzakic
Cccc, Zače, grdiš čoveka zbog nepreciznosti, a pogledaj samo šta si ti sam napisao: > Neće baš po nahođenju. Sve procedure iz istog junita smeštene su > u segment i pozivaju se sa NEAR. Procedure iz drugih junita se > pozivaju kao FAR jer svaki junit dobije svoj code segment. Znači, ako neku proceduru zovem iz njenog unit-a, biće generisan near call, a ako istu proceduru pozovem odnekle spolja to će biti far call. Ne znam zašto, ali mi to ne deluje kao mehanizam koji bi radio duže od par nanosekundi. :))
pascal.416 pedjak, -> #407, ssokorac
> Bio je u pravom direktorijumu, fazon je u ona 4 slova... Zašto baš 4, tj. > samo 4 ? Pa mora i Borland negde da zezne stvar :)) pedja
pascal.417 pedjak, -> #405, ssokorac
> Da l' će da radi pod DV-om - nemam pojma, probaću kad ga napravim do kraja Jel' mogu već sad rezervišem mesto u budućoj grupi za testiranje novog SUPI-ja, a ? Ajde sredi mi :)) pedja
pascal.418 pedjak, -> #409, ssokorac
> Još bolje. SVira u backgroundu. Sjajno ! A jel' može da se dobije neki demo koji koristi taj unit, ako već ne može sam unit. Voleo bih da čujem kako zvuči. pedja
pascal.419 pedjak, -> #405, ssokorac
> :). Ali user-interface je poptpuno drugačiji od starih. EGA/mouse. :) A da li će raditi na Herc/mouse ? pedja
pascal.420 skerl,
Mala pomoc pocetnicima pri ucenju Pascal-a. Pogotovo pri pregledanju i shvatanju demo programa kao i onih koje nisu sami pisali. Pozdrav, Skerl. ───────────────────────────────────────────────────────────── January 1, 1993 Turbo Identity Version 1.0 A HyperSource Utility for Turbo Pascal v.6.0 (C) Copyright 1993 by Vladimir Jacko. All Rights Reserved. OVERVIEW TI offers the HyperText information from TP 6.0 source code. TI finds a definition for each identifier used in a program. It was designed as a utility to help beginners to read and understand the demonstration programs. REQUIREMENTS Borland's Turbo Pascal(R) version 6.0 A mouse is desirable The following files are supplied: TI.EXE The HyperSource utility TI.DOC This one This is a test version. It was released as I'd like to know other people's opinions. ti01.zip
pascal.421 ilazarevic,
U kojoj rezoluciji, po difoltu, radi TP program ako je BGI drajver EGAVGA?
pascal.422 ilazarevic,
Kako da ispraznim bafer tastature?
pascal.423 lovro, -> #413, predragd
> Izvinjavam se sto se mesam, ali ako vas interesuje postoje > procedure za TP ili TC za koriscenje *.MOD-ova. Nisu bas sjajne > ali rade, pa ako vam zatrebaju ... Bilo bi lepo od tebe, pa ako ih imas... Lovro
pascal.424 dzakic, -> #415, vasic
>> Znači, ako neku proceduru zovem iz njenog unit-a, biće generisan >> near call, a ako istu proceduru pozovem odnekle spolja to će biti >> far call. Naravno da ne. Pravi se razlika između dve vrste procedura: prve su "interface" procedure, one moraju biti far i tako se pozivaju bilo iz drugog bilo iz tog istog junita, dok su 'lokalne' procedure near jer se pozivaju samo iz tog junita. Da ne zalazimo sad u overlay-e, tu moraju sve da budu far. Ma sve je jasno, možda je i bilo neprecizno, ali sam hteo da kažem da to sve nije baš toliko proizvoljno već se tačno zna kako se šta poziva...
pascal.425 dzakic, -> #422, ilazarevic
>> Kako da ispraznim bafer tastature? var kbdhead: word absolute $40:$1A; kbdtail: word absolute $40:$1C; begin kbdtail:=kbdhead; end.
pascal.426 mjova, -> #422, ilazarevic
> Kako da ispraznim bafer tastature? možeš na dva nalina. jedan je relativno jednostavan: uzimaš znak iz bafera dokle god ga ima (prvo proveriš da li ima nešto u baferu), a drugi je malo teži ali brži: izjednačiš početak i kraj bafera (pogledaj u nekom helpu kako da nađeš ove adrese).
pascal.427 pedjak, -> #413, predragd
> Izvinjavam se što se mešam, ali ako vas interesuje postoje > procedure za TP ili TC za korišćenje *.MOD-ova. Nisu baš sjajne ali > rade, pa ako vam zatrebaju ... Trebaju meni. Šalji.... pedja
pascal.428 vitez.koja, -> #422, ilazarevic
#=> Kako da ispraznim bafer tastature? //na pocetku programa {$X+} - TP 6.0 Procedure ClearKBD; begin while keypressed do readkey end;
pascal.429 vvelisavljev, -> #404, pedjak
> Bilo je već od ranije: Izvinjavam se. Hvala svima! Šljaka OK.
pascal.430 peca.st, -> #421, ilazarevic
!-> U kojoj rezoluciji, po difoltu, radi TP !-> program ako je BGI drajver EGAVGA? 640*480*16 P e C a