PCPROG.4

22 Apr 1994 - 05 Jan 1995

Messages - cccc

cccc.316 pedjak, -> #308, .ken.
> Preko biosa koliko sam ja shvatio ne moze vise od 9600 > Gde je caka? Caka je u tome što se brzina postavlja direktno preko portova.
cccc.317 mmitrovic, -> #309, omega
Ů█▀█Ţ Novaboja=staraboja>>2 je ok. Silly of me, :) naravno da može. Neviđena glupost s moje strane. :)
cccc.318 omega,
Da li se za alociranje preko huge pointera koristi farmalloc? I da, kako da ucitam blok od recimo 150kb u tako alociran prostor? Probah preko fread i nesto ne ide...
cccc.319 vcalic, -> #318, omega
>> Da li se za alociranje preko huge pointera koristi farmalloc? >> I da, kako da ucitam blok od recimo 150kb u tako alociran >> prostor? Probah preko fread i nesto ne ide... žini mi se da farmalloc ne alocira memoriju u jednom kontinualnom bloku. Probaj sa farcalloc, mislim da će raditi. Vlada
cccc.321 postmast,
From: smilic@fon (Sasa Milic) Subject: Re: Windows / memorija Date: Tue, 13 Sep 1994 12:05:25 GMT Pajic Srdjan (ps26989d@buefhp.etf.bg.ac.yu) wrote: : Ovih dana sam poceo da prtcham po Windowsima, pa mi ne zamerite na : neiskustvu... : Zanimaju me dve stvari: : 1) Rad sa memorijom. Koliko sam uspeo da ukopcam, sve ide preko GlobalAlloc() : i LocalAlloc() funkcija, pa onda petljanje sa premestanjem blokova memorije, : itd. To valjda radi i u standardnom i u enhansed modu. E, mene zanima da li : se i u 386 Enhansed modu moram sa time da se davim? Imam li tamo flat : memoriju? Ako toga nema u Win 3.1, ima li u Win NT (tj. flat memorijski : model), ili u Win32s ? Moras i u 386 enh. modu time da se bavis. U principu mozes da koristis i malloc() i sl. iz C-a, ali ako koristis Windows alokaciju sistem ce moci da radi relokaciju blokova koje si alocirao (pod uslovom da nisi flegovima iskljucio). Ti nemas sta da se brises oko relokacije ili kompakcije, ali svaki put kad hoces da radis sa tim blokom moras da preko hendla zatrazis adresu (pri cemu ga sistem fiksira u memoriji), a kad ti privremeno netreba da ga odblokiras (pod uslovom da u bloku nema pointera; u tom slucaju kod alokacije moras da kazes da blok ne sme da se pomera). U NT-u bi trebalo da bude flat m.m., ali bolje neka napise neko ko je radio sa time. : 2) Kako da iz Win aplikacije pokrenem drugu aplikaciju? Znam da je pitanje : trivijalno, al' za system() u helpu pise da ne moze da se koristi : pod Windowsima... :( Imas nesto kao Exec(), ne mogu sad da se setim, al' ako ti niko ne odgovori do sutra, smatraj da cu ti ja odgovoriti. Sasa
cccc.320 postmast,
From: ps26989d@buefhp.etf.bg.ac.yu (Pajic Srdjan) Subject: Windows / memorija Date: Tue, 13 Sep 1994 11:40:54 GMT Ovih dana sam poceo da prtcham po Windowsima, pa mi ne zamerite na neiskustvu... Zanimaju me dve stvari: 1) Rad sa memorijom. Koliko sam uspeo da ukopcam, sve ide preko GlobalAlloc() i LocalAlloc() funkcija, pa onda petljanje sa premestanjem blokova memorije, itd. To valjda radi i u standardnom i u enhansed modu. E, mene zanima da li se i u 386 Enhansed modu moram sa time da se davim? Imam li tamo flat memoriju? Ako toga nema u Win 3.1, ima li u Win NT (tj. flat memorijski model), ili u Win32s ? 2) Kako da iz Win aplikacije pokrenem drugu aplikaciju? Znam da je pitanje trivijalno, al' za system() u helpu pise da ne moze da se koristi pod Windowsima... :(
cccc.322 djelovic, -> #320, postmast
> 1) Rad sa memorijom. Koliko sam uspeo da ukopcam, sve ide preko GlobalAlloc() > i LocalAlloc() funkcija, pa onda petljanje sa premestanjem blokova memorije, > itd. To valjda radi i u standardnom i u enhansed modu. E, mene zanima da li > se i u 386 Enhansed modu moram sa time da se davim? Imam li tamo flat > memoriju? Ako toga nema u Win 3.1, ima li u Win NT (tj. flat memorijski > model), ili u Win32s ? U 386Enh modu ne moraš da razmišljaš o tome, već možeš da koristiš standardno malloc () i free (), mada to zavisi i od kompajlera koji koristiš. Flat memorijski model još uvek nemaš. > 2) Kako da iz Win aplikacije pokrenem drugu aplikaciju? Znam da je pitanje > trivijalno, al' za system() u helpu pise da ne moze da se koristi > pod Windowsima... :( WinExec.
cccc.323 smarkov, -> #318, omega
> Da li se za alociranje preko huge pointera koristi farmalloc? > I da, kako da ucitam blok od recimo 150kb u tako alociran > prostor? Probah preko fread i nesto ne ide... Za prostor duzi od 64k mora se upotrebuti __halloc. Za ispravnu pointersku aritmetiku ptr je sa __huge kvalifikatorom (inace bi se "vrteo" unutar 64k). Dole je (nadam se :) ) working example : /* Msc C */ #define OVER64K_BUFFLEN (150*1024L) #define READ_AT_ONCE (4*1024) char __huge *hPtr; int remain; hPtr = __halloc(OVER64K_BUFFLEN, 1); for(remain=OVER64K_BUFFLEN; remain>0; ) { n = fread(hPtr, 1, READ_AT_ONCE, fp); hPtr+=n; remain-=n; } pozdrav, smarkov
cccc.324 omega, -> #319, vcalic
Ţ Cini mi se da farmalloc ne alocira memoriju u jednom kontinualnom Ţ bloku. Probaj sa farcalloc, mislim da ce raditi. Ne, daje potpuno iste rezultate. U medjuvremenu sam otkrio u cemu je stos :) Huge pointer MORA da se definise u okviru main(), i takodje, MORA da se upotrebljava read, a ne fread. To su bar moja zapazanja... A da, ne rekoh zasto je huge pointer neverovatno zgodan za upravljanje velikim blokovima - moze jednostavno da se ikrementira, bez ikakvog razmisljanja o segmentima.
cccc.325 omega, -> #323, smarkov
Ţ Za prostor duzi od 64k mora se upotrebuti __halloc. E sad, kad bih ja znao koji je ekvivalent u BC++ :( Pretpostavljam farcalloc. Ja sam probao (ne tvoj primer) sa farmalloc i radilo je!? Btw, za sta sluze jedna donja crta, odnosno dve donje crte pre imena funkcija? Mislim, obicno sve funkcije postoje u tri oblika: __f. _f i f. U cemu je stos? P.S. U svakom slucaju, hvala.
cccc.326 vcalic, -> #320, postmast
>> 1) Rad sa memorijom. Koliko sam uspeo da ukopcam, sve ide preko >> GlobalAlloc() i LocalAlloc() funkcija, pa onda petljanje sa premestanjem >> blokova memorije, itd. To valjda radi i u standardnom i u enhansed modu. >> E, mene zanima da li se i u 386 Enhansed modu moram sa time da se davim? >> Imam li tamo flat memoriju? Ako toga nema u Win 3.1, ima li u Win NT (tj. >> flat memorijski model), ili u Win32s ? GlobalAlloc ti služi za alokaciju memorije sa tzv. Global Heap-a. To je dakle cela raspoloživa memorija uključujući i virtuelnu. LocalHeap se odnosi na data segment (ako sam dobro shvatio, ispravite me) same aplikacije, što znači da s njim može da se alocira do 64K. To je slučaj kod Win 3.1, dok se kod Win NT i Chicago ove dve funkcije ponašaju isto. Za flat ne bih znao da ti kažem, koliko sam shvatio Win32 API ga podržava (ne i Win32s), tj. NT i Chicago. Pod Win 3.1 maksimalna količina memorije koju 386+ mogu da adresiraju "u komadu" je 16M, dok je 286-ici raspoloživo 1M. >> 2) Kako da iz Win aplikacije pokrenem drugu aplikaciju? Znam da je pitanje >> trivijalno, al' za system() u helpu pise da ne moze da se koristi >> pod Windowsima... :( Vidi funkciju WinExec. Vlada
cccc.327 omega,
Da li na neki nacin mogu da deklarisem promenljivu, ali ne po Intelovom formatu (prvo low byte, pa high) vec po obrnutom, Motorolinom - prvo high byte, pa low byte. Ako ne, kako na najbrzi nacin transformisati postojecu promenljivu (int ili long) u tako nesto?
cccc.328 mjova, -> #324, omega
> Ne, daje potpuno iste rezultate. U medjuvremenu sam otkrio > u cemu je stos :) Huge pointer MORA da se definise u > okviru main(), i takodje, MORA da se upotrebljava read, a > ne fread. To su bar moja zapazanja... mislim da grešiš. sad, ja koristim borland c, ali nikad nisam MORAO da deklarišem huge pointer u okviru neke funkcije da bi radio. naime, ti možeš da obaviš deklaraciju gde god hoćeš, i ne sme biti problema. drugo, read() uporno izbegavam jer mi se upotreba tog skupa funkcija gadi ;). zezam se, read ima prednost samo ako ti se sviđa skup parametara open() funkcije, inače mnogo su bolje f...() jer su baferisane. ponavljam ti da nikad nisam imao ovakvih problema. razlog zašto ne možeš da učitaš 150kb u jednom cugu leži u DOSu. DOS ne dozovljava blokove veće od 0xFFF0! ako ti treba više podataka, onda čitaj redom u više iteracija.
cccc.329 mjova, -> #325, omega
> E sad, kad bih ja znao koji je ekvivalent u BC++ :( > Pretpostavljam farcalloc. Ja sam probao (ne tvoj primer) > sa farmalloc i radilo je!? farmaloc() može alocirati kontinualni blok dužine ograničene slobodnim prostorim na "daljoj gomili" ;). problem koji se tebi javljao možda je uzrokovan time da nisi naglasio tip parametra funkcije farmalloc(). dakle, treba: huge *kaća= (huge *)farmaloc(150*1024L); u predloženom primeru (koji ti je radio) imaš baš to.
cccc.330 omega,
Nesto sam bese pricao o ovome programu, kako ima NEVEROVATNU masku (kao Windows!!!), a i sam program je vise nego odlican. Delo domacih autora. Obavezno pogledajte. FONT MAKER verzija 3.00 1994. godina ----------------------- A sad evo nekoliko zivih reci na nasem jeziku, a u vezi sa Font Maker-om. Font Maker je delo dvojice 17-godisnjaka iz Nisa - Ivana Jocica i Miodraga Djordjevica. Treca, pred vama prisutna verzija ovog programa je posledica polugodisnjeg rada i njen SOURCE iznosi oko 14000 linija. Program je pisan u MICROSOFT C 6.00 jeziku. fm30.zip
cccc.331 omega, -> #328, mjova
Ţ mislim da gresis. sad, ja koristim borland c, ali nikad nisam Iskreno, i ja se nadam da gresim :) Ajde sve cu ja lepo to da proverim, pa cu da javim :) Ţ razlog zasto ne mozes da ucitas 150kb u jednom cugu lezi u DOSu. Ţ DOS ne dozovljava blokove vece od 0xFFF0! ako ti treba vise Ţ podataka, onda citaj redom u vise iteracija. Ma ok, znao sam za to...
cccc.332 omega, -> #329, mjova
Ţ problem koji se tebi javljao mozda je uzrokovan time da nisi Ţ naglasio tip parametra funkcije farmalloc(). dakle, treba: Ţ Ţ huge *kaca= (huge *)farmaloc(150*1024L); Jesam. A kada sam huge *kaca prebacio UNUTAR main(), sve je proradilo!
cccc.333 dejanr, -> #330, omega
>> Nesto sam bese pricao o ovome programu, kako ima NEVEROVATNU masku >> (kao Windows!!!), a i sam program je vise nego odlican. Delo domacih autora. >> Obavezno pogledajte. Možeš li reći nekoliko reči o tome šta program radi? Edituje fontove? Koje?
cccc.334 postmast,
From: iznogud@Osmeh.FON.BG.AC.YU (Aleksandar Petrovic) Subject: Re: Windows / memorija Date: Wed, 14 Sep 1994 10:14:21 GMT Sasa Milic (smilic@fon) wrote: : Moras i u 386 enh. modu time da se bavis. U principu mozes da Pa koja je onda razlika, sa stanovista programera, izmedju 286 i 386 moda? -- ++
cccc.335 postmast,
From: smilic@fon (Sasa Milic) Subject: Re: Windows / memorija Date: Wed, 14 Sep 1994 12:19:13 GMT Pajic Srdjan (ps26989d@buefhp.etf.bg.ac.yu) wrote: : 2) Kako da iz Win aplikacije pokrenem drugu aplikaciju? Znam da je pitanje Ovo je iz helpa iz BC++ 2.0: WinExec ======= Syntax WORD WinExec(lpCmdLine, nCmdShow) This function executes the Windows or non-Windows application identified by the lpCmdLine parameter. The nCmdShow parameter specifies the initial state of the application's main window when it is created. Parameter Type/Description lpCmdLine LPSTR Points to a null-terminated character string that contains the command line (filename plus optional parameters) for the application to be executed. If the lpCmdLine string does not contain a directory path, Windows will search for the executable file in this order: 1. The current directory 2. The Windows directory (the directory containing WIN.COM); the GetWindowsDirectory function obtains the pathname of this directory 3. The Windows system directory (the directory containing such system files as KERNEL.EXE); the GetSystemDirectory function obtains the pathname of this directory 4. The directories listed in the PATH environment variable 5. The list of directories mapped in a network If the application filename does not contain an extension, then .EXE is assumed. nCmdShow int Specifies how a Windows application window is to be shown. See the description of the ShowWindow function for a list of the acceptable values for the nCmdShow parameter. For a non-Windows application, the PIF file, if any, for the application determines the window state. Return Value The return value specifies whether the function was successful. If the function was successful, the return value is greater than 32. Otherwise, it is a value less than 32 that specifies the error. The following list describes the error values returned by this function: Value Meaning 0 Out of memory. 2 File not found. 3 Path not found. 5 Attempt to dynamically link to a task. 6 Library requires separate data segments for each task. 10 Incorrect Windows version. 11 Invalid .EXE file (non-Windows .EXE or error in .EXE image). 12 OS/2 application. 13 DOS 4.0 application. 14 Unknown .EXE type. 15 Attempt in protected (standard or 386 enhanced) mode to load an .EXE created for an earlier version of Windows. 16 Attempt to load a second instance of an .EXE containing multiple, writeable data segments. 17 Attempt in large-frame EMS mode to load a second instance of an application that links to certain nonshareable DLLs already in use. 18 Attempt in real mode to load an application marked for protected mode only. Comments The LoadModule function provides an alternative method for executing a program. ----- Usput, imam u ascii file-u ceo help o windows-ima 3.0 (izvadjeno iz BC++ 2.0), pa ako ima zainteresovanih ... Sasa
cccc.336 djelovic, -> #335, postmast
> Usput, imam u ascii file-u ceo help o windows-ima 3.0 (izvadjeno iz BC++ > 2.0), pa ako ima zainteresovanih ... Molio bih te da to ne ostavljaš ovde, jer se time krši zakon o kopirajtu. BTW, kad smo kod vađenja stvari iz helpa, zna li ko dobar način da se neka veoma velika slika izvadi iz helpa? Svi help dekompajleri za sada vade samo tekst, a ja bih voleo da izvadim neke od dijargrama hijerarhije klasa, i da ga zalepim na zid kao referencu.
cccc.337 omega, -> #333, dejanr
Ţ Mozes li reci nekoliko reci o tome sta program radi? Edituje fontove? Ţ Koje? To je zapravo biblioteka funkcija za manipulisanje svim i svacim - fontovima, memorijom, stilovima pisanja i sl. Edituje sopstveni tip fontova. Ima i neke lude efekte - ispisivanje slova u obliku sinusoida i sl.! Ko ne skine, zazalice ;) Ovo sam cut&paste iz demo.c: This is a demonstration of WRITE.LIB library and its wonderful possibilities. There are many reasons why you should have to use this base of functions. Easier using, different style of writing, excellent manipulating with memory, and multi color editing are one of them. Font editor for this nice fonts is Font Maker version 3.00 - it gaves the former possibilities and much more (fonts for text mode, for example). Just amazing!!! If you want to do the right thing and start to use that library, you can see the source of this program (VGADEMO.C) and batch file that makes VGADEMO.EXE - MAKEDEMO.BAT. It's so simple, you'll see! One of the greatest news is that it's enabled to use color fonts. Until now, you could only dream beautiful multi - color font from your favourite games, but now - it is real.
cccc.338 omega, -> #323, smarkov
Ţ 64k). Dole je (nadam se :) ) working example : Malo sam preradio za BC, ali uglavnom je bas kao sto si naveo: #define OVER64K_BUFFLEN (150*1024L) #define READ_AT_ONCE (4*1024) char huge *hPtr; int remain; hPtr = (huge *)farmalloc(OVER64K_BUFFLEN); for(remain=OVER64K_BUFFLEN; remain>0; ) { n = fread(hPtr, 1, READ_AT_ONCE, fp); hPtr+=n; remain-=n; } hPtr-=OVER64K_BUFFLEN; //^^^^^^^^^^^^^^^^^^^^^ // ovaj deo obavezno, da bi pointer pokazivao na pocetak bafera
cccc.339 vcalic, -> #336, djelovic
>> Molio bih te da to ne ostavljaš ovde, jer se time krši zakon o kopirajtu. >> BTW, kad smo kod vađenja stvari iz helpa, zna li ko dobar način da se neka >> veoma velika slika izvadi iz helpa? Jesi li probao da u samom WinHelp-u kopiraš sve u Clipboard? Ili, beše, postoji neko ograničenje? Vlada
cccc.342 djelovic, -> #339, vcalic
> Jesi li probao da u samom WinHelp-u kopiraš sve u Clipboard? WinHelpov copy dijalog prihvata samo tekst - slike preskače.
cccc.345 mjova, -> #335, postmast
> Usput, imam u ascii file-u ceo help o windows-ima 3.0 > (izvadjeno iz BC++ 2.0), pa ako ima zainteresovanih ... iako je pitanje autorskih prava rešeno ;), treba naglasiti da postoje određene stvari koje su u win 3.1 drugačije. preporučujem ipak help iz bcc 3.x+.
cccc.344 mjova, -> #327, omega
> Da li na neki nacin mogu da deklarisem promenljivu, ali ne > po Intelovom formatu (prvo low byte, pa high) vec po > obrnutom, Motorolinom - prvo direktno ne, ali ne vidim razlog da ne napraviš neki klasu u C++-u. tamo je to tako lako izvodljivo.
cccc.343 mjova, -> #338, omega
> hPtr = (huge *)farmalloc(OVER64K_BUFFLEN); > hPtr-=OVER64K_BUFFLEN; > //^^^^^^^^^^^^^^^^^^^^^ > // ovaj deo obavezno, da bi pointer pokazivao na pocetak > bafera ono što mogu da primetim, to je da ova koncepcija može dovesti do zbrlja. naime, ako se memorija alocira pomoću neke od ..maloc..() funkcija, onda vektor na odovjenu memoriju: hPtr = (huge *)farmalloc(OVER64K_BUFFLEN); ne treba menjati! originalnu vrednost treba čuvati, a drugim vektorom se šetati po memoriji.
cccc.346 omega, -> #327, omega
Ţ Da li na neki nacin mogu da deklarisem promenljivu, ali ne po Intelovom Ţ formatu (prvo low byte, pa high) vec po obrnutom, Motorolinom - prvo Ţ high byte, pa low byte. Ako ne, kako na najbrzi nacin transformisati Ţ postojecu promenljivu (int ili long) u tako nesto? Ja sam uradio na asm-u, pa, mozda neko ipak zna kako direktno na C-u (mislim bez uvodjenja promenlivih). Mozda postoji neka funkcija? void SwapUnsignedLong(unsigned long *number) { asm { push es les di, dword ptr number mov ax, es:[di] mov bl, ah mov bh, al mov ax, es:[di+2] mov es:[di+2],bx mov bl, ah mov bh, al mov es:[di],bx pop es } }
cccc.347 omega,
Hm, ovoga puta nisam ja kriv (valjda?) ;) Zasto ne radi: fseek(dat, -Unazad, SEEK_CUR); nego mora fseek(dat, ftell(dat)-Unazad, SEEK_SET);
cccc.348 vitez.koja, -> #337, omega
#=> There are many reasons why you should have to use this #=> base of functions. Easier using, different style of #=> writing, excellent manipulating with memory, and multi #=> color editing are one of them. Font editor for this nice Kakav engleski :)) (mada, ove rečenice ni na srpskom nisu primer pismenosti;)). Vidi se da su momci iz Niš ;) Da li je neko skinuo sam program ? Utisci ?
cccc.349 omega, -> #343, mjova
Ţ> hPtr-=OVER64K_BUFFLEN; Ţ Ţ ono sto mogu da primetim, to je da ova koncepcija moze dovesti do Zasto mislis? Ţ ne treba menjati! originalnu vrednost treba cuvati, a drugim Ţ vektorom se setati po memoriji. Ok, onda nije problem.
cccc.350 omega, -> #344, mjova
Ţ direktno ne, ali ne vidim razlog da ne napravis neki klasu u Ţ C++-u. tamo je to tako lako izvodljivo. E pa, tek sam poceo da radim na obicnom C-u, tako da tek sa objektima nemam veze :)
cccc.351 zeljkoj, -> #342, djelovic
> WinHelpov copy dijalog prihvata samo tekst - slike preskače. Pritisni Print Screen taster pa će ceo ekran biti prekopiran u Clipboard.
cccc.352 mjova, -> #349, omega
> Zasto mislis? mislim, dakle postojim ;) (ili srpska varijanta: coitus erg sum ;). za to što moraš paziti dokle si stigao, pa koliko treba da se vratiš.. originalnu vrednost lepo upamtiš, pa te glava ne boli.
cccc.353 djelovic, -> #351, zeljkoj
> Pritisni Print Screen taster pa će ceo ekran biti prekopiran u Clipboard. Nije dovoljno - neke od slika hijerarhija iz helpa su veće od raspoloživog ekrana. Idemo dalje :).
cccc.354 vcalic, -> #353, djelovic
>> Nije dovoljno - neke od slika hijerarhija iz helpa su veće od raspoloživog >> ekrana. Idemo dalje :). Probaj da povećaš ekran ;) Vlada
cccc.355 mjova, -> #353, djelovic
> Nije dovoljno - neke od slika hijerarhija iz helpa su veće > od raspoloživog ekrana. Idemo dalje :). baš zbog ovoga pokušavam doći do literature za pisanje win drajvera. naime, svaki hlp topic se može pustiti na laser, a to znači da ako napraviš dobar veznik, možeš lepo odvojiti slike tekst itd... ima li neko literaturu?
cccc.356 vcalic, -> #355, mjova
>> baš zbog ovoga pokušavam doći do literature za pisanje win >> drajvera. naime, svaki hlp topic se može pustiti na laser, a to >> znači da ako napraviš dobar veznik, možeš lepo odvojiti slike >> tekst itd... >> >> ima li neko literaturu? Koliko se sećam, nije ti dovoljna literatura već ti treba Microsoft-ov DDK što je otprilike kao SDK samo za drajvere. Koliko sam shvatio to su biblioteke za MSC (tj. Visual C++) + knjige + HLP fajlovi, etc. Nisam čuo da neko to ima ovde, a moglo bi jako lepo da se iskoristi. Vlada
cccc.357 smarkov, -> #327, omega
> Da li na neki nacin mogu da deklarisem promenljivu, ali ne po Intelovom > formatu (prvo low byte, pa high) vec po obrnutom, Motorolinom - prvo > high byte, pa low byte. Ako ne, kako na najbrzi nacin transformisati > postojecu promenljivu (int ili long) u tako nesto? #define WORDCONV(w) (((unsigned short)(w))>>8) | ((unsigned short)(w))<<8)) Makro je "simetričan" - konvertuje u oba smera. I slično, malo teže : #define LONGWORDCONV(lng) /* Za vežbu :) */ Što se tiče efikasnosti evo kakav kod je generisao MSC 7.0 kod ekspanzije ovog makroa (opcija -O za optimizaciju), promenljiva je u BP+4 izlaz je u DX: mov ah,BYTE PTR [bp+5] mov cl,BYTE PTR [bp+4] ;x mov dl,ah mov dh,cl pozdrav, smarkov
cccc.358 mmitrovic, -> #346, omega
Ů█▀█Ţ mov ax, es:ŠdiĆ Ů█▀█Ţ mov bl, ah Ů█▀█Ţ mov bh, al Ů█▀█Ţ mov ax, es:Šdi+2Ć Ů█▀█Ţ mov es:Šdi+2Ć,bx Ů█▀█Ţ mov bl, ah Ů█▀█Ţ mov bh, al Ů█▀█Ţ mov es:ŠdiĆ,bx mov ax,es:ŠdiĆ xchg ah,al xchg ax,es:Šdi+2Ć xchg ah,al mov es:ŠdiĆ,ax kraće i sa manje koda. ;) Nego, ne znam baš o asm blokovima u Cu, ali zašto si bacao es na stek, zar neće C ubaciti kod za reinicijalizaciju es registra ako je to poterbno. Pascal to radi, pa je es registar slobodan za korišćenje bez ograničenja.
cccc.359 omega, -> #357, smarkov
Ţ# define WORDCONV(w) (((unsigned short)(w))>>8) | ((unsigned short)(w))<<8)) Svaka cast :) Ţ# define LONGWORDCONV(lng) /* Za vezbu :) */ #define LONGWORDCONV(lng) (((unsigned long) WORDCNV(lng>>16))) | ((((unsigned long) WORDCNV(lng)))<<16) Bas me zanima da li sam "ubo" :)) Ţ Sto se tice efikasnosti evo kakav kod je generisao MSC 7.0 kod ekspanzije Ţ ovog makroa (opcija -O za optimizaciju), promenljiva je u BP+4 izlaz je u Kako je fenomenalno optimizovao. Na kraju cu da predjem na MSC ako mi neko ne kaze kako u BC-u to da izvedem ;) Sta znaci taj switch -O?
cccc.360 omega, -> #358, mmitrovic
Ţ mov ax,es:SdiC Ţ xchg ah,al Ţ xchg ax,es:Sdi+2C Ţ xchg ah,al Ţ mov es:SdiC,ax Pa ovo je jos najbolje. Ţ krace i sa manje koda. ;) Nego, ne znam bas o asm blokovima u Cu, ali Ţ zasto si bacao es na stek, zar nece C ubaciti kod za reinicijalizaciju Ţ es registra ako je to poterbno. Pascal to radi, pa je es registar slobodan Ţ za koriscenje bez ogranicenja. Jok, ja sam debagovao taj deo i videh da baca samo SI na stek, pa ko veli, da se ne zezam, mada je radilo i bez toga :)
cccc.361 postmast,
From: iznogud@Osmeh.FON.BG.AC.YU (Aleksandar Petrovic) Subject: Re: cccc Date: Mon, 19 Sep 1994 10:09:42 GMT Dejan Jelovic (djelovic@sezam.UUCP) wrote: : U 386Enh modu ne moras da razmisljas o tome, vec mozes da koristis : standardno malloc () i free (), mada to zavisi i od kompajlera koji koristis. : Flat memorijski model jos uvek nemas. Ako mogu da koristim standardni malloc i free, u cemu je onda razlika u odnosu na flat m.m.? Mogu li se koristiti operatori new i delete (meni, inace, mnogo drazi)? BTW, ja radim u BC++ 4.0. Je li taj kompajler ok? -- ++
cccc.362 zeljkoj, -> #359, omega
> ne kaze kako u BC-u to da izvedem ;) Sta znaci taj switch -O? /O je switch za max optimizaciju u svim Microsoftovim jezicima.
cccc.363 smarkov, -> #359, omega
># define LONGWORDCONV(lng) (((unsigned long) WORDCNV(lng>>16))) | > ((((unsigned long) WORDCNV(lng)))<<16) > Bas me zanima da li sam "ubo" :)) To je to. Nedostaju ti spoljnje zagrade i zagrade oko argumenta 'lng' ( makro može da bude u izrazu, argument može da bude izrazu ...) Evo je ekspanzija za LONCNV makro. Arg je u bp+4 izlaz je u dx,cx mov ax,WORD PTR [bp+6] mov cx,ax mov ah,al mov dl,ch mov dh,al mov ax,WORD PTR [bp+4] ;ll mov cl,BYTE PTR [bp+5] mov ch,al > Kako je fenomenalno optimizovao. Na kraju cu da predjem na MSC ako mi neko > ne kaze kako u BC-u to da izvedem ;) Sta znaci taj switch -O? Ovo je relativno jednostavna optimizacija, sigurno je provodi i BC. To sigurno nije razlog zbog koga bi trebao da menjaš kompajler. Naravoučenije iz ovih par poruka je da moderni kompajleri generišu efikasan kod i da retko treba posezati za asemblerom. Uporedi kod koji je dobijen ekspanzijom WORDCONV i LONGCONV makroa sa ručno napisanim kodom. Vredi li to (i koliko često je potrebno insistiranje na performansama ) truda. Dalje, makroi će ti (mnogo važnije od performansi) fukcionisati na svakom ANSI C kompajleru i svakoj platformi. pozdrav, smarkov
cccc.364 omega, -> #363, smarkov
Ţ Ovo je relativno jednostavna optimizacija, sigurno je provodi i BC. Ne bih bas rekao :(( Voleo bih kad bi me neko razuverio. Ukljucio sam sve moguce optimizacije (mozda to i ne valja?) i evo rezultata: #define WORDCONV(w) (((unsigned short)(w))>>8) | ((unsigned short)(w))<<8)) MSC: (ulaz BP+4, izlaz DX) -------------------------- mov ah,BYTE PTR [bp+5] mov cl,BYTE PTR [bp+4] ;x mov dl,ah mov dh,cl BC: (ulaz DGROUP:_w, izlaz AX) ------------------------------ mov ax,word ptr DGROUP:_w shr ax,8 mov dx,word ptr DGROUP:_w shl dx,8 or ax,dx #define LONGWORDCONV(lng) ((((unsigned long) WORDCNV((lng)>>16))) | ((((unsigned long) WORDCNV((lng))))<<16)) MSC: (ulaz BP+4, izlaz DX,CX) ----------------------------- mov ax,WORD PTR [bp+6] mov cx,ax mov ah,al mov dl,ch mov dh,al mov ax,WORD PTR [bp+4] ;ll mov cl,BYTE PTR [bp+5] mov ch,al BC: (ulaz DGROUP:_lng, izlaz BX,AX) ----------------------------------- mov ax,word ptr DGROUP:_lng+2 shr ax,8 mov dx,word ptr DGROUP:_lng+2 shl dx,8 xor bx,bx mov si,word ptr DGROUP:_lng shr si,8 xor cx,cx mov di,word ptr DGROUP:_lng shl di,8 or si,di or cx,0 or ax,dx or bx,si Ţ To sigurno nije razlog zbog koga bi trebao da menjas kompajler. Pa uporedi sam :(( Ţ performansama ) truda. Dalje, makroi ce ti (mnogo vaznije od Ţ performansi) fukcionisati na svakom ANSI C kompajleru i svakoj Ţ platformi. Priznajem da je ovo ubedljivo najvaznija stvar...Medjutim, za neke stvari covek mora sam da optimizuje...
cccc.365 pyramid,
Da li postoji nacin da u toku izvrsavanja interapt rutine utvrdim koji je? Tj: postavim npr. sve hardverske interapte na odredjenu rutinu i u toj rutini na *neki nacin* utvrdim broj int-a
cccc.366 postmast,
From: mm18291d@buefhp.etf.bg.ac.yu (Marko Milivojevic) Subject: Re: cccc Date: Wed, 21 Sep 1994 18:57:13 GMT Zeljko Jovanovic (zeljkoj@sezam.UUCP) wrote: :: /O je switch za max optimizaciju u svim Microsoftovim jezicima. Tesko da ce biti bas to... /Od znaci disable optimisation (MSC6)
cccc.367 postmast,
From: glisin@fon (Ivan Glisin) Subject: Re: Pipeline u DOS-u Date: Thu, 22 Sep 1994 19:20:07 GMT Aleksandar Petrovic (iznogud@Osmeh.FON.BG.AC.YU) pise: >> Postoji li ikakav nacin da program sazna dali mu je ispis preusmeren >> u neki fajl, kao i ime tog fajla? Naravno, radi se o DOS-u. Koliko mi se cini, ti govoris o redirekciji ili preusmeravanju a ne o pajplajnu? Koliko je meni poznato, to je iz programa nemoguce saznati jer se to programa i ne tice. Stvar je operativnog sistema gde ce preusmeriti standardni izlaz. Program daje niz znakova na STDOUT a sta ce sistem dalje sa tom uraditi on ne moze da zna. Kazi koji te konkretan problem muci, mozda postoji i neko drugacije resenje od saznavanja imena redirekcije?
cccc.368 zeljkoj, -> #366, postmast
> Tesko da ce biti bas to... /Od znaci disable optimisation > (MSC6) U stvari, max optimizacija je /Ox (tako je u FORTRAN-u, verovatno je isto u C-u.)
cccc.369 pyramid, -> #367, postmast
GL> Aleksandar Petrovic (iznogud@Osmeh.FON.BG.AC.YU) pise: GL> >> Postoji li ikakav nacin da program sazna dali mu je ispis GL> >> u neki fajl, kao i ime tog fajla? Naravno, radi se o DOS-u GL> GL> Koliko mi se cini, ti govoris o redirekciji ili GL> preusmeravanju a ne o pajplajnu? GL> GL> Koliko je meni poznato, to je iz programa nemoguce saznati GL> jer se to programa i ne tice. Stvar je operativnog sistema GL> gde ce preusmeriti standardni izlaz. Program daje niz GL> znakova na STDOUT a sta ce sistem dalje sa tom uraditi on ne GL> moze da zna. STDOUT je definisan kao FILE *stdout a gledajuci structuru FILE moze se videti jedan unsigned flags. Ako on ima setovan IX bit onda je file vezan za terminal (_F_TERM), sto znaci: stdout->flags&_F_TERM ima vrednost !0 ako je izlazni file terminal. Mozda ti to moze pomoci... Mislim, Aleksandru...
cccc.370 dcolak, -> #368, zeljkoj
│ U stvari, max optimizacija je /Ox (tako je u FORTRAN-u, │ verovatno je isto u C-u.) Još "žešća" /Oz ;) Sledge DAMMIR!
cccc.371 pedjak, -> #365, pyramid
> Da li postoji nacin da u toku izvrsavanja interapt rutine utvrdim > koji je? > postavim npr. sve hardverske interapte na odredjenu rutinu > i u toj rutini na *neki nacin* utvrdim broj int-a Za hardverske nisam siguran, možda se može očitati sa nekih portova, ali za softverske bi možda moglo ovako ( ovo mi je prvo palo na pamet ) : po ulasku u tvoju interapt rutinu, skineš sa steka adresu povratka koja je četvorobajtna ( seg:ofs ), pronadješ to mesto u memoriji i vratiš se unazad jednu instrukciju i pronadješ opcode za INT <nn> i očitaš to <nn>.
cccc.372 pyramid, -> #371, pedjak
PY> Za hardverske nisam siguran, mozda se moze ocitati sa PY> nekih portova, Verovatno je to stvar koju trazim (port)... PY> ali za softverske bi mozda moglo ovako ( ovo mi je prvo PY> palo na pamet ) : Za softverske bi se ja snasao... Mada ti ta ideja nije losa , ali ▀▀cim promenim platformu to ima▀ da puuuucaaa (npr. ukljucim DOS emulaciju pod lynux-om)...
cccc.373 pyramid,
Da li ima neko spisak VGA portova sa objasnjenjima "sta i kako"? Ili je mozda neko shvatio kako radi graficki pointer u tekst rezimu, pa da mi objasni? (gledao sam onaj mouslib8, ali mi skoro nista nije jasno)...
cccc.374 postmast,
From: glisin@fon (Ivan Glisin) Subject: Re: cccc Date: Sat, 24 Sep 1994 17:49:53 GMT Nebojsa Mihovilovic (pyramid@sezam.UUCP) pise: >> stdout->flags&_F_TERM Ne znam za ovo, ali sam primetio da struct FILE na razlicitim sistemima izgleda razlicito, pa je petljanje po samoj strukturi nepreporucljivo. Naime, problem se mozda moze resiti, ali ce resenje biti verovatno potpuno neportabilno. Imajte ovo na umu ukoliko baratate sa poljima strukture FILE.
cccc.375 postmast,
From: anubis@hobbiton.CO.YU (Igor Loncarevic) Subject: Re: cccc Date: Sat, 24 Sep 1994 22:51:45 GMT Zoran Rapajic (.ken.@sezam.UUCP) wrote: : Kako na COM portu mogu ici brzine preko 9600 (lap-link ide i do 115200) : Preko biosa koliko sam ja shvatio ne moze vise od 9600 : Gde je caka? Preko BIOS-a ne bi trebalo da ide preko 2400, caka je u preuzimanju interapta. --------------------------------------------------------------------------- anubis@hobbiton.co.yu - anubis@hobbiton.sin.com ---------------------------------------------------------------------------
cccc.376 pedjak, -> #372, pyramid
> Verovatno je to stvar koju trazim (port)... Evo nešto sam našao u inter listi, ima toga još, prenosim najosnovnije... 0020 r PIC interrupt request/in-service registers by OCW3 request register: bit 7-0 = 0 no active request for the corresponding int. line = 1 active request for corresponding interrupt line in-service register: bit 7-0 = 0 corresponding line not currently being serviced = 1 corresponding int. line currently being serviced 0020 w PIC OCW3 bit 7 = 0 reserved bit 6-5 = 0x no operation = 10 reset special mask = 11 set special mask bit 4 = 0 reserved bit 3 = 1 reserved bit 2 = 0 no poll command = 1 poll command bit 1-0 = 0x no operation = 10 read int.request register on next read at 0020 = 11 read int.in-service register on next read 0020 Evo šta sam ja uradio: mov dx,20h mov al,03h ; u sledećem čitanju porta 20h dobijaš informaciju ; koji je interapt u toku. out dx,al in al,dx ; sada je u al informacija. Kod XT-a imaš osam hardverskih interapta, tako da svaki bit u al govori koji je interapt u toku. Značenje bitova je sledeće: bit 7 = parallel printer interrupt (int 0fh) bit 6 = diskette interrupt (int 0eh) bit 5 = fixed disk interrupt (int 0dh) bit 4 = serial port 1/3 interrupt (int 0ch) bit 3 = serial port 2/4 interrupt (int 0bh) bit 2 = video interrupt (int 0ah) bit 1 = keyboard, mouse, RTC interrupt (int 09h) bit 0 = timer interrupt (int 08h) > Za softverske bi se ja snasao... Mada ti ta ideja nije losa , ali > ▀▀cim promenim platformu to ima▀ da puuuucaaa (npr. ukljucim DOS > emulaciju pod lynux-om)... Kakvu si ti ideju imao u vezi softverskih..? Ne bi smeo da puca, ukoliko je emulator dobar. Program nije svestan da je on samo jedan od procesa u sistemu, misli da je mašina samo njegova. Ti ćeš raditi nešto kao pop bx pop es . . mov ax,Šes:bxĆ . . A to bi moralo da radi na svakom ozbiljnom emulatoru :) p.s. izvinjavam se na juskiju :)
cccc.377 postmast,
From: iznogud@Osmeh.FON.BG.AC.YU (Aleksandar Petrovic) Subject: Re: cccc Date: Mon, 26 Sep 1994 12:31:53 GMT Nebojsa Mihovilovic (pyramid@sezam.UUCP) wrote: : ima vrednost !0 ako je izlazni file terminal. Mozda ti to moze pomoci... : Mislim, Aleksandru... Hvala ne trudu, al' cela prica je pocela tako sto se meni javilo ;) da sam nesto slicno daaaaavno procitao u nekim starim Racunarima. Ocigledno sam se prevario. 10x anyway. -- ++
cccc.378 postmast,
From: iznogud@Osmeh.FON.BG.AC.YU (Aleksandar Petrovic) Subject: Re: Pipeline u DOS-u Date: Mon, 26 Sep 1994 12:35:08 GMT Ivan Glisin (glisin@fon) wrote: : Koliko mi se cini, ti govoris o redirekciji ili preusmeravanju a ne : o pajplajnu? Pod DOS-om nema (sustinske) razlike, posto DOS jednostavno umesto pipeline-a izvrsi dve redirekcije : Kazi koji te konkretan problem muci, mozda postoji i neko drugacije : resenje od saznavanja imena redirekcije? Naaravno da postoji i drugo resenje, al' ovo je bilo najelegantnije ;) -- ++
cccc.379 postmast,
From: mm18291d@buefhp.etf.bg.ac.yu (Marko Milivojevic) Subject: Re: cccc Date: Mon, 26 Sep 1994 12:08:16 GMT Damir Colak (dcolak@sezam.UUCP) wrote: :: Jos "zesca" /Oz ;) No chance, provereno je bolja /Ox....
cccc.380 smarkov,
Komentar na tekst ZZ (Moja škola C-a, Računari 102.) : Osobina proširivanja float-a u double za argumente bez prototipa nisu izbor Microsofta. Ta stvar je eksplicitno definisana ANSI C standardom. Svaki ANSI C kompajler će pogrešno preneti argument u funkciju void f(float x) { ... } ako za f u pozivajućem modulu ne postoji prototip. Proširivanje float-a u double predvidjeno je takozvanim unarnim konverzijama koje se, izmedju ostalog, izvode na svim argumentima u pozivu funkcije. Ako postoji prototip, tada se po definisanim pravilima, dalje izvodi konverzija u navedene tipove. Zahvaljujući tome moguće je, recimo, pozvati funkciju sin sa int argumentom (i korektnim rezultatom). Kvalifikatori __far i __near nisu, naravno, deo ANSI specifikacije. Microsoft je dakle pravila o unarnim konverzijama (prirodno) proširio konverzijom pointera u __far za odgovarajuće modele. pozdrav, smarkov
cccc.381 smarkov, -> #365, pyramid
> Da li postoji nacin da u toku izvrsavanja interapt rutine utvrdim koji je? HINT : Mora da se upotrebi asembler. Napraviš (korišćenjem REPT i makro direktiva) kod sledećeg oblika: table PROC far labela0: pushf labela1: CALL irqDispatch labela2: pushf CALL irqDispatch ... labela255: pushf CALL irqDispatch table ENDP Na sve ulaze u IVT postaviš adresu labela#k (za k-ti ulaz). U tabeli oldIrqs si zapamtio adrese svih starih handlera. void (_interrupt _far *(oldirqs[256]))(); void _interrupt _far irqDispatch( unsigned _es, unsigned _ds, unsigned _di, unsigned _si, unsigned _bp, unsigned _sp, unsigned _bx, unsigned _dx, unsigned _cx, unsigned _ax, unsigned _ip, unsigned _cs, unsigned flags ) ) { int irqNo; char __huge *retAdr; extern char __huge *_table; FP_SEG(retadr) = _cs; FP_OFF(retadr) = _ip; /* Na osnovu povratne adrese odredi se irqNo */ irqNo = (retAdr - table)/SIMCALLSIZE; /* SIMCALLSIZE je duzina instrukcija pushf+Call irqDispatch */ /* Na raspolaganju je broj interapta */ (*(oldirqs[irqNo]))(); /* Poziv starog handlera */ } pozdrav, smarkov
cccc.382 dcolak, -> #379, postmast
to: MarkoM │ :: Jos "zesca" /Oz ;) │ │ No chance, provereno je bolja /Ox.... Ajde čitaj ovo gore a posle ovo dole: Enabling Aggressive Opimizations (/Oz) --- The compiler can perform extremely aggressive optimizations. These optimizations produce high code quality both in terms of speed and size. Certain programs, however, cannot be optimized with the technologies enabled by the /Oz option. For these programs, you should not specify this option; you can still use all other optimization options. Because the optimization strategies enabled by the /Oz option are so aggresive, they are not part of the maximum optimization (/Ox) option. Extra Help: Notice word "žešća..." Eh... Sledge DAMMIR!
cccc.383 mmitrovic, -> #376, pedjak
Ů█▀█Ţ out dx,al Ů█▀█Ţ in al,dx ; sada je u al informacija. Da li ovo radi? Zar ne bi trebalo da bude jedno 5-6 praznih cycle-ova između zahteva i prijema vrednosti? Jedno jmp na sledeći red ili dva NOPa. Ů█▀█Ţ bit 2 = video interrupt (int 0ah) Preko portova A0 i A1 se pristupa PIC 2 kolu (IRQ8-15) na 286+. Format je isti kao za portove 20 i 21. PIC2 je valjda nakačen na IRQ2 (kaskadiran) pa se prvo proveri da li je u obradi IRQ2 i ako jeste onda se konsultuje PIC 2 za dobijanje prave vrednosti (IRQ8-15). Za ovo IRQ2 nisam 100% siguran (recimo 90%), jer moram da konsultujem ref. koja nije kod mene, pa kad stigne potvrdiću (ili ću opovrgnuti ;).
cccc.384 ddobic,
Radim sa MICROSOFT C 6.0 i pokusao sam da povecam maksimalni broj datoteka koje program moze da otvori.Promenio sam u C600\SOURCE\STARTUP\DOS\CRT0DAT.ASM liniju _NFILE_ 20 u _NFILE_ 40 i nista drugo nisam dirao. Posle toga sam startovao STARTUP koji poziva NMAKE i posle toga MASM. MASM nisam imao pa sam od drugara dobio MASM 5.0 za koji nisam siguran da je kompletan. Ponovo sam probao STARTUP ali je MASM 5.0 kod prve datoteke dao greske: symbol not defined: @F symbol is multidefined: @@ symbol not defined: @F symbol is multidefined: @@ Da li je problem u nekompletnom asembleru ili u neodgovarajucoj verziji? Kako mogu da dodjem do novijeg MASM?
cccc.385 janko,
Neko je relativno skoro pitao kako da sazna da li je stdin ili stdout bio preusmeren ili je konzola (ako sam zapamtio pitanje?) Imao sam utisak da znam rešenje, ali nisam znao odakle.;) Kopajući po rođenim sorsovima nađoh da sam takvu stvar napisao januara ove godine, i čudo radi ovako (Borland C, MS DOS): #include <stdio.h> int redir( FILE* f ) <% return ( (ioctl( fileno( f ), 0 ) & 0x80) == 0 ); %> main() <% if (redir( stdin )) fprintf(stderr," stdin redirected. "); if (redir( stdout )) fprintf(stderr," stdout redirected. "); return 0; %> (znaci umesto vitičastih zagrada su ANSI/ISO rešenje za predstavljanje znakova zauzetih nekim nacionalnim karakter setovima u C++ i C jezicima)
cccc.386 pedjak, -> #381, smarkov
> HINT : Mora da se upotrebi asembler. Napraviš (korišćenjem REPT i > makro direktiva) kod sledećeg oblika: > table PROC far > labela0: > pushf Ha ! Vrlo interesantno i elegantno rešenje, čak šta više, svidja mi se.
cccc.387 pedjak, -> #383, mmitrovic
> out dx,al > in al,dx ; sada je u al informacija. > Da li ovo radi? Zar ne bi trebalo da bude jedno 5-6 praznih > cycle-ova između zahteva i prijema vrednosti? Jedno jmp na sledeći > red ili dva NOPa. Pa vidi, kod mene radi, mada ne bi bilo zgoreg, kao što kažeš da se ubaci par NOP-ova ili jmp. > je isti kao za portove 20 i 21. PIC2 je valjda nakačen na IRQ2 > (kaskadiran) pa se prvo proveri da li je u obradi IRQ2 i ako jeste > onda se konsultuje PIC 2 za dobijanje prave vrednosti (IRQ8-15). Za > ovo IRQ2 nisam 100% siguran (recimo 90%), jer moram da konsultujem > ref. koja nije kod mene, pa Budi siguran 100%, proverio sam ja u dokumentaciji, jeste IRQ2. Inače, ti prekidi ovog drugog kontrolera su vezani za sledeće interapte: timer - 70h (IRQ8) video - 71h (IRQ9) rezervisano - 72h, 73h (IRQ10,11) miš - 74h (IRQ12) koprocesor - 75h (IRQ13) hard disk - 76h (IRQ14) rezervisano - 77h (IRQ15) p.s. inače, dejstvo ovog drugog PIC-a se može isključiti, ali ponekad može biti vrlo koristan.. recimo, VCS ga koristi i to vrlo uspešno :) p.p.s. rešenje koje je poslao smarkov je po meni najbolje, jer se izbegava petljanje sa kontrolerom, a ujedno važi za sve vrste interapta.
cccc.388 driks,
Ovo dole bi trebalo da proverava da li su vrata na floppy-ju zatvorena ili nisu, ali bas nesto nece da radi, naime i pri otvorenim i zatvorenim vratima stalno setuje CF i stampa 6 (vrata otvorena). main() { union REGS inregs,outregs; int status; inregs.h.ah=0x16; inregs.h.dl=0x00; // A: status=int86(0x13,&inregs,&outregs); if (outregs.x.cflag==0) printf("\nVrata zatvorena"); else printf("\nStanje floppy-a: %X",status>>8); } 'ajd pomozite.
cccc.389 postmast,
From: buba@setgate.setnet.co.yu (Branislav Bubanja) Subject: dva ekrana Date: Mon, 26 Sep 1994 01:14:06 Da li neko zna nacin na koji bi se mogli prikazati razliciti ekrani na dva monitora istovremeno?. U pitanju su razliciti podaci i trebalo bi da oba ekrana budu u grafickom modu, mada moze pomoci i nacin prikaza jednog grafickog i jednog tekst ekrana. Da li mozda neko poseduje drajver ili proceduru koja bi ovo omogucila? ___ ■ OLX 2.1 TD ■ Jeftino prodajem tagove. Popust na vece kolicine. * Origin: [New Age BBS]*[Beograd]*[+38-11-404-639]*[23-06] (38:103/110)
cccc.390 postmast,
From: anubis@hobbiton.CO.YU (Igor Loncarevic) Subject: Re: dva ekrana Date: Wed, 28 Sep 1994 11:39:04 GMT Branislav Bubanja (buba@setgate.setnet.co.yu) wrote: : Da li neko zna nacin na koji bi se mogli prikazati razliciti : ekrani na dva monitora istovremeno?. U pitanju su razliciti podaci : i trebalo bi da oba ekrana budu u grafickom modu, mada moze pomoci i : nacin prikaza jednog grafickog i jednog tekst ekrana. Da li mozda neko : poseduje drajver ili proceduru koja bi ovo omogucila? Programce se zove CTRALT, tu imas sve sto ti je potrebno za rad pod dual monitorima :). Btw, malo teze ces prikazati grafiku na oba monitora. --------------------------------------------------------------------------- anubis@hobbiton.co.yu - anubis@hobbiton.sin.com
cccc.391 pyramid, -> #381, smarkov
Izvin'te na kasnjenju (ispiti itd.) Tvoje resenje je zanimljivo, ali umesto petljanja sa povratnom adresom (to bas i nije uputno jer radim sa 286 extenderom) moze se primeniti int01: mov ax,01 jmp IntHandler int02: jmp IntHandler mov ax,02 ... intFF: mov ax,0ffh jmp IntHandler void far _loadds _saveregs IntHandler(void) { unsigned IntNo=_AX; ... (oldInts[IntNo])(); } Meni ipak vise odgovara hardverska provera (ne znam zasto)... >> A to bi moralo raditi na svakom ozbiljnom emulatoru Problem je sto mrzim da se petljam sa xS registrima. A, druga stvar je sto se tice emulatora, ako se neko seti da napravi emulator koji bi prvo preveo kod, pa tek onda izvrsio (sto je znatno vece ubrzanje) to nikako ne bi radilo... Moja provera da li je program portabilno napisan je da odem kod nekoga ko ima Amigu i PC emulator 286 i tu ga probam (istovremeno izmerim brzinu - praktican profiler :)
cccc.392 kcurcic, -> #388, driks
> Ovo dole bi trebalo da proverava da li su vrata na floppy-ju > zatvorena ili To se i meni dogadjalo mada nemam pojma zasto. To sto ima ili nema diska u drajvu nema nikakvog uticaja na CF. Postoji i funkcija 15h interapta 13 koja bi trebalo da proveri moze li se vrsiti provera :)) pomocu funkcije 16h istog interapta, ali sve to izgleda kao da nema veze sa zivotom. Na kraju sam za to koristio nesto ovako: main() { int a; char *buf; buf=malloc(512); biosdisk (0,0,0,0,0,0,buf); //ovo je za reset a=biosdisk (2,0,0,0,1,1,buf); // a ovo ucitava sektor sa A: a=biosdisk (2,0,0,0,1,1,buf); if (a==128) printf ("Nema diska\n"); free (buf); } Jedino ovako (uz reset i DVA poziva za ucitavanje) radi pouzdano inace nije sigurno. Ako je sve ok, f-ja biosdisk vrati 0. Malo je kabasto ali radi. :) Stvarno bih voleo da mi neko objasni u cemu je stvar. Kosta
cccc.393 miljko, -> #392, kcurcic
>> > Ovo dole bi trebalo da proverava da li su vrata na floppy-ju >> > zatvorena ili >> Jedino ovako (uz reset i DVA poziva za ucitavanje) radi pouzdano >> inace nije sigurno. Ako je sve ok, f-ja biosdisk vrati 0. Malo je >> kabasto ali radi. :) Stvarno bih voleo da mi neko objasni u cemu >> je stvar. INT 13H, F-JA 16H vraća status drajva (ima/nema diskete) u odnosu na zadnju U/I operaciju. Ukoliko je bilo diskete, sve dok je ona unutra vraćaće OK rezultat. Kad se izvadi disketa, to se beleži i nadalje sve do sledeće U/I operacije, status je _nema diska_ bez obzira na stvarno stanje. Mislim da za ovo ne treba kriviti BIOS, već kontroler floppy-ja. Stvarno su mogli da urade da neki bit status registra bude ima/nema diskete. Dakle za očitavanje spremnosti drajva može da posluži sledeća procedura: main () { int status; char buffer [512]; status = biosdisk (4, 0, 0, 0, 0, 1, buffer); status = biosdisk (0x16, 0, 0, 0, 0, 0, buffer); (!status) ? (printf ("Disketa u A:\n")) : (printf ("Disketa nije u A:\n")); return 0; } Sličan primer dat je u Borlandovom help-u ali on radi samo za prvi poziv. Ovo radi uvek. Inače umesto f-je 0x16, može da se očitava adresa 0x0490, odakle se mogu dobiti malo precizniji podaci o disketi.
cccc.395 pedjak, -> #391, pyramid
> Tvoje resenje je zanimljivo, ali umesto petljanja sa povratnom > adresom (to bas i nije uputno jer radim sa 286 extenderom) moze se > primeniti > int01: > mov ax,01 Au, ovo ne bi smeo da radiš, ukoliko pozivaš posle i stari interapt, jer se upravo ax reg koristi najviše kao identifikator neki funkcije bios/dos sistema. > Meni ipak vise odgovara hardverska provera (ne znam zasto)... Ali tu hardversku proveru ne bi smeo da ti omogući nijedan ozbiljan operativni sistem, jer samo bi on trebao da ima prava da direktno petlja sa hardverom.
cccc.396 pedjak, -> #389, postmast
> Da li neko zna nacin na koji bi se mogli prikazati razliciti > ekrani na dva monitora istovremeno?. U pitanju su razliciti podaci > i trebalo bi da oba ekrana budu u grafickom modu, mada moze pomoci i > nacin prikaza jednog grafickog i jednog tekst ekrana. Da li mozda > neko jedina kombinacija koja može da radi je herkules i vga.
cccc.394 pedjak, -> #388, driks
> Ovo dole bi trebalo da proverava da li su vrata na floppy-ju > zatvorena ili nisu, ali bas nesto nece da radi, naime i pri > otvorenim i zatvorenim vratima stalno setuje CF i stampa 6 (vrata > otvorena). > 'ajd pomozite. Da li koristiš neki program za keširanje ? Probaj da ga isključiš.
cccc.397 pyramid, -> #395, pedjak
>> > int01: >> > mov ax,01 >> >> Au, ovo ne bi smeo da radis, ukoliko pozivas posle i stari B! Stvarno greska... Trebalo je da pise: int01: push 1 jmp IntHandler a onda void interrupt IntHandler( ...registri..., IntNum );
cccc.398 mmitrovic, -> #387, pedjak
Ů█▀█Ţ p.p.s. rešenje koje je poslao smarkov je po meni najbolje, jer se Ů█▀█Ţ izbegava petljanje sa kontrolerom, a ujedno važi za sve vrste Ů█▀█Ţ interapta. Sad si me zbunio. Pa i ono što si ti poslao je petljanje sa kontrolerom ali ne sa PIC2 već sa PIC1. I PIC2 se može maskirati veoma jednostavno maskiranjem IRQ2 na PIC1 čipu (samim tim je blokiran ulaz sa PIC2 čipa) žovek je tražio kako da dođe do IRQ broja koji obrađuje u handleru. Ipak mu je bolje da podrži AT standard sa 15 IRQa nego samo XT sa 8.
cccc.399 moebius,
Dal' je neko negde video ili cuo nesto o TWAIN-u? Potreban mi je detaljan opis da nesto isprogramiram. Ajde budite dobri pa javnite sta znate.. P.S. Ako neko naidje na opis MIDI formata ..znate vec sta
cccc.400 pedjak, -> #398, mmitrovic
> Sad si me zbunio. Pa i ono što si ti poslao je petljanje sa > kontrolerom > žovek je tražio kako da dođe do IRQ broja koji obrađuje u handleru. > Ipak mu je bolje da podrži AT standard sa 15 IRQa nego samo XT sa 8. žovek je tražio kako može da detektuje hardverski interapt, posle se to izrodilo u bilo koji interapt.. :) E pa, ponuđeno je više rešenja, od kojih je po meni, najbolje dao smarkov, jer nema petljanja sa hardverom, sve se radi preko tablice interapta.
cccc.401 redakcija,
Da li neko poseduje BC++ v3.1? Glavi mi se pri instalaciji na sestoj disketi, pa ako moze pomoc...
cccc.402 postmast,
From: broker@setgate.setnet.co.yu (Predrag Supurovic) Subject: dva ekrana Date: Tue, 04 Oct 1994 11:31:08 IL>Programce se zove CTRALT, tu imas sve sto ti je potrebno za rad pod IL>dual monitorima :). Btw, malo teze ces prikazati grafiku na oba monitora. BB> Za taj program znam, ali nije to to. Potrebna mi je ideja, ili BB> jos bolje, izvorni kod koji ce to da omoguci. Dva monitora na jednom racunaru rade zahvaljujuci tome sto je adresiranje razlicito za tekst i graficki rezim. To znaci da na jednom mozes dobiti tekst a na drugom grafiku. Grafika na oba - sumnjam... ... BR> Dve zene i guska - Vasar!!! * Origin: Oreska BBS, UZICE = SF BIBLIOTEKA = SETNet: (38:101/101)
cccc.403 postmast,
From: smilic@fon (Sasa Milic) Subject: Re: cccc Date: Wed, 5 Oct 1994 13:30:18 GMT Stevan Markovic (smarkov@sezam.UUCP) wrote: : Komentar na tekst ZZ (Moja skola C-a, Racunari 102.) : : Osobina prosirivanja float-a u double za argumente bez prototipa nisu : izbor Microsofta. Ta stvar je eksplicitno definisana ANSI C : standardom. Svaki ANSI C kompajler ce pogresno preneti argument u : funkciju : void f(float x) { ... } : ako za f u pozivajucem modulu ne postoji prototip. Ne samo sto se float prosiruje na double, nego se i char i short prosiruju na int. Prosirivanje se vrsi kad god se ne zna tip argumenta, na primer kod funkcija sa promenljivim brojem argumenata (kod printf: %f stoji za broj u pokretnom zarezu; bez obzira da li se pri pozivu preda float ili double, bice konvertovan u double !). So, oprez kod koriscenja 'va_arg'. Sasa
cccc.404 postmast,
From: smilic@fon (Sasa Milic) Subject: Re: cccc Date: Wed, 5 Oct 1994 13:44:41 GMT Janko Stamenovic (janko@sezam.UUCP) wrote: : Neko je relativno skoro pitao kako da sazna da li je stdin ili : stdout bio preusmeren ili je konzola (ako sam zapamtio pitanje?) : Imao sam utisak da znam resenje, ali nisam znao odakle.;) Kopajuci po : rodenim sorsovima nadoh da sam takvu stvar napisao januara ove godine, : i cudo radi ovako (Borland C, MS DOS) Evo jos jedno resenje koje radi na unix-u: #include <stdio.h> #include <termio.h> int redir ( FILE *pf ) { struct termio savetty; if ( ioctl ( fileno ( pf ), TCGETA, &savetty ) == -1 ) return 1; else return 0; } main () { if ( redir ( stdin ) ) fprintf ( stderr, "Redirekcija stdin \n" ); if ( redir ( stdout ) ) fprintf ( stderr, "Redirekcija stdout \n" ); }
cccc.405 dejanr, -> #402, postmast
>> Dva monitora na jednom racunaru rade zahvaljujuci tome sto je adresiranje >> razlicito za tekst i graficki rezim. To znaci da na jednom mozes dobiti >> tekst a na drugom grafiku. Grafika na oba - sumnjam... Meni je ok radilo kada se u računar stavi jedna VGA i jedna Hercules kartica, moglo je na obe da bude šta treba. Jedino sam morao VGA da prebacim da radi u osmobitnom modu, što joj značajno degradira performanse. Otakada su VGA kartice postale VESA kompatibilne, žali Bože je vraćati ih na osam bita, dakle dva monitora se retko koriste.
cccc.406 jkpbvk,
Evo ga jedan demo koji je potpuno radjen u C++ 3.1 dfcdemo.zip
cccc.407 djelovic, -> #406, jkpbvk
> Evo ga jedan demo koji je potpuno radjen u C++ 3.1 Ne bi da zakeram :), ali demo *čega*, da li je pod Windowsima ili pod DOS-om, ...
cccc.408 jkpbvk, -> #407, djelovic
* Ne bi da zakeram :), ali demo *cega*, da li je pod Windowsima ili pod * DOS-om, ... Lakse je bilo da skines 40-ak Kb i da se sam uveris sta je no dobro. Demo radi pod dos-om i pokazuje uglavnom neke graficke mogucnosti. Evo ga txt fajl koji ide uz demo. This demo was written in Borland C++ 3.1 with some inline assembly, more to demonstrate what a high-level language can do on a PC than to show what a PC can do. It requires VGA and at least a 386, but a 486 is recommended. The demo should work on any standard VGA configuration. If it fails to run on your system, you have a pretty strange machine! There is no music in this demo. Press any key to skip parts, and Ctrl-C to quit to DOS. Date released: 8/29/93 Author: Icefox/DFC Author's address (Internet): mjakubow@drunivac.drew.edu
cccc.409 misham,
Potrebna mi je pomoć oko funkcije fillpoly iz BC 3.1. Naime zbog prirode programa potrebna mi je funkcija koja bi korektno osenčila poligon čije su dve stranice podudarne. Na primer poligon ograničen sldećim tačkama: (0,0) , (10,10) , (20,10) , (10,20) , (10,10) , (0,0) , (0,50) , (50,0) i (0,0) Kada upotrebim funkciju fillpoly ona osenči unutrašnji trougao umesto da osenči ceo trougao i da postoji rupa unutar trougla. Da li je ovaj bag otklonjen u BC 4.0. Probao sam istu stvar sa odgovarajućom funkcijom _polygon iz Watcom kompajlera i tamo to odlično funkcioniše. Ne znam kako se ponaša Microsoft-ov kompajler. Da li neko možda zna neku grafičku biblioteku u kojoj postoji neka funkcija koja bi rešila ovaj problem ?
cccc.410 dgrbic, -> #409, misham
>> (0,0) , (10,10) , (20,10) , (10,20) , (10,10) , (0,0) , >> (0,50) , (50,0) i (0,0) Probaj da zamenis redosled tackama (0,50) i (50,0), pa da vidis da ce da radi. Onda isto probaj kod Watcoma pa prijavi da li kod njega radi i tako :)
cccc.411 lucas,
Imam malih problema sa Borland C-om naime kada koristim naredbu SYSTEM (za rad sa dosovim naredbama), u okviru njegovog okruženja ne radi a kada source izkompajliram i startujem .exe fajl radi. Ima li ko odgovor, zašto?
cccc.412 moebius,
Yo! Jel neko pokusao da izbaci neku slicicu na dugme u TButton klasi 3.1 OWL, a sve to u cilju postizanja efekta poznatog kao toolbar? Ajde pomozite:) Dragan
cccc.413 omega, -> #411, lucas
Ţ Imam malih problema sa Borland C-om naime kada koristim naredbu Ţ SYSTEM (za rad sa dosovim naredbama), u okviru njegovog okruzenja ne Ţ radi a kada source izkompajliram i startujem .exe fajl radi. Pretpostavljam da je IDE pojeo memoriju potrebnu za dos shell... Postojala je neka direktiva koja je za to zaduzena, ali ne mogu da se setim trenutno...
cccc.414 postmast,
From: iznogud@Osmeh.FON.BG.AC.YU (Aleksandar Petrovic) Subject: Re: cccc Date: Mon, 17 Oct 1994 09:37:06 GMT David Kalinic (moebius@sezam.UUCP) wrote: : Jel neko pokusao da izbaci neku slicicu na dugme : u TButton klasi 3.1 OWL, a sve to u cilju postizanja : efekta poznatog kao toolbar? Koliko se secam, DJelovic je nesto o tome pisao u Racunarima. BTW u OWL 2.0 imas vec napravljenu klasu toolbar (tamo se ona zove TSpeedBar, ako se dobro secam), a vrlo je lako napraviti i efekad iz Worda - da se dvostrukim klikom na toolbar on pretvori u 'plivajucu paletu'. Pokusaj! -- ++
cccc.415 moebius,
> Koliko se secam, DJelovic je nesto o tome pisao u Racunarima. > BTW u OWL 2.0 imas vec napravljenu klasu toolbar (tamo se ona > zove TSpeedBar, ako se dobro secam), a vrlo je lako napraviti Hvala, a u kojim racunarima :)? Dragan
cccc.416 lucas, -> #413, omega
>> Pretpostavljam da je IDE pojeo memoriju potrebnu za dos shell... >> Postojala je neka direktiva koja je za to zaduzena, ali ne mogu da >> se setim trenutno... Šta znam u dosu imam 633 od 640 kb osnovne memorije slobodno .... Ajd',ako možeš seti se kako bi to išlo.
cccc.417 omega, -> #416, lucas
Ţ Ajd',ako mozes seti se kako bi to islo. Makro je $MEM. Ja sam ranije sa tim pokusavao u BP-u, ali nije islo :( Probaj u BC-u, pa ako uspes, javi.