clipper.927ndragan,
-> #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.928dvesic,
-> #921, bulajaNaravno 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.930djelovic,
-> #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.929djelovic,
-> #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.932herak,
-> #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.934kermit,
-> #920, drdjokicUzmi 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.935fric,
-> #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.936dr.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.937snemcev,
-> #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.938vlaslo,
Evo saljem vam moj skromni program, pa ga vi upotrebite potrebi
cu :-)
spec.zipclipper.939nbatocanin,
-> #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.940nbatocanin,
-> #921, bulaja> :) već me interesuje da li #command/#translate omogućavaju
> direktan pristup članovima niza?
a\[ i \]
clipper.941nbatocanin,
-> #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.942cnenad,
-> #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.943rzoltan,
-> #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.944ndragan,
-> #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.945ndragan,
-> #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.946bulaja,
-> #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.947dvesic,
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.948dejanr,
-> #947, dvesicHvala na zanimljivom i korisnom opisu :)
clipper.949ficus,
-> #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.950todorp,
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.951bulaja,
-> #949, ficus│Sto se tipova podataka tice ajd reci koj tip ti konkretno fali
└───
Vrlo jednostavno :), fale integeri (short, long,..).
clipper.952bulaja,
**** 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.953nbatocanin,
-> #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.954nbatocanin,
-> #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.955cnenad,
-> #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.956dejanr,
-> #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.957ficus,
-> #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.958ficus,
-> #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.959dr.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.961neman,
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.962neman,
-> #961, nemanA 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.963aquarius,
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.zipclipper.964nbatocanin,
-> #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.965ndragan,
-> #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.966ndragan,
-> #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.967ndragan,
-> #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.969ficus,
-> #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.968ficus,
-> #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.970djelovic,
-> #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.971bulaja,
-> #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.972ficus,
-> #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.973nbatocanin,
-> #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.974nbatocanin,
-> #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.975nbatocanin,
-> #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.976umajstorovic,
Drug me zamolio da ostavim sledece pitanje: kako povezati
clipper program sa biblioteckim f-jama c-a? Kratko i jasno :)
clipper.977dpredovic,
-> #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.978bulaja,
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.979ndragan,
-> #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.980aquarius,
-> #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.zipclipper.981nbatocanin,
-> #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.982aquarius,
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.983dvesic,
-> #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.985jorad,
-> #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.986ndragan,
-> #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.987ndragan,
-> #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.988bdm.,
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.989bulaja,
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.990dvesic,
-> #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.991nbatocanin,
-> #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.993djelovic,
-> #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.994bulaja,
-> #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.995dvesic,
-> #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.996zorand,
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.997bulaja,
-> #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.998vlaslo,
hi :-)
evo mene ponovo. posto vidim da Vam se moj prethodni program nije dopao...
saljem vam ovaj, mozda bolji ?
cu
conn.zipclipper.999petrovics,
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.1000djelovic,
-> #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.1001dvesic,
-> #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.1002ndragan,
-> #991, nbatocaninProbao; 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.1003nbatocanin,
-> #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.1004nbatocanin,
-> #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.1006nbatocanin,
-> #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.1007zorand,
-> #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.1008dzoric,
Imal' neko CAS driver za SilverClip v4.02.
Unapred zahvalat
Dejan
clipper.1009ndragan,
-> #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.1010bulaja,
-> #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.1011neman,
-> #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.1012dvesic,
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.1013dejanr,
-> #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.1014bulaja,
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.1015dr.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.1016dr.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.1017neman,
-> #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.1018nbatocanin,
-> #1011, nemanNiš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.1019nbatocanin,
-> #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.1020nbatocanin,
-> #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.1021cnenad,
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.1022ficus,
-> #1021, cnenadDa 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.1023ndragan,
-> #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.1024bulaja,
-> #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.1025petrovics,
-> #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.1026nameci,
-> #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.1027dr.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.1028dvesic,
-> #1027, dr.obradovicIzvoli.
terminal.arjclipper.1029bstevan,
-> #783, aquarius>>>GForce, ? Imam interesantno iskustvo.
Pa prenesi ga, opiši onako ukratko, ima tu još koga bi
interesovalo.
---BSTEVAN---
clipper.1030bstevan,
-> #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.1031bstevan,
-> #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.1032dr.obradovic,
-> #1028, dvesic>> Izvoli.
Hvala!
cu
Dragoljub B. Obradovic