PCPROG.3

26 Jul 1993 - 22 Apr 1994

Messages - clipper

clipper.927 ndragan, -> #918, fric
/ ono što je protureno kroz makro ima smisla; error bupne tek / kad se makro lepo razvije :) Nisam rekao da to ne zahteva stanovitu disciplinu ;). Ali je zato moćna stvar kad uklaviriš šta sve možeš da uradiš. / U praksi, makroe i dalje koristim :) ponekad kad me mrzi da / provalim kako bih isto uradio sa kodnim blokovima. Ama u čemu je stvar sa kodnim blokovima? Samo čujem priče o tome a niko da provali poentu. Bue_ Ndragan
clipper.928 dvesic, -> #921, bulaja
Naravno da moze ! Dovoljno je da ispred [ MM] dodas \ i resen problem ! (provaljeno probanjem ne znam da li pise i u dokumentacijMi) Pozdrav, Dejan. P.S. Posto odgovaram On-Line, pitanje je bilo na referenciranje elemenata niza u xcommand/xtranslate direktivama pretproc.
clipper.930 djelovic, -> #924, nbatocanin
> Strukture on ima: kako drugačije da zoveš ovo: {1, "ABC", Date()}. Ja to zovem "niz" :). Clipperovi nizovi u koje može svašta da se trpa pri dinamičkom pogledu (objekti i tokovi podataka) na sistem možda i liče na strukture, ali u statičkoj slici sistema (procedure i podaci) oni su kilometrima daleko. Struktura je, kada se definiše, novi tip podataka potpuno ravnopravan sa onim koje neki jezik već nudi. Ako uzmemo da je pravilan dizajn "data driven", onda je jasno da su strukture veoma bitne jer omogućuju da se tipovi realnih objekata, klase, što bolje preslikaju u program. U vezi Clipperove slabosti sa tipovima podataka: Ameri imaju izreku "when the only tool you've got is a hammer, everything starts looking like na nail." Strašno često vidim Clipper programere kako koriste tabele tamo gde bi mala uvezana lista ili nešto slično bilo na mestu :(. Znate li vi ljudi za itša drugo sem tabela? :) > ;) E, ovde se ne slažemo. Meni čak odgovara netipiziranost. Izgleda > da je najbolje rešenje zlatna sredina primenjena u VO: 'oš > tipizirane, 'oš netipizirane podatke, pa biraj :) Jel znaš kako je nastala objektna orijentacija? Iz potrebe! Naime, strukturirani programi su udarili u zid kada su došli do nekih 100,000 linija. Postali su užasno teški za održavanje i proširivanje, a često se dešavalo da jedna ispravljena greška unosi pet novih u program. Iz istih razloga je nastalo strukturirano programiranje, jaka tipizacija podataka, provera argumenata pri pozivu funkcije i slične "moderne" tekovine: da bi se programi preko neke kritične veličine lakše održavalii proširivali. Rešenje koje nudi jaku tipiziranost a u isto vreme i veliku slobodu pri manipulaciji podacima jeste dinamička tipizacija koju implementira recimo Smalltalk, a moja opklada je da će je implementirati i Clipper kroz verziju-dve. > Tačno, ima to nedostataka. Međutim, imaj u vidu pri proceni Clipper-a > da su neke stvari zaista originalne: pretprocesor, koncepcija core > jezika kome pretprocesor daje finalni izgled; kod blokovi - jedna > zaista odlična ideja - *akcije* koje se tretiraju kao podaci (sasvim > u duhu OOP-a); potpuno modularna struktura: pristup bazi podataka, > terminal, GET sistem, obrada grešaka... Naročito sistem za obradu > grešaka. Mane koje Clipper ima su većinom zaostaci iz dBase dana kojih će se on sa vremenom rešiti. Clipper ima sjajnu budućnost jer je interpretiran, što mu omogućuje fleksibilnost kakvu kompajlirani jezici nikada neće moći da imaju. Kodni blokovi su upravo odličan primer toga što interpreter može da uradi dok kod kompajlera to ide dosta nategnuto, kroz pointere na funkcije. Toliko mi se sviđaju da ću da poludim što ih C++ nema :). P.S. GET sistem baš i nije neki argument u korist Clippera, jer je: a) prevaziđen b) lako se implementira u bilo kom jeziku c) ne nudi ništa posebno Takođe, obrada grešaka u Clipperu je zbog toga što je interpeter zaista dobra, ali ima i boljih. Ada već odavno a C++ odskora implementiraju izuzetke, exceptions, koji de facto predstavljaju najbolji način za kontrolu grešaka do danas. čivi bili pa videli.
clipper.929 djelovic, -> #920, drdjokic
> Imam sledeci problem. U mrezi koristim svoj program, kada posaljem stampu > na stampac on ne reaguje. Stampa tek kada izadjem u DOS. Isti problem imam > i sa nekim komercijalnim softverom. Sta da radim ? Ako misliš na mrežni štampač, on štampa tek posle određenog vremenskog time-outa. Možda je u tome problem?
clipper.932 herak, -> #920, drdjokic
> Imam sledeci problem. U mrezi koristim svoj program, kada posaljem stampu > na stampac on ne reaguje. Stampa tek kada izadjem u DOS. Isti problem imam > i sa nekim komercijalnim softverom. Sta da radim? Ne znam o kojoj mreži je reč, ali ako je Novell, ovo se najčešće dešava zbog dve stvari: 1) Nije dobro (ili uopšte) startovan capture (mada sumnjam). 2) Nije zatvoren lpt port. Ovo drugo je verovatnije, jer sudeći po tome da ipak štampa kada se normalno izadje u DOS, a to je trenutak kada program zatvara sve fajlove, strimove (lpt port je jedan od njih), vrata, šlic... Pogledaj, daklem, svoju funkciju za štampanje i po izlasku iz funkcije (potprograma) zatvori port. Kliper, na žalost, ne znam, tako da ne znam ni kako, ni da li se za štampanja prave posebne funkcije ili postoje gotove koje otvaraju port, štampaju...Simptomatika je, medjutim, tipična tako da mislim da će ti ovo pomoći. Pozdrav, Herak.
clipper.934 kermit, -> #920, drdjokic
Uzmi bilo koju biblioteku za rad u mrezi i pornadji komandu koja daje znak da je stampanje zavrseno u netto mislim da bese ft_flpt() flush lpt port i tvoj problem je resen !!! Kermit
clipper.935 fric, -> #920, drdjokic
> Imam sledeci problem. U mrezi koristim svoj program, kada > posaljem stampu na stampac on ne reaguje. Stampa tek kada > izadjem u DOS. Isti problem imam i sa nekim komercijalnim > softverom. Sta da radim ? > > Hvala u napred ! Na početku štampe stavi SET PRINTER TO cPrintPort Na kraju štampe stavi samo SET PRINTER TO You are well come !
clipper.936 dr.grba, -> #927, ndragan
>> Ali je zato moćna stvar kad uklaviriš šta sve možeš da uradiš. Da li će mi neko objasniti kako se može raditi bilo šta kad se uđe u klavir? Pa još ako je pijanino, bože blagi... >> Ama u čemu je stvar sa kodnim blokovima? Samo čujem priče o tome a >> niko da provali poentu. Pa u tome je i poenta, da ne shvatiš u čemu je stvar. Je*eš jezik bez takvog elementa. P.S. Sorry, folks, moram malo da udaram kontru komšiji, i on peca nas (:
clipper.937 snemcev, -> #925, bulaja
>> Baci ga meni na mail :), pa ako može da ide u dir (a trebalo bi >> da može:), prebacicu ga. A ako ne može, opet znaš gde ćeš ga prebaciti ;))
clipper.938 vlaslo,
Evo saljem vam moj skromni program, pa ga vi upotrebite potrebi cu :-) spec.zip
clipper.939 nbatocanin, -> #919, vlaslo
> da li neko moze da mi objasni oblik ntxXXX.obj filea u clp > 5.2 jer zeleo bih da napravim index za madjarski jezik. Šta podrazumevaš pod NTX za mađarski? Ako hoćeš sortiranje po nekom kodnom rasporedu, dovoljno je da napraviš par funkcija.
clipper.940 nbatocanin, -> #921, bulaja
> :) već me interesuje da li #command/#translate omogućavaju > direktan pristup članovima niza? a\[ i \]
clipper.941 nbatocanin, -> #923, dsisic
> Stigao je patch za SIXCDX 1.5. Po nekom mom rezonu bilo bi > OK da ga tutnem ovde, ako ni to ne moze, bicu dostupan > preko mail-a. To! Moram javno da izjavim da je SIx RDD jedan od najboljih proizvoda koji sam ikada video :)
clipper.942 cnenad, -> #926, bulaja
ŁŁŁ Nemam pojma, uopšte ne koristim MESSAGE :)). U dokumentaciji si naveo da ako koristim CL 5.01. BUMENU.LIB je potrebno prevesti ponovo. Šta sve tačno treba uraditi ?
clipper.943 rzoltan, -> #918, fric
/ ono što je protureno kroz makro ima smisla; error bupne tek / kad se makro lepo razvije :) Nisam rekao da to ne zahteva stanovitu disciplinu ;). Ali je zato moćna stvar kad uklaviriš šta sve možeš da uradiš. / U praksi, makroe i dalje koristim :) ponekad kad me mrzi da / provalim kako bih isto uradio sa kodnim blokovima. Ama u čemu je stvar sa kodnim blokovima? Samo čujem priče o tome a niko da provali poentu. Bue_ Ndragan
clipper.944 ndragan, -> #924, nbatocanin
/ smetaju "doslovni argumenti" (USE Test, a ne USE "Test"), ali i to je Da, to je i meni smetalo kad sam se prvi put sreo s Kliperom (u leto 88, dok je S87 još bio svež). Onda sam ukapirao da tih implicitnih navodnika ima tušta i tma, i da je kompajler dovoljno pametan da ih sam posadi gde treba. Iduće godine sam uleteo u foks i uopšte se nisam čudio. Nek mašina odradi svoje, a ja imam o čemu da vodim računa. Bue_ Ndragan
clipper.945 ndragan, -> #921, bulaja
/ Pod rešenjem ne podrazumevam pravljenje neke funkcije kao što je: Al me vučeš za hezik: AELEMENT(<array>, <expN1> Š, <expN2>Ć) ─────────────────────────────────── Returns array element's number from its row and column subscripts. Return value - Numeric ─────────────────────────────────── Some FoxPro functions (ACOPY(), ASCAN() , ASORT() ... ) that manipulate two-dimensional arrays require that elements be referred to by their element number. AELEMENT() facilitates conversion from subscripts to an element number for these functions. The corresponding row and column subscripts may be returned from an element number with the ASUBSCRIPT() function. Bue_ Ndragan
clipper.946 bulaja, -> #942, cnenad
│U dokumentaciji si naveo da ako koristim CL 5.01. BUMENU.LIB │je potrebno prevesti ponovo. Šta sve tačno treba uraditi ? └─── Clipper BuMenu.prg /n /w TLib BuMenu.lib +-BuMenu.obj // ili Lib umesto TLib
clipper.947 dvesic,
Cao ! Vidim da ste se zainteresovali za kodne blokove, a Bulaja nesto zauzet, pa da mu pripomognem malo :) Kodni blok je totalno nova koncepcija u Clipper jeziku. Kodni blok je i tip podatka i inline funkcija. Tacnije kodni blok je iskompajlirani deo koda na koji se moze referisati. Osobine kao podatak : Moze se dodeljivati promenljivama, prenositi kao argument funkcijama i vratiti kao rezultat funkcije. Kao funkcija : Moze imati argumente, i moze vracati rezultat svog izracunavanja. Posto ovo gore sto napisah ni meni nije bas najjasnije, probacu kroz primere : Definicija kodnog bloka je : { | opcionalni parametri odvojeni zarezom | Telo kodnog bloka } Izracunavanje kodnog bloka se radi preko xxEval funkcija : Eval( cbName [,parametri kodnog bloka] ) Rezultat je izracunata vrednost bloka za date parametre, ako ih ima. aEval( aNiz, cbIme ,[nStart],[nEnd] ) Kodni blok se izracunava sa svaki element niza pocev od nStart do nEnd (ako ih nema, ceo niz je u pitanju). Blok mora (cuj, mora - treba) imati definisan jedan formalni parametar; on zamenjuje elemenat niza koji mu se sukcesivno prosledjuje. dbEval .... Pogledajte u Norton Guid-u Primeri : A := {|| Qout( RecNo() / LastRec() ) } Eval( A ) // Daje procenat predjenosti baze QOut( Eval( {|x,y| x + y } , 1, 2) ) // daje 3 ;) Vise naredbi u kodnom bloku se odvaja zarezima : A := {|x,y,z| QOut("Argumenti su ") , ; QOUT(x,y,z) } Sada kada ste dobili predstavu (dal' ste ? ;) ) o tome kako se definisu i izracunavaju, pitanje je : Cemu to sluzi, a uz to i ne radi ? Primena je neverovatna. Preko 40% svih komandi i funkcija je realizovano preko kodnih blokova : SUM, AVERAGE, DELETE FOR, REPLACE FOR... za detalje, koga zanima, pogledajte fajl \clipper5\include\std.ch (standardni header). U prakticnom programerskom zivotu, omogucava neverovatnu fleksibilnost. Skoro na svakom mestu gde su makroi mogu se zameniti kodnim blokom. Pri tome se kompajliraju samo jednom, izvrsavaju trenutno. Prakticni primeri : Neka je vas funkcija definisana na sledeci nacin : MojaFunkc(.......,cImeFunkcije) gde je cImeFunkcije string sa imenom funkcije koji preko makroa izvrsavate tj. &cImeFunkcije Ako ste pozivali funkciju sa MojaFunkc(........,"NekaFunk()") biva pozvana i izvrsena NekaFunkc(). Sada je dovoljno zameniti &cImeFunkcije sa Eval( cImeFunkcije) , "NekaFunk()" sa {|| NekaFunk() } i dobijate ekvivalent sa gornjim uz mnogo vise pogodnosti. Ili, napravite opsti Browse-r nad bazom, koji bi za razne baze trebao razlicito da reaguje na odredjene tastere. Nista lakse; neka jedan od parametara vaseg browse-ra bude dvodimenzionalni niz koji sadrzi parove { nKey, cbBlok } ; sada, ako se pritisne taster nKey izvrsi kodni blok cbBlok : funkciju, brisanje sloga, RECALL sloga, ili bilo sta drugo sta vam padne na pamet : Function Browser(....,aAkcije) ^--------- pominjani dvodimenzionalni niz Primer poziva : Browser(....., { { K_DEL, {|| If( Deleted(), ; dbDelete(), ; dbRecall ) },; { K_ENTER, {|| EditRec() } , ... }) // Deo koda koji obradjuje pritisnuti taster. A := Inkey (0) If ( Tmp:= aScan( aAkcije, {|x| (x[1]==A) } ) <> 0 Eval( aAkcije[Tmp][2] Endif Zar nije lepo i elegantno ? Raspisah se. Ako nekog jos nesto interesuje ( kako deo koda sa makroom zameniti kodnim blokom i sl ) nek samo samo pita. Budite pozdravljeni ! Dejan.
clipper.948 dejanr, -> #947, dvesic
Hvala na zanimljivom i korisnom opisu :)
clipper.949 ficus, -> #913, djelovic
:)> Sta mu konkretno zameras? :) Uffff... puno toga. Clipper je, po mom miseljnju, najvise osakacen dBase :) kompatiliblnoscu, pa tamo i treba potraziti njegove najvece mane: mali :) broj osnovnih tipova podataka, nepostojanje struktura i unija, :) nekonzistentnu i losu sintaksu, slabu tipiziranost podataka i sl. Sto se tipova podataka tice ajd reci koj tip ti konkretno fali sto se struktura tice nizovi su istovremeno i strukture p.s. sto se unija tice probaj: local a:="aaaaa" //a je string ? a a:=1 //a je numeric ? a a:=ctod("01.01.93")//a je datum ? a to ce kolko se secam da radi tako da sa te strane gledista clipper je mnogo iznad ostalih prg jezika naravno to smanjuje preglednost prog. i... ali cisto reda radi prava zamerka na clipper je: ZASTO CLIPPER PRIHVATA SAMO PRVIH 10 SLOVA ZA NAZIV IDENTIFIKATORA TJ KREIRAJ_FAJL_KONTA I KREIRAJ_FAJL_NALOGA SU ZA NJEGA ISTE F-IJE POSTOJI LI NEKI NACIN DA GA UBEDIM DA RADI DRUKCIJE AKO POSTOJI KOJI JE AKO NE NIKOM NISTA. :(
clipper.950 todorp,
Evo i ovde da pitam: > =============================== > 12.170 PC.PROG.3:baze.podataka > todorp, 10.02.Cet 15:34, 207 chr > --------------------------------------------------------- > Hi! > Da li neko ima neke rutine u C-u za rad sa .dbt fajlovima (znaci dbaseIII memo > polja), ili barem ako ima strukturu .dbt fajla. I need it badly. Zar je moguce da niko nema pojma?
clipper.951 bulaja, -> #949, ficus
│Sto se tipova podataka tice ajd reci koj tip ti konkretno fali └─── Vrlo jednostavno :), fale integeri (short, long,..).
clipper.952 bulaja,
**** new file **** R:\IBMPC\CLIPPER\*.* ---------------------- six15_p1 zip 59852 SIx Driver 1.5 Fix #1 Maintenance Update (SIXCDX, Intl) NOTE: This patch is for the INTERNATIONAL release of SIXCDX v1.5 only, and does NOT apply to the US SIXCDX v1.5 release. This ZIP file includes patch files for updating v1.5 of The SIx Driver (SIXCDX, Int'l) and Mach SIx to Maintenance Update #1. This new release is still v1.5, but the time stamps of the updated files have been changed indicate the newer revision. =========================================================================== This maintenance update corrects the following items: 1. Opening .DBF/.DBT without DBT.OBJ would NOT generate an error. 2. Associated .INI file not loaded if data file extension was not .DBF. 3. Sx_IndexCount() could return incorrect value in some cases. 4. Encrypting a previously decrypted DBF file could fail in some cases. 5. 'TRIGGER' keyword in .INI file was not setting new trigger. 6. ZAP with DBT.OBJ would produce an incorrect .DBT file. 7. Sx_DBFencrypt() was not encrypting .FPT if password parameter was not specified. 8. With a SCOPE set to <higher than any key>, Sx_KeyCount() would move the record pointer. 9. Calling Sx_KeyNo() repeatedly with a SCOPE active would eat memory. 10. A GPF error would occur (Under ExoSpace or Blinker 3.0 Protected Mode) when doing a SET TAG TO following deletion of another TAG. 11. Sx_KeyData() would return incorrect data w/ non-selected index. 12. USE w/ Structural .CDX would cause GPF w/ Blinker 3.0 and Clipper 5.01a. This is corrected with the BLXCDX51.OBJ file, which should ONLY be used with Blinker 3.0 and Clipper 5.01a. ------------------ <Thanks to dsisic>
clipper.953 nbatocanin, -> #927, ndragan
> Ama u čemu je stvar sa kodnim blokovima? Samo čujem priče > o tome a niko da provali poentu. Bilo je rasprava o tome ovde, da ne ponavljam. Ukratko, kodni blokovi su obične funkcije bez imena koje se mogu tretirati kao i ostali podaci. Osnovna namena je za zadavanja metoda objekata i za definisanje novih naredbi. Na primer, mogu se dodeljivati promenljivim: b := {|x,y| x+y } Ova naredba kodni blok (bezimenu funkciju) za sabiranje dva broja dodeljuje b-u. Takve funkcije se mogu i izvršavati: ? Eval (b, 4, 6) // 10 U suštini, radi se o pokazivačima na funkcije. Međutim, sintaksno rešenje pruža veoma lepe mogućnosti. Najbolje je što se mogu prosleđivati funkcijama: Sort (a, {|x,y| x <= y } ) Značenje: sortiraj niz A pri čemu je kriterijum za poređenje zadat kodnim blokom tim i tim. Ukratko, podaci sad mogu da sadrže i informacije tipa "kako", a ne samo "šta".
clipper.954 nbatocanin, -> #930, djelovic
> Struktura je, kada se definiše, novi tip podataka potpuno ravnopravan > sa onim koje neki jezik već nudi. U čemu se ogleda ta ravnopravnost? Pa po ovoj definiciji ni čist C ni Pascal nemaju strukture, jer su osnovni tipovi favorizovani - za sve izvedene tipove ne mogu se definisati operatori ;) Ozbiljno, Clipper-u nedostaje samo jedna stvar da bi imao prave slogove: imenovanje elemenata niza. Međutim, to su upravo objekti bez metoda. E, sad još samo da sačekamo 6.0 pa da dobijemo naredbu za kreiranje klasa ;( > :(. Znate li vi ljudi za išta drugo sem tabela? :) Kažu knjige: relaciona baza podataka je model realnog sistema gde su svi realni objekti predstavljeni pomoću tabela i ničeg drugog sem tabela ;) > Rešenje koje nudi jaku tipiziranost a u isto vreme i > veliku slobodu pri manipulaciji podacima jeste dinamička > tipizacija koju implementira recimo Smalltalk, a moja > opklada je da će je implementirati i Clipper kroz > verziju-dve. Već jeste: po prvim vestima tako upravo radi VO. > Kodni blokovi su upravo odličan primer toga što > interpreter može da uradi dok kod kompajlera to ide dosta > nategnuto, kroz pointere na funkcije. Zašto bi se kodni blokovi lakše napravili u interpreterima? Njihova prednost u Clipper-u je upravo to što se prevode (dobro, u p-kod), a ne interpretiraju kao makroi. > P.S. GET sistem baš i nije neki argument u korist > Clippera, jer je: a) prevaziđen > b) lako se implementira u bilo kom jeziku > c) ne nudi ništa posebno a) Možda ako misliš na nivo SAY..GET b) Da, ali bi imao da poludiš od pokazivača na sve i svašta ;) hint: @ 0,0 GET x WHEN x > y READER MyReader() c) Šta bi ti dodao? Ja još nisam našao nešto što mi je zatrebalo, a da dodavanje nije bilo na granici trivijalnog. > Takođe, obrada grešaka u Clipperu je zbog toga što je > interpeter zaista dobra, ali ima i boljih. Ada već odavno > a C++ odskora implementiraju izuzetke, exceptions, koji de > facto predstavljaju najbolji način za kontrolu grešaka do > danas. Stao sam i razmislio: ne vidim vezu između Error sistema i interpretera (možda sam nešto prevideo?). Kada se desi greška u programu, nafiluje se jedan slog podacima o greški i pozove aktuelna procedura za obradu greške. E, a drugi nivo sa BEGIN/END SEQUENCE je takođe čist: kada se dođe do BREAK, očisti se stek i ide se na sledeću naredbu.
clipper.955 cnenad, -> #946, bulaja
ŁŁŁ TLib BuMenu.lib +-BuMenu.obj // ili Lib umesto TLib Gde naći TLib ili LIB ? Linkovati sa ovim priložnim BUMENU.LIB-om od verzije 1.4 ?
clipper.956 dejanr, -> #949, ficus
>> ZASTO CLIPPER PRIHVATA SAMO PRVIH 10 SLOVA ZA NAZIV >> IDENTIFIKATORA TJ KREIRAJ_FAJL_KONTA I KREIRAJ_FAJL_NALOGA SU >> ZA NJEGA ISTE F-IJE >> POSTOJI LI NEKI NACIN DA GA UBEDIM DA RADI DRUKCIJE AKO POSTOJI >> KOJI JE AKO NE NIKOM NISTA. :( Nikom ništa :(
clipper.957 ficus, -> #930, djelovic
:)> Strukture on ima: kako drugacije da zoves ovo: {1, "ABC", Date()}. :) :) Ja to zovem "niz" :). Clipperovi nizovi u koje moze svasta da se trpa pri Pa sta onda fali tom nizu jos par define-ova i eto ti struktura uzgred a sta bi sa oClip-om on nudi objekte(klase) i eto ti opet struktura :) Strasno cesto vidim Clipper programere kako koriste tabele tamo gde bi :) mala uvezana lista ili nesto slicno bilo na mestu :(. Znate li vi ljudi za :) itsa drugo sem tabela? :) Sta podrazumevas pod tablama ako su to visedimenzionalni nizovi u clipperu je niz istovremeno i lista :) Jel znas kako je nastala objektna orijentacija? Iz potrebe! Naime, :) strukturirani programi su udarili u zid kada su dosli do nekih 100,000 ok ali ja smatram da ako ja u programu od 10.000 linija mogu da se snalazim sa komentarom tu i tamo i bez pisanja dokumentacije... uzgred imas klasu podatak koju naslede podatak_int i podatak float napises funkciju koja prima objekat klase podatak jer ti odgovara da prenosis i int i float e a onda definises podatak string i ode sve u pi*du materinu. Moje misljenje je da se svaki program moze napisati i neobjektno ali obicno klase i objkte koristim iskljucivo zbog preglednosti.Mada tu i tamo i malo nasledjivanja i virt. fija nije na odmet ali... to trenutno jako malo programera koristi dodacu nazalost. :) linija. kod kompajlera to ide dosta nategnuto, kroz pointere na funkcije. :) Toliko mi se svidaju da cu da poludim sto ih C++ nema :). Meni se vise svidja pretprocesor koj istini za volju u clipperu i ne koristim puno u c-u bi mozda pravio nepregledne komande ali i dalje mislim da je kao mogucnost veoma dobra sra znate jednog dana "D++" ;))) Druga stvar koja mi fali u c-u je dobra podrska za baze podataka mislim na nesto mnogo bolje od onog u clipperu ali :((( uz to bi mogo i jedan fini user interface.
clipper.958 ficus, -> #927, ndragan
:) Ama u cemu je stvar sa kodnim blokovima? Samo cujem price o tome a niko :) da provali poentu. Code block: nesto slicno makrou i slicno funkciji u principu mozes da pozoves funkciju da izracunas izraz itd.. primeri: b1={||blockfunct()} i sada mozes da b1 koristis u naredbama aeval dbeval itd i onda ti se za svaki elemenat (slog) izvrsi funkcija blockfunct. mogu primati argumente npr {|x,y|max(x,y)} i vracaju vrednost slicno ko f-ija zgodni su za prenos isto ko i makroi ali su mnogo brzi jer se prevode pri kompajliranju... Rezime: Zaboravi na makroe ako nisi preterano naviko na njih i ako ti bas ne treba nesto sasvim posebno u svkom slucaju nauci code blockove jer ti omogucavaju dosta toga a i brzi su i ako ti bas treba makro a neces ga izvrsiti samo jednom probaj nesto ovako: block:=&("{||"+tekst tvog makroa+"}") for i:=1 to 1000 eval(block) next ovo ce jednom prevesti makro u blok pa ga ti upotrebljavaj ko blok kolko oces bice brze.
clipper.959 dr.grba, -> #957, ficus
>> uzgred a sta bi sa oClip-om on nudi objekte(klase) ... Jeste, nudi *implementaciju* klasa na korisničkom nivou. Ali niko ne garantuje da će ta implementacija biti kompatibilna sa eventualnim pravm sintaksom rada sa objektima u budućnosti. žak čovek nije načisto da li bi se igranje sa #command i #translate u takvoj situaciji isplatilo... Zato, bar što se mene tiče, čekam nešto pravo...
clipper.961 neman,
Pre nekog vremena je neko napisao poruku u kojoj je prijavio slucaj da CDX drajver lose zapisuje indeksnu datoteku na Novell Lite mrezi ( brisao sam poruke u SORu pa nisam lupio reply :). Danas sam pustio test program ( sto sam ranije obecao da cu da uradim pa nisam :( )koji je upisivao jednu vrednost u polju kljuca a drugi upisivao drugu vrednost. Obe vrednosti polja su fiksne, "a" za jedan racunar a "b" za drugi racunar. Programi su se naravno izvrsavali paralelno :). I jedan i drugi su u bazu upisali po 1000 slogova, i to ispravno i nisu se javljali mali kinezi ;). To sam proveravao iz DBASEa. Kada sam pokusao da sumiram iznose drugog polja ( za oba programa to je bilo 10 ) program je video samo jednu grupu zapisa, bilo "a" bilo "b", u zavisnosti od toga koji je program kasnije zavrsio rad !?!!?. Prvo popunjavanje baze sam vrsio samo sa APPEND BLANK, bez provere gresaka ( nije ih ni bilo ), a zatim sam iza svako REPLACE dodao DBCOMMIT(); UNLOCK par. Za CDX datoteku to nije bilo dovoljno :((. Programcic sam testirao samo jednom, u zurbi, na kraju danasnjeg pristupa mrezi, ali mislim da nije bilo drugih gresaka. Ovaj bag, ukoliko postoji, iz daljeg razmatranja promene indeksnog drajvera :) dafinitivno izbacuje CA CDX. Ocekujem da dobijem za neki dan SIXCDX :) pa cu da nastavim testiranje. neman
clipper.962 neman, -> #961, neman
A da, mreza je Novell Netware 3.11, 10-tak radnih stanica fercera 8 - 10 sati dnevno, ima ugradjen bridz i uospte se ne ponasa ;) neman
clipper.963 aquarius,
Evo malo poboljsane verzije Num2Calc, koja ispunjava neke od zahteva koji su postavljeni ovde na Sezamu, samo se fajl sada zove NLabSGRd. Sto se mene tice ovo moze i u Clipper dir, naravno ako Bulaja nadje za shodno. Ako ima primedbi, kritika, sugestija, tu sam... :) Aqarius nlabsgrd.zip
clipper.964 nbatocanin, -> #950, todorp
>> Da li neko ima neke rutine u C-u za rad sa .dbt fajlovima > (znaci dbaseIII memo Trebalo bi da ima u Code Base.
clipper.965 ndragan, -> #953, nbatocanin
/ U suštini, radi se o pokazivačima na funkcije. Međutim, sintaksno / rešenje pruža veoma lepe mogućnosti. Najbolje je što se mogu Pa onda ja to imam u foksu odavno, samo što više ne moram to da trpam kao makro zamenu, nego nešto a la by reference. Već smo imali varijante sa formulama spakovanim u polja u bazi, ili sa imenom procedure u bazi. Foks svaki .prg kompajlira kad ga spazi prvi put, tj samo jednom. Zato ako u slogu u polju 'metod' piše 01, a u programu piše _proc='metod'+metod do (_proc) Rutina metod01.prg se kompajlira samo jednom, i radi en puta. E sad, samo mi je problem što moram da pazim da mi ne naiđe neko 'šđ' u tom polju, jer rutina metodšđ sigurno ne postoji. Funkcija Eval isto postoji u foksu, i radi nad izrazom tipa string, a izraz koji se nađe u njemu može da bude šta bilo (ko nekad na spektrumu - mogao si da kucaš ime promenljive na inputu). Da li će se kompajlirati unapred ili u trku, u foksu uopšte nije bitno, traje između pola trenutka i pet sekundi, zavisno od makine, i radi se samo jednom (interno sravnjuje vremena na sorsu i .fxp kompajliranom fajlu). Zato mogu da pravim program koji piše rutinu, kompajlira je i odmah izvodi :) Bue_ Ndragan
clipper.966 ndragan, -> #949, ficus
/ ZASTO CLIPPER PRIHVATA SAMO PRVIH 10 SLOVA ZA NAZIV / IDENTIFIKATORA TJ KREIRAJ_FAJL_KONTA I KREIRAJ_FAJL_NALOGA SU Sa istim se pati i foks - razlog je u kompatibilnosti sa dbejzom, inače bi to odavno bilo 20 ili 32. Bue_ Ndragan
clipper.967 ndragan, -> #954, nbatocanin
/ c) Šta bi ti dodao? Ja još nisam našao nešto što mi je zatrebalo, a / da dodavanje nije bilo na granici trivijalnog. Ako se kliperu nema šta dodati, zašto svi kliperaši jure biblioteke? Dobro, ovo je bila zlobna foksovska zajebancija. Koncepcija je takva, jelda? Kliper mi nekako najviše liči na VW bubu - kao auto nije bog zna šta, ali kakve divne bagije možeš da napraviš od njega... Ajd, da ne zvuči ružno, primerenije je poređenje sa PC računarom - osnovna verzija radi, a ko voli još i VGA, SB, CD-ciga itd... Foks mu više dođe ko ono kad su dvoje matorih Amera bili u Veneciji, pa ih kući posle pitali kako im se sviđa varoš, a oni "pa bili smo u kampu, i tamo smo imali sve, i bioskop, i poslastičarnicu, i piceriju, i pijacu... uopšte nijednom nismo morali da idemo u grad". Bue_ Ndragan --> od svih rasa pasa najbolje preferiram foks enterijera
clipper.969 ficus, -> #954, nbatocanin
:) Clipper-u nedostaje samo jedna stvar da bi imao prave slogove: :) imenovanje elemenata niza. Medutim, to su upravo objekti bez metoda. :) E, sad jos samo da sacekamo 6.0 pa da dobijemo naredbu za kreiranje :) klasa ;( #define ??? :) Zasto bi se kodni blokovi lakse napravili u interpreterima? Njihova :) prednost u Clipper-u je upravo to sto se prevode (dobro, u p-kod), a :) ne interpretiraju kao makroi. a sta bi sa nebih se slozio da je clipper interpreter mada nije ni cist kompajler on je nesto izmedju naprimer on ce ovo: {|x|f(x)} izrsiti ko kompajliran kod ali ce zato ovako nesto: cb:=&("{|x|f(x)}") pozati interpreter a zatim raditi ko da je c.b. tj da je kompajliran sad druga je stvar sto clipper ima svoje bubice o cuvanju promenljivih i prosledjivanju parametara ali ... :(( :)))
clipper.968 ficus, -> #951, bulaja
:) Vrlo jednostavno :), fale integeri (short, long,..). A sta fali ugradjenim tipovvima podrazumevam da ako vec radis bazu podataka netreba da budes sitnicav sa memorijom i brzinom posto netreba da se bavis animacijom u realnom vremenu nego obicnim sabiranjima i oduzimanjima. p.s. jel nekom trebalo mnozenje ;)))))
clipper.970 djelovic, -> #968, ficus
> A sta fali ugradjenim tipovvima podrazumevam da ako > vec radis bazu podataka netreba da budes sitnicav sa memorijom > i brzinom posto netreba da se bavis animacijom u realnom vremenu > nego obicnim sabiranjima i oduzimanjima. Moje tabele (urađene na C++-u) su tipično 30-40% kraće od ekvivalentnih urađenih na Clipperu. Isto toliko su i brže, a sve to zbog "manjih" slogova koje C++ zahvaljujući svojim tipovima podataka ima.
clipper.971 bulaja, -> #963, aquarius
│Evo malo poboljsane verzije Num2Calc, koja ispunjava neke od zahteva │koji su postavljeni ovde na Sezamu, samo se fajl sada zove NLabSGRd. └─── Prebačeno u CLIPPER dir, thanks.
clipper.972 ficus, -> #970, djelovic
Moje tabele (uradene na C++-u) su tipicno 30-40% krace od ekvivalentnih uradenih na Clipperu. Isto toliko su i brze, a sve to zbog "manjih" slogova koje C++ zahvaljujuci svojim tipovima podataka ima. ---- Jest ali zato se ispostavi da vise int nije dovoljan da treba long i :((( Salu na stranu to si u pravu ali ako si bas sitnicar ima neceg slicnog i u clipperu pogledaj malo nanforum toolkit. p.s. Cisto da napomenem da nebi neko pomislio da sam iskljucivo na strani clippera i ja vise volim c++ ali se trudim da budem objektivan. Ono sto bi bilo zanimljivo napisati je baza podataka koja mnogo brze pretrazuje rec- orde kad su podfilterom. a sto se duzine gorepomenute tice apsolutno je nebitna. Ako imam exe od 500 kb nista mi nece smetati kojih 100 kb u bazi vise
clipper.973 nbatocanin, -> #965, ndragan
> Pa onda ja to imam u foksu odavno, samo što više ne moram > to da trpam kao makro zamenu, nego nešto a la by > reference. :))) E, od ovog ndragana se ne moš' odbranit ;) Nemaš, bre! Nije to to :) > Funkcija Eval isto postoji u foksu, i radi nad izrazom > tipa string, a izraz koji se nađe u njemu može da bude šta > bilo (ko nekad na spektrumu - mogao si da kucaš ime > promenljive na inputu). To su standardni makroi i to nije to: x := "1 + 23 + y" ? &x
clipper.974 nbatocanin, -> #969, ficus
> :) Clipper-u nedostaje samo jedna stvar da bi imao prave > slogove: :) imenovanje elemenata niza. > ># define ??? Uh, to mi je nekako ružno rešenje. > :) Zasto bi se kodni blokovi lakse napravili u > interpreterima? Njihova :) prednost u Clipper-u je upravo > to sto se prevode (dobro, u p-kod), a :) ne interpretiraju > kao makroi. > > a sta bi sa Aaaa, pa to je lako: ;) > nebih se slozio da je clipper interpreter mada nije ni > cist kompajler on je nesto izmedju Pa da, prevodi u p-kod.
clipper.975 nbatocanin, -> #972, ficus
> Ono sto bi bilo zanimljivo > napisati je baza podataka koja mnogo brze pretrazuje rec- > orde kad su podfilterom. a sto se duzine gorepomenute tice > apsolutno je nebitna. Pogledaj malo SIx drajber - prijatno ćeš se iznenaditi :)
clipper.976 umajstorovic,
Drug me zamolio da ostavim sledece pitanje: kako povezati clipper program sa biblioteckim f-jama c-a? Kratko i jasno :)
clipper.977 dpredovic, -> #959, dr.grba
> Jeste, nudi *implementaciju* klasa na korisničkom nivou. Ali > niko ne garantuje da će ta implementacija biti kompatibilna sa > eventualnim pravm sintaksom rada sa objektima u budućnosti. žak OO ekstenzije koje se dobijaju oclip-om su toliko rudimentarne da ispod toga ne može. Bilo kakva promena u samom clipper-u svešće se verovatno na mali s&r u sorsu i to je sve, mada ni u to baš neverujem. Ne znam zašto bi se klasa deklarisala drugačije nego sa CLASS-ENDCLASS, članovi sa VAR, metodi sa METHOD... Cu, Dejan
clipper.978 bulaja,
Ukoliko se kod indeksiranja (INDEX ON...) ključ navede preko aliasa (npr. INDEX ON xAlias->Polje TO cFile) u indeksnu datoteku će biti upisan ključ koji sadrži oznaku aliasa odnosno "xAlias->Polje". Da li se u tom slučaju Clipper ponaša drugačije neko što je uobičajeno (kada index key sadrži samo naziv polja, bez alias pointera) tj. da li je npr. pretraživanje preko takvog indeksa sporije?
clipper.979 ndragan, -> #973, nbatocanin
/ :))) E, od ovog ndragana se ne moš' odbranit ;) Nemaš, bre! Nije to to Znam da nije, ovi kodni blokovi mi više liče na inlajn funkcije ili nonejm funkcije, s tim što te baš briga za njihova imena; ili ih navedeš na licu mesta ili ih strpaš u promenljivu. A jel možeš da je strpaš u polje u bazi? Koliko puta se kodni blok, naveden direktno, ponavlja u .exe fajlu ako je naveden više puta? Tj, da li kompajler prepoznaje da je to isto? / x := "1 + 23 + y" / ? &x Neee, ovo je suviše prosto. Vidi ovo: x=seek(eval(key(1,'druga'))) Kao parametar za eval može da bude bilo šta što vraća neki rezultat, naprimer č trt, mrt get baza.polje1 valid eval(baza2.valid) Tako da kompletnu funkciju (ok, jednorednu) možeš da držiš kao polje u bazi; tj. to treba da je izraz koji daje vrednost, a on u sebi može da sadrži bilo kakve pozive funkcija. Štaviše, može i ovo: ... valid eval(trim(baza2.valid2)+'()') Sve spomenute funkcije se kompajliraju samo prvi put. U slučaju da se pravi projekat (koji, kod foksa, kao rezultat daje .app, mali .exe ili veliki .exe sa ili bez Vatkomovog ekstendera), onda treba sve te funkcije pretkompajlirati, naravno. Razlika između Eval() i & u foksu je što za većinu stvari eval() radi brže, jer ne prevodi celu liniju u kojoj se nalazi, nego samo deo izraza u kojem se spominje; tako se učitava manji deo kompajlera i manje ostaje za kompajliranje u trku. Mada, kad mu onako podmetnem nepoznatu funkciju, mogu svašta da mu napravim. Dok radim iz samog foksa, nema problema, sve on pojede, međutim... trpanje takvih stvari u samostalni .exe je već problematična stvar, jer nikad ne znam da li sam ubacio u projekat sve što se može spomenuti. Bue_ Ndragan
clipper.980 aquarius, -> #963, aquarius
<> <> Evo malo poboljsane verzije Num2Calc, koja ispunjava neke od <> zahteva koji su postavljeni ovde na Sezamu, samo se fajl sada <> zove NLabSGRd. <> aRazumenic me naterao da jos malo cackam i evo, ovu stvar sam jos malo doradio, pa sad moze i matematicka operacija nad nVar, a doradjeno je jos po nesto. Cu... :) aquarius nlabsgrd.zip
clipper.981 nbatocanin, -> #979, ndragan
> A jel možeš da je strpaš u polje u bazi? Može, ali ne baš direktno: upisuje se kao string, a prilikom čitanja se koristi makro za restauraciju: FIELD->f := "{|| x + y }" b := &f > Koliko puta se kodni blok, naveden direktno, ponavlja u > .exe fajlu ako je naveden više puta? Tj, da li kompajler > prepoznaje da je to isto? Ne. Ne znam za druge, ali moje iskustvo kaže da se kodni blokovi izuzetno retko ponavljaju - ne umem sad da dokučim razlog. > / x := "1 + 23 + y" > / ? &x > > Neee, ovo je suviše prosto. Vidi ovo: > > x=seek(eval(key(1,'druga'))) Ajde malo pojasni šta radi key. > Kao parametar za eval može da bude bilo šta što vraća neki > rezultat, naprimer > > č trt, mrt get baza.polje1 valid eval(baza2.valid) E, nisam znao da je makro u Fox-u tako ograničen: ovo je jedna od slabijih mogućnosti Clipper operatora "&". > Štaviše, može i ovo: > > ... valid eval(trim(baza2.valid2)+'()') Naravno. Može i ovo: String1 := "&String2" String2 := "&String3" String3 := "String4" String4 := "KRAJ!" ? &String1 x := "Alfa" &(x + "01") := 12.5 ? Alfa01 cProc := "Fora" &cProc ()
clipper.982 aquarius,
Moze li neko da objasni ??? :((( ---------------------------------------------------------------- doit( 10, 0, 1 ) // U ovom slucaju petlja DO WHILE !b = a // ce biti prekinuta kada b = a doit( 1, 0, 0.10 ) // U ovom slucaju kada je b = a nikom nista FUNC doit( a, b, c ) do while !b = a b := b + c enddo RETURN(nil) ---------------------------------------------------------------- Da li je to jos jedan bug ili nesto drugo ? aquarius
clipper.983 dvesic, -> #982, aquarius
>> doit( 10, 0, 1 ) // U ovom slucaju petlja DO WHILE !b = a >> // ce biti prekinuta kada b = a >> doit( 1, 0, 0.10 ) // U ovom slucaju kada je b = a nikom nista >> Da li je to jos jedan bug ili nesto drugo ? Ne, nego odluka konstruktora Clipper-a ! Stari problem sa float brojevima; moras da primenis poredjenje tipa IF abs(b-a)<eps .... ENDIF gde je EPS dovoljno mala konstanta. Npr, broj u drugom slucaju koji ti smatras nulom je 0.000000000000000111 sto, strogo govoreci i nije nula ! Pozdrav, Dejan.
clipper.985 jorad, -> #982, aquarius
>> doit( 1, 0, 0.10 ) // U ovom slucaju kada je b = a nikom nista >> >> FUNC doit( a, b, c ) >> do while !b = a >> b := b + c >> enddo >> RETURN(nil) I meni je to jednom prilikom pravilo probleme. Rešenje je jednostavno: DO WHILE ROUND(b,2) # ROUND(a,2) jer ćeš na zaokruživanju izgubiti onih nevidljivih 0.000000001
clipper.986 ndragan, -> #978, bulaja
/ (kada index key sadrži samo naziv polja, bez alias pointera) tj. da li / je npr. pretraživanje preko takvog indeksa sporije? Foks za .cdx indekse izričito tvrdi da spominjanje aliasa u indeksnom izrazu izbacuje Rašmor pretrage, tj. indeks će biti korišćen samo za redosled, a pretrage idu preko baze a ne preko indeksa (ko razume shvatiće). Mislim da je razlog tome što taj alias uopšte ne mora biti alias te baze; sasvim je legalna konstrukcija use kupci orde 1 sele 0 use promet set rela to sifra into kupci inde on kupac.naziv to trt (ili tag trt, svejedno) To sam ponekad i koristio, ali samo u krajnjoj nuždi. E sad, takav indeks sigurno ne može da se koristi za optimizovanu pretragu, a kao kriterijum za optimizaciju uzima se izgleda brza sintaksna kontrola indeksnih pojmova; na spisku stvari koje znače odustajanje od Rašmora su i aliasi, i funkcije tipa upper(), stuff() i još dosta toga. Bue_ Ndragan
clipper.987 ndragan, -> #981, nbatocanin
/ Može, ali ne baš direktno: upisuje se kao string, a prilikom čitanja / se koristi makro za restauraciju: Hm, a pošto je makro, ne kompajlira se, osim u trku? /> x=seek(eval(key(1,'druga'))) / Ajde malo pojasni šta radi key. Daje indeksni izraz; u ovom primeru bi tražio slog u tekućoj bazi čija je vrednost trenutno aktivnog indeksa jednaka indeksnom pojmu prvog indeksa iz baze sa aliasom Druga; obratno x=seek(eval(key(1)),'druga') bi tražio u bazi Druga slog čiji je aktivni ključ jednak prvom ključu u tekućoj. / E, nisam znao da je makro u Fox-u tako ograničen: ovo je jedna od / slabijih mogućnosti Clipper operatora "&". Makro & je istih mogućnosti, i s njim se i u foksu radi svašta, međutim čim se u liniji nađe taj znak, ona se ne kompajlira do izvođenja. Zato se radije koriste funkcije Eval() koja jeste makro nad svojim argumentom, ali se ograničava na izraz (ne može biti naredba), i još lepša stvar, imenski izrazi, tj ona mesta gde treba dati ime nečega (alias, ime pendžera, fajla...), promenljiva ili izraz koji to ime sadrže se navedu u zagradi. To je blagi povratak na ono iz bejzika ime$="podaci.dat" ili open #3, ime$ open #3, "podaci.dat" Pošto se u xBase jezicima na ovakvim mestima navodnici ne pišu (a očekuje se string), onda se ne zna da li tu i kako može da dođe promenljiva. E sad može, strpa se u zagrade i to onda radi ko u bejziku (primer levo). Dok to nije bilo, moralo se bz='trtmrt' use &trtmrt sad ide bz='trtmrt' use (trtmrt) pri čemu se druga linija ne kompajlira u trku, nego samo jednom. / cProc := "Fora" / &cProc () tj Do (cproc) Sad je pitanje koliko puta će ovaj cproc da se kompajlira? U foksu će jednom, kad prvi put bude pozvan. Linija koja sadrži & se ne kompajlira; u ovoj varijanti je ni nema. Da li za kliper treba ovakve stvari ručno poterati kroz kompajler/linker/mejk, ili je dovoljno bistar da to uradi u trku? Hoće li sam od sebe da to ubaci u .exe, a ako neće, hoće li ga izvesti ako nije ručno ubačen? U foksov .exe, lepo kaže u helpu, ulazi ono što se eksplicitno poziva; ono što se poziva po imenu ili makrou nije dostupno generatoru projekta i mora se ubaciti ručno. Ako se sve tera iz normalnog foksa (iz IDE) tih problema nema, dohvati šta nađe. Bue_ Ndragan
clipper.988 bdm.,
Hi, ukoliko imate problema sa pisanjem help-a za Vaše aplikacije izaberite već gotovo rešenje, poruke 13.466, ima primer za povezivanje sa Clipper-om. Vrlo je jednostavno... :) BDM.
clipper.989 bulaja,
SIx CDX v1.5 Da li se neko igrao sa patchovanjem onih .OBJ-ova za national support (sixger, sixswe,..) tako da podrzavaju nasa slova?
clipper.990 dvesic, -> #989, bulaja
>> SIx CDX v1.5 >> Da li se neko igrao sa patchovanjem onih .OBJ-ova za national >> support (sixger, sixswe,..) tako da podrzavaju nasa slova? Ideja postoji, ali mi nedostaje kvalitetan OBJ2ASM. Cisti disk edit bi bilo greota upotrebljavati.
clipper.991 nbatocanin, -> #987, ndragan
> Hm, a pošto je makro, ne kompajlira se, osim u trku? Da, prevođenje makro izraza radi makro prevodilac koji je deo Clipper-ovog run-time modula za vreme izvršavanja programa. > / cProc := "Fora" > / &cProc () > > tj > > Do (cproc) žini mi se da je malo različito. Ovo može i u izrazima: PROC Main a := "p" b := "q" c := "(1, 2, 3)" x := &(a + b + c) + 2 ? x RETURN PROC PQ (x, y, z) RETURN x + y + z > Sad je pitanje koliko puta će ovaj cproc da se kompajlira? E, u Clipper-u je filozofija drugačija - on je mnogo bliži pravom prevodiocu od Fox-a: implicitno prevođenje je označeno kao zastarela stvar. Procedura se prevodi kada kažeš CLIPPPER <ttt>, gde je TTT datoteka sa izvornim kodom procedure. Poziv nema nikakvog efekta na prevođenje.
clipper.993 djelovic, -> #954, nbatocanin
[Pišem bilten, pa naiđoh na jednu poruku koju sam ranije propustio.] > Zašto bi se kodni blokovi lakše napravili u interpreterima? Njihova > prednost u Clipper-u je upravo to što se prevode (dobro, u p-kod), a > ne interpretiraju kao makroi. Zbog oblasti važenja promenjljivih. Štoćereći, kodni blokovi se daju bez problema implementirati i u kompajliranim jezicima, ali onda gube pola snage jer imaju problem sa "vidljivošću" (scope) promenljivih. > b) Da, ali bi imao da poludiš od pokazivača na sve i svašta ;) > hint: @ 0,0 GET x WHEN x > y READER SLćYXYY.ąą╚ > da dodavanje nije bilo na granici trivijalnog. b) Kod mene to je: if (editvar == &x) ... To znači: U jednoj funkciji radim razne GET-ove, a u drugoj kontrolu unosa. Ovo je nesumnljivo komplikovanije od Clippera, no pogledajmo šta time dobijam: c) CUA/SAA kompatibilnost sa mišem i svim onim poljima za unos kakve ima recimo Windows.
clipper.994 bulaja, -> #990, dvesic
│Ideja postoji, ali mi nedostaje kvalitetan OBJ2ASM. │Cisti disk edit bi bilo greota upotrebljavati. └─── Sourcer radi posao :), ali mislim da će ipak običan DiskEdit najbolje poslužiti :). Nego, kako se uopšte aktivira taj alternativni index order? Nisam primetio da se prostim linkovanjem u aplikaciju (i naravno reindex-a) nekog drugog SIx*.obj umesto SIxUK.obj bilo šta menja u redosledu index-a.
clipper.995 dvesic, -> #994, bulaja
>> order? Nisam primetio da se prostim linkovanjem u aplikaciju >> (i naravno reindex-a) nekog drugog SIx*.obj umesto SIxUK.obj >> bilo sta menja u redosledu index-a. Ubaci svedska slova u stringove, pa probaj opet ! :)))
clipper.996 zorand,
Sve ovde napisano o SIX drajveru, kao i text u racunaljkama, teraju me da ga nabavim. Da li neko zna mogucnost kupovine kod nas - ima li ga legalno u prodaji? Mislim na legalnu kupovinu jer placanje (preko firme) nije problem.
clipper.997 bulaja, -> #995, dvesic
│Ubaci svedska slova u stringove, pa probaj opet ! :))) └─── Hm, sa svedskim slovima radi :) ali ako se patchuje translaciona tabela u SIxSwe.obj (samo jedna od njih ima strana slova) i ubaci neki drugi raspored, onda nece da radi :). Znaci, mora jos nesto da se promeni :).
clipper.998 vlaslo,
hi :-) evo mene ponovo. posto vidim da Vam se moj prethodni program nije dopao... saljem vam ovaj, mozda bolji ? cu conn.zip
clipper.999 petrovics,
Interesuje me postoji li nacin da se Clipper-ska aplikacija projektovana za rad u mrezi testira tako sto bi se visekorisnicki rad simulirao pomocu multitaskinga iz DeskView-a ili Windows-a ? Potrebno je uglavnom testirati zakljucavanje datoteka i slogova.
clipper.1000 djelovic, -> #999, petrovics
> Interesuje me postoji li nacin da se Clipper-ska aplikacija > projektovana za rad u mrezi testira tako sto bi se > visekorisnicki rad simulirao pomocu multitaskinga iz DeskView-a > ili Windows-a ? Naravno. Učitaš SHARE.EXE i pičiš kao da si pod mrežom.
clipper.1001 dvesic, -> #999, petrovics
>> Interesuje me postoji li nacin da se Clipper-ska aplikacija >> projektovana za rad u mrezi testira tako sto bi se >> visekorisnicki rad simulirao pomocu multitaskinga iz >> DeskView-a ili Windows-a ? Nego sta ! Samo uradi sledece : 1. EXE fajl proglasi za readonly 2. Staruj SHARE 3. Stratuj DV (DesqView) i vozi Misko ! P.S. NEMOJ koristiti DBFCDX.LIB iz Clipper-a 5.2 jer NE PODRZAVA korektno mrezni rad (bug).
clipper.1002 ndragan, -> #991, nbatocanin
Probao; zbog sintakse ispalo ovako, i radi: a = "p" b = "q" c = "(1, 2, 3)" x = eval(a + b + c) + 2 (& ispred zagrade neće, moralo bi u ? x neku promenljivu) PROC PQ para x, y, z RETURN x + y + z Hm, jel' rezultat stvarno 8 ili je nameštaljka? / stvar. Procedura se prevodi kada kažeš CLIPPPER <ttt>, gde je TTT / datoteka sa izvornim kodom procedure. Poziv nema nikakvog efekta na Da, tu se gubi upravo ono što ja obožavam da radim: imam nekoliko rutina kojima se prosleđuju dugački parametri, koji se onda analiziraju, muljaju i prepakuju u nekoliko nizova, pa se onda trči kroz niz i serijom makro zamena u petlji radi šta već treba (ređaju se getovi sa validima, promptovima itd). Učini mi se da je to sporo za neke situacije, pa umesto makro zamena napravim da taj niz naredbi ispiše u neko programče, kompajlira ga i izvede (sve u vreme izvvođenja!). Sledeći put, ako su se parametri već pojavljivali (vadim nekakav crc iz njih i pomoću toga zadajem ime generisanog programa), on nalazi programče na disku i to već kompajlirano, te ga samo pozove, preskočivši kompletnu analizu i makro zamene. E ako nekome to proradi u nekom drugom jeziku, svaka čas. To može samo interpleter; prednost foksa je što i to prevodi u pe kod. Bue_ Ndragan
clipper.1003 nbatocanin, -> #993, djelovic
>> Zašto bi se kodni blokovi lakše napravili u >> interpreterima? > > Zbog oblasti važenja promenjljivih. Štoćereći, kodni > blokovi se daju bez problema implementirati i u > kompajliranim jezicima, ali onda gube pola snage jer imaju > problem sa "vidljivošću" (scope) promenljivih. Ne bih rekao: dovoljno je pri prevođenju funkcije iza poslednjeg RET staviti prevod svih kodnih blokova definisanih u toj funkciji, pa će kodni blokovi videti sve što i matična funkcija, a to je to :) > b) Kod mene to je: > > if (editvar == &x) ... > > To znači: U jednoj funkciji radim razne GET-ove, a u > drugoj kontrolu unosa. Ovo je nesumnljivo komplikovanije > od Clippera, no pogledajmo šta time dobijam: > > c) CUA/SAA kompatibilnost sa mišem i svim onim poljima za > unos kakve ima recimo Windows. Da, ali štos je što to što dobijaš ne dobijaš zbog razdvojenog unosa i kontrole, zar ne? :) A Clipper-ove *naredbe* za korisnički interfejs su na nižem nivou od *sistema* za komunikaciju za korisnikom. Ono iznad tek treba napraviti i čini mi se da je GET sistem sasvim solidna osnova za to.
clipper.1004 nbatocanin, -> #996, zorand
> Sve ovde napisano o SIX drajveru, kao i text u > racunaljkama, teraju me da ga nabavim. Da li neko zna > mogucnost kupovine kod nas - ima li ga legalno u prodaji? Koliko ja znam, ne postoji mogućnost legalne nabavke u zemlji.
clipper.1006 nbatocanin, -> #1002, ndragan
> Hm, jel' rezultat stvarno 8 ili je nameštaljka? :)) > Da, tu se gubi upravo ono što ja obožavam da radim: imam > nekoliko rutina kojima se prosleđuju dugački parametri, > koji se onda analiziraju, muljaju i prepakuju u nekoliko > nizova, pa se onda trči kroz niz i serijom makro zamena u > petlji radi šta već treba (ređaju se getovi sa validima, > promptovima itd). > E ako nekome to proradi u nekom drugom jeziku, svaka čas. > To može samo interpleter; prednost foksa je što i to > prevodi u pe kod. I Clipper prevodi u p-kod. Principijelno ne bi trebalo da ima problema da radi isto to, nisam te baš najbolje razumeo oko detalja, ali nije ni bitno.
clipper.1007 zorand, -> #1004, nbatocanin
>> Sve ovde napisano o SIX drajveru, kao i text u >> racunaljkama, teraju me da ga nabavim. Da li neko zna >> mogucnost kupovine kod nas - ima li ga legalno u prodaji? > > Koliko ja znam, ne postoji mogucnost legalne nabavke u > zemlji. Da preformulisem pitanje. Kako uopste da nabavim SIX ?? Legalno - nelegalno, ovde ili napolju, potpuno mi je svejedno :)). Salim se, s obzirom da placanje nije problem, voleo bih legalan i kompletan paket. Adresa u Evropi bi dobro dosla kao i sve druge sugestije :).
clipper.1008 dzoric,
Imal' neko CAS driver za SilverClip v4.02. Unapred zahvalat Dejan
clipper.1009 ndragan, -> #1006, nbatocanin
/ I Clipper prevodi u p-kod. Principijelno ne bi trebalo da ima / problema da radi isto to, nisam te baš najbolje razumeo oko detalja, / ali nije ni bitno. Mogu ti eventualno poslati sors jedne rutine tog tipa da ga isprobaš, ali prva verzija nije moja... mogao bih umesto toga da pustim ovo kao primer set alte to trt.prg set alte on ? 'use', the_dbf && the_dbf je promenljiva, definisana negde ? 'list' ... && popuniti tekstom po želji ? 'use' set alte off do trt E ovde je trt.prg napisan iz samog programa, kompajliran u trku, i izveden. Varijantska razlika je u tome što još samo nedostaje uslov da znam na ulasku u rutinu da li je trt.prg već izgenerisan ili nije; ako jeste, preskačem generisanje, i prevođenje isto tako - pe kod je napravljen prošli put. Prilikom pisanja takvog programa bitna je procena broja izvođenja generisane rutine; sve naredbe koje se u njoj pojavljuju mogu se napisati unapred i u trku ubacivati makro zamene, tj to ne mora da bude izgenerisana rutina, može da bude opšta rutina sa gomilom makroa. Treba samo ošacovati šta se bolje isplati. Ono što je lepo, je što uopšte ne moram da znam kako će to programče da se zove; to mora da zna samo rutina koja ga generiše i/ili poziva. To je onaj luksuz koji mi omogućava integraljeni kompajler i nestašica linkera. Bue_ Ndragan p.s. kako da patentiram ovu ideju?
clipper.1010 bulaja, -> #1007, zorand
│Da preformulisem pitanje. Kako uopste da nabavim SIX ?? │Legalno - nelegalno, ovde ili napolju, potpuno mi je svejedno :)). │Salim se, s obzirom da placanje nije problem, voleo bih │legalan i kompletan paket. └─── SIx u USA kosta oko 160 USD. Evo ti brojevi fax-a nekih USA firmi gde bi se to moglo nabaviti (pozivni za USA je 991): C Programmers Warehouse fax: (602) 443 0659 Zac Catalog fax: (617) 551 0857
clipper.1011 neman, -> #954, nbatocanin
> b) Da, ali bi imao da poludis od pokazivaca na sve i > svasta ;) hint: @ 0,0 GET x WHEN x > y READER MyReader() Nisam bio neko vreme na Sezamu, pa tek sada postavljam pitanje, mada je mozda bilo,: ajd objasni sta se menja u std.ch da bi gornji hint funkcionisao kako treba. To pitam glede aquariusovog pozivanja GETa u nekoliko redova. neman
clipper.1012 dvesic,
Cao ! Da li neko mozda zna odgovore na sledeca pitanja : - Da li je moguce u Clipper programu utvrditi da li jos neka kopija istog programa radi negde na mrezi i za to ne koristiti mrezno specificne stvari (npr. NetBios signalizaciju i sl.) ? (Pazite, pitanje glasi da li je kopija AKTIVNA a ne da li je pocela sa radom, tako da odgovori tipa : "neka svaka aplikacija setuje neki flag" ne pasuju; ko mi garantuje da ista u medjuvremenu nije pukla i "zaboravila" da spusti svoj radni flag, pa ostane ativna vecno) - Sta se desava sa bazom koju neka aplikacija zakljuca (bilo celu, bilo jedan ili vise slogova) a zatim ista neregularno zavrsi rad ? Da li se lokovi skidaju ili ne ? Postoji li mozda neko generalno pravilo koje zavisi od Dos-ovog Share ili alternativnog mehanizma zakljucavanja ? Pozdrav, Dejan.
clipper.1013 dejanr, -> #1012, dvesic
>> - Sta se desava sa bazom koju neka aplikacija zakljuca >> (bilo celu, bilo jedan ili vise slogova) a zatim ista >> neregularno zavrsi rad ? Da li se lokovi skidaju ili >> ne ? Koliko sam ja primetio, stvari otprilike ovako idu: ako je ta aplikacija kako-tako završila rad, fajlovi se uglavnom zatvore, dakle slobodni su za druge. Ako se računar zaglupeo, onda uglavnom fajl ostane zaključan sve dok je korisnik na "zaglupljenom" računaru logovan. A logovan je obično dok se ne izloguje (što ne može da uradi, ako je računar totalno zaglupljen). Dakle, taj će resetovati računar, i ponovo se logovati, u kom će se trenutku fajl osloboditi. Najgora varijanta je da taj korisnik prosto ugasi računar i ode, u kom slučaju će Novell posle nekog vremena (ne naročito dugačkog) primetiti da je čvor neaktivan i sam ga izlogovati. Dakle, reklo bi se da nema problema, ali sam imao slučajeve da uz sve to fajl ostane zaključan. Nekada se to moglo srediti iz raznih Novell-ovih uslužnih programa (ili čak iz Load Monitor sa konzole), dakle "ubiti" korisnik i osloboditi fajlove. Međutim, u bar dva slučaja je fajl ostao totalno zaključan dok nije oboren i ponovo dignut server.
clipper.1014 bulaja,
Da li je neko video kako rade Clipper biblioteke koje omogućavaju pravljenje Windows aplikacija u standardnom Clipper-u? Npr. napolju se reklamiraju Grumpfish Clip 4 Win i DolceVita biblioteke. Ima li slucajno neko demo verziju (mislim zaista DEMO, čini mi se da je neko ovde skoro spominjao da ima demo za Clip4Win)?
clipper.1015 dr.grba, -> #1011, neman
>> ajd objasni sta se menja u std.ch da bi gornji hint funkcionisao >> kako treba. Zašto da diraš STD.CH? On je priložen da vidiš kako su preprocesirane funkcije Clippera prilikom generisanja CLIPPER.LIB. Inače ti nije potreban u redovnom radu. Ako već hoćeš da napraviš neke svoje komande koje se preprocesiraju (a na kraju, zašto da ne?), nazovi je nekako drukčije, npr. MYSTD.CH ili slično, pa je eksplicitno pozivaj u PRG fajlovima. Ako nisi upoznat sa tehnikom rada preprocesora i načina pravljenja komandi kroz njega, moja preporuka je da se obratiš gospodinu Ricku Spenceu. On će ti vrlo pažljivo, detaljno i sa primerima rado objasniti kako se ovo radi. Nešto koncizniji opis imaš u umecima kolege Batoćanina izdatim u "Računarima". žinjenica je da ovo nije lak posao, ali da daje isplative rezultate...
clipper.1016 dr.grba, -> #1013, dejanr
>> u kom će se trenutku fajl osloboditi. Najgora varijanta je da taj >> korisnik prosto ugasi računar i ode, u kom slučaju će Novell posle >> nekog vremena (ne naročito dugačkog) primetiti da je čvor neaktivan >> i sam ga izlogovati. Ne sećam se da sam video, pa da pitam: da li se vreme neaktivnosti pre logout procedure može setovati kroz mrežni softver?
clipper.1017 neman, -> #1015, dr.grba
> Zasto da diras STD.CH? On je prilozen da vidis kako su > preprocesirane funkcije Clippera prilikom generisanja > CLIPPER.LIB. Inace ti nije Pa dobro :) nisam mislio da se tu menja, nego sam odatle video da nema READER opcije. A i mnogo je dugacko :) > drukcije, npr. MYSTD.CH ili slicno, pa je eksplicitno > pozivaj u PRG fajlovima. Koristim modifikovani "common.ch", a pravi cuvam :) A sto se tice Spence-a, hvala na uputstvu, pogledacu to kod prijatelja neman
clipper.1018 nbatocanin, -> #1011, neman
Ništa naročito: samo izmeniš standardnu definiciju tako da bude nešto u stilu: #command @ <row>, <col> GET <var> ; [READER <r>] ; => SetPos( <row>, <col> ) ; ; AAdd( ; GetList, ; _GET_( <var>, <(var)>, , <{valid}>, <{when}> ) ; ) ; ; ATail(GetList):reader := <{r}>
clipper.1019 nbatocanin, -> #1009, ndragan
> set alte to trt.prg > set alte on > ? 'use', the_dbf && the_dbf je promenljiva, > definisana negde ? 'list' > ... && popuniti tekstom po želji > ? 'use' > set alte off > do trt A ne: ovo neće moći. Clipper-ov run-time prevodilac je ograničen samo na izraze. Doduše, 95% Clipper-ovih naredbi se svode na funkcije. Cela koncepcija ide ka pravim prevodiocima, gde se sve određuje za vreme pisanja programa. Gde koristiš ovo gore?
clipper.1020 nbatocanin, -> #1017, neman
> Pa dobro :) nisam mislio da se tu menja, nego sam odatle > video da nema READER opcije. A i mnogo je dugacko :) Uh, moj previd. U žaru diskusije prevideo sam da Clipper nema READER opciju u GET sistemu. Al' se lako dodaje ;)
clipper.1021 cnenad,
Da li se povećava veličina EXE fajla ako u svakoj proceduri na njenom početku imam ubačeno #include "tralal.ch" ? Naravno, u svakoj proceduri je u pitanju isti .ch fajl ali ako ga samo stavim u glavnu proceduru definicija se ne prenosi na ostale podprocedure.
clipper.1022 ficus, -> #1021, cnenad
Da li se povecava velicina EXE fajla ako u svakoj proceduri na njenom pocetku imam ubaceno #include "tralal.ch" ? Naravno, u svakoj proceduri je u pitanju isti .ch fajl ali ako ga samo stavim u glavnu proceduru definicija se ne prenosi na ostale podprocedure. -------- Nebi trebalo jer u tralal.ch nemas izvrsnog koda vec samo direktive koje promene prg u preytprocesovan fajl (nadam se da je prava rec)
clipper.1023 ndragan, -> #1013, dejanr
/ zaglupljen). Dakle, taj će resetovati računar, i ponovo se logovati, / u kom će se trenutku fajl osloboditi. Najgora varijanta je da taj Ne na svim mrežama. Na RPTI ostaje zaključan; postoji program (netfile) kojim se to zatvara, a uglavnom je dovoljno da je još neko tog trenutka držao iste datoteke otvorene pa da se svi baferi regularno zapišu kada ovaj drugi pozatvara. Za nevolju, niko nov ne može da ih otvori, jer su zaključane. Za rad sa posadom nije neki problem, to i najbelje ptice nauče iz dve tri seanse, ali za rad bez nadzora, sa serverom koji čuči negde u nekoj kabini, baš i nije zgodno. Bue_ Ndragan
clipper.1024 bulaja, -> #1021, cnenad
│Da li se povećava veličina EXE fajla ako u svakoj proceduri na njenom │početku imam ubačeno #include "tralal.ch" ? └─── Ako u include datoteci nema nikakvog izvršnog koda (definisane funkcije i sl.), a preporuka je da ga nikako nema :), onda se ne povećava.
clipper.1025 petrovics, -> #1021, cnenad
>> Da li se povecava velicina EXE fajla ako u svakoj proceduri na njenom >> pocetku imam ubaceno #include "tralal.ch" ? Ne. Definicije iz inklud datoteke se u toku kompajliranja ubacuju u sors umesto simbolickih naziva koji su u sorsu bili.
clipper.1026 nameci, -> #1001, dvesic
> P.S. NEMOJ koristiti DBFCDX.LIB iz Clipper-a 5.2 jer NE > PODRZAVA korektno mrezni rad (bug). Ukratko u vezi ove poruke da li neko ima Upgrade za Clipper 5.2 ali ne za US verziju. CU:)
clipper.1027 dr.obradovic,
Zamolio bih nekoga ko ima (valjda svi imate :)) biblioteku TERMINAL.LIB, da mi je posaljeÚ. Pojavila mi se neobjasnjiva greska na instalacionim disketama, i nadam se da je samo ovaj fajl falican. Hvala unapred... cu Dragoljub B. Obradovic
clipper.1028 dvesic, -> #1027, dr.obradovic
Izvoli. terminal.arj
clipper.1029 bstevan, -> #783, aquarius
>>>GForce, ? Imam interesantno iskustvo. Pa prenesi ga, opiši onako ukratko, ima tu još koga bi interesovalo. ---BSTEVAN---
clipper.1030 bstevan, -> #795, goranr
>>> Jedino je šteta što radi samo sa VGA, Da, ja imam Hercules ... >>> ima font editor, screen editor i icon editor, Fino i još pisan u samom GForce-u .... Šteta dok sam na Hercules-u nemam šanse da to vidim. ---BSTEVAN---
clipper.1031 bstevan, -> #795, goranr
Gorane imam problema sa funkcijom RMDIR iz tvoje biblioteke CLIPTOOL.LIB Parce koda izgleda ovako: dirname = "C:ĐFPĐDAT" IF RMDIR(dirname) != 0 TONE(300,1) ELSE SET COLOR TO R/W č 24,0 SAY "RMDIR -------> C:ĐFPĐDAT" SET COLOR TO END IF dirname = "C:ĐFP" IF RMDIR(dirname) != 0 TONE(300,1) ELSE SET COLOR TO N/W č 24,0 SAY "RMDIR -------> C:ĐFP " SET COLOR TO END IF Kad prođe kroz ovo događa se sledeče, izbriše pod direktorijum, C:ĐFPĐDAT a ostavi direktorijum C:ĐFP ili neizbriše ni jedno ni drugo, i ako u njima nema ni jednog fajla. Ja sam rešio ovako: Propustim da mi program prođe još jednom kroz to parce koda i tada izbriše sve. Muci me zašto sve neradi u prvom prolazu. ---BSTEVAN---
clipper.1032 dr.obradovic, -> #1028, dvesic
>> Izvoli. Hvala! cu Dragoljub B. Obradovic