clipper.413bulaja,
-> #407, szeman│P.S. žini mi se da je program zreo za dir, šta misliš bulaja?
└───
Mislim :). Prebačen je u CLIPPER dir, a sugestija ti je da u neku od
budućih verzija (ne misliš valjda da je lista želja konačna?:) ubaciš i
kratak .DOC file :).
clipper.415szeman,
-> #413, bulaja>│ P.S. žini mi se da je program zreo za dir, šta misliš
> bulaja? └───
> Mislim :). Prebačen je u CLIPPER dir, a sugestija ti je da
> u neku od budućih verzija (ne misliš valjda da je lista
> želja konačna?:) ubaciš i kratak .DOC file :).
Vidim da smo istomišljenici po pitanju korisnosti mog mezimčeta ;)
Što se tiče DOC-a, uradišu ga za sledeću priliku, mada sam smatrao da
je uputstvo u programu više nego dovoljno.
Pozdrav, Saša
P.S. PRAVI programer nikad ne čita uputstvo, uzbućuje ga da finte
pronadje sam. (Šalim se, naravno)
clipper.416bdm.,
-> #405, nbatocanin## Jedan način ide otprilike ovako: u GETSYS.PRG postoji procedura
## GetApplyKey koja se poziva prilikom svakog pritiska na taster u GET
## sistemu (eto gde treba da ubaciš svoju proveru!). Algoritam rada je
Hvala puno na odgovoru.
Pozdrav...
BDM.
clipper.417ikordic,
-> #362, dr.grbaRE: Blamaža
=> Dobro nam došao.
Hvala, bolje vas sve našao :).
=> Samo jedan ne baš beznačajan detalj: saopšti Sezamu koji YU kod
=> koristiš, kako bi on mogao to valjano da iskonvertuje za nas, koji
Kakav neslavan početak :( - sedam urgencija za SET CODE ... Elem, done. Radilo
se o staroj verziji EXEC-a (bez SET CODE).
clipper.418ikordic,
-> #185, bulajaRE: dbMax
=> │ Meni DBMax radi solidno ( bila je psovana sporoća ).
=> └───
=> Ma spor je maximalno, samo ima sreću da se na bržoj mašini to ne
=> primeti :). Inače ja nisam baš oduševljen DBMax-om :) - bolji je od
I meni je dbMax sporo radio (klot 286 makina). Razlog je bio u dbMax Blinker
script-u, koji na kraju ulinkuje onaj script koji maksimalno overlejira extend
i clipper biblioteke (CL5??MAX.LNK). Taj deo zamenimo sa CL5??MID (ili CL5??MIN
u ekstremnim situacijama) i program leti (prvo ga prevedemo & linkujemo :)! Ovo
sve, naravno, važi samo ako imate source, .RMK i .LNK fajlove za ponovno
pravljenje (mislim da su negde u PC.PROG.3, courtesy of dsisic).
clipper.419ikordic,
-> #341, nemanRE: Frankie "patch"
=> U onoj Frankie biblioteci imas resenje za to, jos samo dovucite
=> registraciju i nema problema, ili napisi sam tako nesto
Hm, to baš i nije neophodno. Sitnom intervencijom možemo "registrovati" ovaj
frankie. Kljuc je u funkciji adVersion () frankie biblioteke koja se standardno
ulinkava pri raznim pozivima. Njoj, elem, treba prosledeiti broj 7362 na sta
ona odgovara sa nizom od četiri člana. Ta funkcija se ulinkuje umesto postojece
i imate verziju koja ne ispisuje ono glupavo "Unregistered copy"!
Elem, ceo postupak sledi:
1) napravite sledeci prg:
FUNC adVersion
RETURN "2.1"
FUNC _ver ( nArg )
IF nArg == 7362
RETURN { .T.,;
"Registered copy of Frankie",;
8254,;
"Copyright (c) 1992,1993 Angelito Dizon" }
END IF
RETURN NIL
2) zatim prevedete program
clipper adversio /n /l
3) ubacite modul umesto postojeceg u biblioteku
(t)lib frankie.lib -+ adversio.obj
4) to je to!
clipper.420ikordic,
-> #367, bulajaRE: SetKey ()
=> Ipak čini mi se da SetKey() spada u arhaični deo Clipper-a koji nije
=> baš preporučljivo često koristiti (to ne kažu u CA, ali..:). Pravo
=> rešenje je kompletan event-driven user interface za Clipper, ali
=> pošto to još
Puno definisanih SetKey-tastera jeste posledica korišćenja omenu-a, gde se
nekim opcijama može pridružiti hotkey. Omenu to rešava tako da te tastere trpa
u SetKey-handler, a tamo se već nalazi HELP + par sitnica, pa otuda zagušenje.
Omenu pruža (meni, barem) optimalan odnos performanse/komfor i do sada nisam
našao ništa slično među raznim bibliotekama koje sam pregledao. Dosuše, polako
mi se smučilo da se zezam sa raznoraznim bibliotekama za Clipper, uglavnom zato
što su PD/SW, pa po onoj "malo para == malo vredi" slabo koja se duže zadrži na
disku. Ako se i provuče neki kvalitet onda ima neki DEMO-feature koji je molto
zakukuljen za razbivanje, pa opet ništa.
Uzgred, primetio sam da Omenu.prg nema u Clipper 5.2 ...
clipper.421ikordic,
-> #368, bulajaRE: Alternativa za APPEND FROM
=> │ Jel' moguce nekako da u TBrowse-u prikazujem više datoteka
=> │ odjedared? Konkretno, imam dve datoteke u kojima su neka polja ista
=> │ (ime1, ime2, adr, tel1, tel2, ...). Hoću sad da te dve datoteke
=> │ gledam u jednom
=> No problem :). Prvo staviš da ti kolone prikazuju podatke iz
=> različitih baza, npr.
=>
=> TB:AddColumn (TBColumnNew ("Ime", {|| xOne->Ime }))
=> TB:AddColumn (TBColumnNew ("Telefon", {|| xTwo->Tel }))
Yes problem :), to nije to. Ovako, imam, recimo, bazu kl_f i bazu kl_p. One
predstavljaju bazu podataka klijenata fizičkih i pravnih lica. Zbog izvesnih
specifičnosti jedne i druge baze, ne mogu da ih strpam u istu bazu pa da lupim
SET FILTER ili slično. Neka polja su, međutim ista (po dimenzijama i tipu, ne
po sadržaju). E sad, ono što meni treba jeste da se te dve baze pregledaju u
jednom tbrowse-u KAO DA SU JEDNA odnosno sortirane po npr. ime1, tako da npr.
"Aleksić" iz kl_f dođe pre "Alpha Commerce" iz kl_p.
Dakle, treba mi isti efekat kao i kad bi radio APPEND FROM, stim što ta opcija
otpada zbog veličine datoteka.
clipper.422ikordic,
-> #366, bulajaRE: FastEdit i još ponešto ...
=> niza), tako da odgraničenje nije 64 Kb za string već 4096 za dužinu
=> niza, što npr. za prosečnu dužinu reda od 60 karaktera može biti
=> ukupno 250 Kb (i više:).
Ovo baš i nije neki fazon. Sasvim slučajno sam pregledao (više iz radoznalosti)
neke klijentove tekstove i video kako oni izgedaju a samim time i kako će
izgledati ostali tekstovi. Tu ima praznih linija (samo CRLF) u ogromnim
količinama koje bi mi u slučaju MemoEdit-a otele 2 bajta po liniji od
maksimalnih 64 KB, dok ovako ostajem bez (potencijalnih) 4 KB po praznoj
liniji. Daklem, to baš nije to.
Imamo daklem ograničenje od 4096 linija. Ako uzmemo da u svaku ide 60 znakova
teksta to čini 240 KB - pod uslovom da nema nijedne prazne linije! ;) Ako
čovek, međutim, ubaci 10 praznih redova, potencijalni prostor se smanjuje za 40
KB, itd. Sumljam, daklem, da će čovek tu uspeti da skuca celih 200 i kusur
KB - sa dosta praznih linija jedva će dostići 100 KB :(.
Cela ova priča ima za uzrok sledeće: dosta kasno sam počeo da aktivno
programiram. Do tada sam uglavnom KORISTIO raznorazni software i jednostavno
sam stekao nekakvu sliku kako moji programi i programi uopšte treba da
izgledaju, šta treba i šta ne treba da rade.
žinjenica da je Clipper isprva koncipiran kao neki in-house projektni alat (za
rešavanje potreba unutar neke firme ili za uži krug ljudi) mene ne obeshrabruje
preterano. Sasvim sam siguran da sve svoje ambicije mogu da ostvarim ovim
jezikom i njegovim dodacima i da sa vremenom budem u stanju da na tržište
plasiram i neku šire prihvaćenu komercijalnu aplikaciju.
Dosta ljudi mi se smeje kada im objašnjavam šta sve moj paket treba da radi.
Dobijam komentare u stilu "šta si baš zapeo da tvoj program radi to-i-to,
smandrljaj na brzaka nešto što liči na to i vozi". Verovatno će moj entuzijazam
sa vremenom splasnuti, pa će me mrzeti da se bakćem sa raznim sitnicama, ali za
sada .. Svoj paket koncipiram za osobe koje žele da računar koriste za
obavljanje nekog posla bez potrebe da se oni upuštaju u neke hard/software
specifične egzibicije. Zato moj paket MORA da obezbedi:
* jednostavan rad sa bazama
* komfornu obradu teksta
* kalkulator, rokovnik, ...
* DOS menadžer (sa sve tag/untag, copy, erase, rename, md, rd, format (!),
fileview, ...)
* backup & restore, rad sa arhivom, ...
* kompletno rešenje za YU znake (ekran, tastatura, štampač, konverzija ...)
* visoko sofsticiranu kontrolu grešaka i REAGOVANJE na iste, dosledan
korisnički interfejs, maksimalno dorađen on-line help, autpmatsko
prilagođavanje promenama u konfiguraciji (plug'n'play 4 dos :)) i još dosta
toga.
Kosa mi se diže na glavi kada vidim šta su ljudi sa smandrljanim rešenjima
napravili od korisnika: srećem advokate i dizajnere koji napamet znaju
karakteristike i podatke svih komponenti u svom sistemu, *SVE* komande PKZIP-a
ili čak tipa (nekretninar) koji za jednu vrstu posla koristi SmartDrive a za
drugu NCache jer "... ima bolji algoritam za xxx, dok ovaj ima bolji za yyy
stvari."!!!
clipper.423ikordic,
-> #365, nemanRE: VMIF
=> > Koliko sam uspeo da primetim, svi koji ovde kukaju zbog
=> > VMIF rade sa SIx-om 1.5 i Clipper-om 5.2x. Štaviše, vriska
=> > i panika je i počela kada su se novije verzije odomaćile.
=> > Da li to znači da problema nema sa starijom verzijom
=>
=> I Blinker, sa rtlinkom nema sanse da se pokrene aplikacija zbog
=> velikog opterecenja memorije.
???
Daklem, 'ajmo još jednom - možda vas mrzi da čitate poruke bez setkodiranog
(wow, kakav izraz) rasporeda. Svi koji ovde kukaju zbog VMIF koriste Clipper
5.2x. Pre neku poruku, solomon je prijavio da se VMIF dešava i sa klot NTX
drajverom - znači sveopšta frka nije do SIx-a. Znači li to ondak da problema
nema sa starim (5.01a) Clipper-om? Novi Clipper i nije neki napredak, dok je
SIx ... pa, da ne pričam. Novitet su mu RDD-i, koji mi apsolutno ne trebaju,
jerbo SIx radi i sa starim Clipper-om. DEŠAVAJU LI SE, DAKLE, VMIF SA
CLIPPER-OM 5.01A???
P.S.: Ukoliko ova poruka ostane bez odgovora, donosim nepobitan zaključak da je
neko to već provalio i tajnu drži u tajnosti (?). Dok se mi ovde zajebavamo, on
neometano pravi programe & baxe :(.
P.P.S.: Ako vam ovo gore nije dovoljna motivacija, taj zlotvor sada sedi i
gleda kako se patimo i SMEJE NAM SE!!! :(((((
clipper.424ikordic,
-> #370, dsisic=> Posle ovog rafala pitanja iKordica, sa radoscu potvrdjujem da
^^^^^^^^^^^^^^
Još jedared se izvinjavam zbog svog (količinski) neumerenog prisustva u ovoj
konferenciji. Radi se jednostavno o tome, da su mi se sa vremenom nakupili
problemi & pitanja pa ih sad moram ispucati pre no se "normalizujem". Drugi
razlog je taj što nemam telefon, pa poruke šaljem samo kada mi okolnosti i
pajtos sa telefonom .and. modemom dozvole, a poruke se u međuvremenu nakupe ...
---> Your vote 4 clipper conf :)
clipper.425ikordic,
RE: Linkeri - rad sa overlay-ima.
Kada BLinker-u (v3.0) kažem:
...
BEGINAREA
FI UVOD
FI G_MENU
...
BEGINAREA <
FI OBJ1 <
FI OBJ2 <───────┐
FI OBJ3 < │
ENDAREA < │
... │
ENDAREA │
... ┌─────────────────┘
│
da li ovo znači: a) smesti OBJ1, 2 i 3 u isti overlay (fina stvar ako se npr.
OBJn međusobno dosta pozivaju) ili
b) svaki OBJn ide u svoj sopstveni pod-overlay, pa je onda
pozivanje npr. OBJ3 iz OBJ1 zejznuto (fina stvar ako OBJn
međusobno nemaju nikakve veze).
Takođe me zanima da li neko koristi neke naprednije tehnike pri linkovanju
BLinker-om ili RTLink-om. Smatrate li dovoljno dobrim rešenjem oslanjanje na
linkerovu automatiku i da, samim tim, neko ručno namestanje/premestanje modula
ne donosi bitniju razliku po pitanju brzine i komfora izvršavanja?
clipper.426ikordic,
RE: File I/O
Prvo: Da li može nekako da se sazna, dal' je neka datoteka već otvorena sa
fOpen ()? Treba mi nešto kao:
cFileName := xFunc ( nHandle )
Drugo: ako se prilikom otvaranja datoteke pojavi neka greška, jel' sasvim
sigurno da je ta datoteka ostala zatvorena? Ne može se desiti da ostane malko
odškrinuta nipodkakfim uslovima? Pitam zato što me jedan tip (Clipper pro)
savetovao da uradim jedno fClose za svaki fOpen/fCreate pre RETURN. Ima li ovo
svrhe raditi?
Trece: kako da saznam koliko mesta ima na odredišnom disku pri kopiranju ili
snimanju? DiskSpace () mi slabo pomaže, jerbo ona javlja koliko ima
'slobodnih' bajata a ne koliko ima nealociranih, odn. zaista slobodnih. Ako ja,
recimo, proverim da li na odredišnom disku ima dovoljno prostora sa:
IF DiskSpace ( nTargDisk ) >= FSize ( cSourceFile )
// onda kopiraj
ELSE
// zaprepasti se
ENDIF
nije 100% sigurno da će tamo i biti toliko slobodnog mesta. Mesto za datoteke
se na hard disku alocira u klasterima od po 4K, što znači da će datoteka čija
je dužina 4K + 1 bajat, zauzimati 8K. DOS nam, međutim, posle 'dir' kaže da
datoteka zauzima onih 4097 bajta (4dos & ndos javljaju i alociran prostor -
znači nekako se saznati može).
Kako, daklem, naterati DOS da nam kaže: a) koliko neka datoteka vaistinu
zauzima i b) koliko zaista ima prostora na nekom disku. Kada malo bolje
razmislim (?) ovo računanje možemo i sami da obavimo, jedina nepoznanica jeste
veličina klastera na nekom drajvu. Treba, znači, funkcija
nClusterSize := ClusterSize ( nDrive ) // nDrive = 0, 1, ...
Ovo, daklem, nije baš Clipper-specifican problem, ali da vidim dal' neko ovde
zna pre no se otisnem u druge teme.
clipper.427ikordic,
RE: .CDX - YU - Mach SIx.
Kratko ;) razmatranje na temu .CDX indeksi - YU sortiranje - Mach SIx:
(odmah na pocetku da kažem da ovo nisam bio u prilici da probam - SIx još ne
koristim - no sam razmišljao o raznim stvarima u vezi sa ovijem gore pa se
pitam tako sebe ja ... :)
Najpre kratak uvod: koristim svoju UDF za sortiranje po YU (abeceda ili
azbuka). Ta UDF se poziva kod INDEX ON i sl. i prosleđuje joj se izraz koji
treba indeksirati. Rezultat te funkcije je neki string iste dužine koji
uglavnom nema (fonetičke :)) veze sa originalom, ali koji omogućava da se taj
string pravilno sortira, odn. da zauzme odg. mesto u .NTX odn. .CDX datoteci -
ovaj sistem valjda svi koriste. Daklem, u .DBF-u se nalazi npr. "Jovanović" a u
indeksu "xyzhdheueueo". Poenta je u sledećem: ako ja sad tražim Jovanovića sa:
LOCATE FOR field->ime1 == "Jovanović" (što je sporo - traži po .DBF)
on će ga naći. Ako, međutim, kažem:
SEEK "Jovanovic" (što je brzo - traži po .NTX)
on ga neće naci. Neće, zato što on traži po indeksnoj datoteci, a tamo piše
"sdfsdkfhskdj", ili šta već piše, a ne "Jovanović". Moram, dakle, da pišem
nešto kao:
DBSeek ( YuSort ( "Jovanović" ) )
čime se "Jovanović" pretvara u svoju "sdfbajkdshf" formu, pa ga pretraga po
indeksu pronalazi.
Ako nam dakle Mach SIx Query Optimizer optimizuje izraze tako da koristi
indekse gde ih ima (Rushmoore sistem), on će ovako samo dodatna sranja da
napravi - em ga neće ubrzati, em neće ni raditi :(. Ako ja ne grešim, onda
šteta i tuga zbog ovako nečega. Divota sa Mach-om jeste da bez glavobolje i
zezanja sa njegovim M6_ i Sx_ funkcijama pišem SET FILTER na 2-3 polja i sl.
veselja i da to radi. Alternativa bi bila da se kod svakog traženja ubacuje
prevođenje izraza koji se traži (kao DBSeek ( YuSort ( cTrazi ) )) + neki
#command, al' to onda postaje malko zamorno .AND. komplikovano + ne moze biti
univerzalno - šta ako neko polje nije indeksirano uopšte ili nije sa takvom
funkcijom? A i pod Mach-om nije primenljivo.
Ima li, dakle, šanse da se jednom lepo patch-ne neki od onih viška nacionalnih
.OBJ-ova i da se to lepo sredi jedared za svagda?
Kad sam već kod Rushmoore sistema - autori tog sistema su navodno dobili
inspiraciju gledajući Hičkokov "Se(r)ver-Severozapad", seli i napisali ga (tako
barem kaze DR). Film sam gledao tri puta (genijalan) ali nisam uspeo da nađem
nikakvu vezu (a trudio sam se) između lukavog nacina potrage i pomenute
američke svetinje. Mount Rushmoore je, za one koje ne znaju, ona planina u koju
su uklesani likovi četiri (pet?) najznačajnija US predsednika (pojavljuje se i
u jednoj epizodi Alana Forda) po čijim se facama Keri Grant pentra pri kraju
filma. Any clues?
clipper.428stosic,
Koji Windows program za generisanje izvestaja Vi koristite ?
1. Visual Basic ( Crystal Reports ) ?
Ne uspeva mi trivijalna stvar:
Zamislite npr. bazu sa rezultatima prijemnih ispita na nekom fakultetu u
kojoj postoji logicko polje Polozio. Sve sto se trazi je da umesto "crte"
izvestaj bude grupisan u dva dela: oni koji su polozili prijemni i oni koji
nisu. Bazu sam prvo sortirao po polju Polozio, ali posle grupisanja
sortiranje se gubi?
2. R&R Report Writer for Windows ?
Ovde gore navedeni problem (?) ne postoji. Interesantna stvar je da se
vise izvestaja moze smestiti u jednu biblioteku. Korisniku je omoguceno da
preko jedne baze pripremi vise izvestaja iz iste ili razlicitih biblioteka.
O ovoj bazi, na zalost, nema informacija u helpu. Bilo bi korisno
omoguciti korisniku da postavi neki uslov (npr. generisi izvestaj od tog
do tog datuma) bez ulazenja u program. Nije mi uspeo ni jedan ni drugi
(Master Table:Scope) nacin.
3. DBFAST( CA-RET ) ?
4. ACCESS ?
clipper.429neman,
-> #419, ikordic> 1) napravite sledeci prg:
Prg treba da se zove version.prg
>
> 2) zatim prevedete program
>
clipper version /n /l
> 3) ubacite modul umesto postojeceg u biblioteku
lib frankie.lib -+ version.obj
> 4) to je to!
Nije to, f_tour mi se blokira i pisti ( vristi ? )
clipper.430dpredovic,
-> #407, szeman> čelja četvrta: /* ... */
> Daj primer.
>
Pa, čini mi se da konstrukcije u stilu:
/*
IF ...
...
...
*/
...
/*
...
...
ENDIF
*/
ne prolaze kako treba, pišem on-line, pa ako nije tako ispraviću se...
PS. Svaka čast na brzini...
clipper.431neman,
-> #429, nemanRepliciram sam sebi, ali pod 4 jeste to ako se ukuca originalni tekst
koji si naveo
clipper.432dejanr,
-> #406, mpaunovic>> Da li bi neko mogao da mi
>> posalje u asembleru, sa onim CL makroima, primer
>> kako moze da se napravi funkcija iz koje se vraca
>> vrednost koja je tipa int? Ja mogu da vratim
>> string, i da preuzmem int, ali da vratim int to
>> nece nikako.
Nisam to probao, ali sam sa tim makroima imao raznoraznog veselja. Recimo,
napravim asemblersku funkciju koja ima dva argumenta, neki tekst i neki
broj. Ona na osnovu broja nešto mulja po tekstu, i promeni ga. Recimo da
se procedura zove test.
E sad, ako funkciju test pozovem sa:
test (smatbr, n)
Ona uredno promeni smatbr, ali uz to promeni i vrednost promenljive
matbr koja veze nema sa ovom promenljivom, osim što je u 'local'
listi neposredno pre nje (ili beše posle).
Ako pozovem sa:
test (@smatbr, n)
Onda sve radi normalno.
Svašta.
clipper.433cnenad,
-> #412, arazumenicŁŁŁ Neko je već pitao šta se po inostranim BBS-ovima dešava po ovom pitanju,
Pa nestrpljivo očekujemo PATCH za Blinker na 3.01. :)
clipper.434arazumenic,
-> #433, cnenad-> Pa nestrpljivo očekujemo PATCH za Blinker na 3.01. :)
Ali očito je da nije Blinker krivac za VMIF, mada se sa njim mnogo češće
javlja. Mislio sam da li se uopšte o tome negde vodi rasprava i kakva su
insotrana iskustva.
E što ti je sudbina. Gornji deo poruke sam napisao čitajući SOR odmah po
skidanju. Odmah posle toga se 4 puta u roku od 10 min. javio VMIF i to
uvek u stanju čekanja na pritisak tastera u TBrowse objektu. U pitanju je
bio rtLink.
Saša
clipper.435zzk.,
-> #421, ikordic> E sad, ono što meni treba jeste da se te dve baze pregledaju
> u jednom tbrowse-u KAO DA SU JEDNA odnosno sortirane po npr. ime1, tako da
> npr. "Aleksić" iz kl_f dođe pre "Alpha Commerce" iz kl_p.
Nisam se mnogo bavio ovom problematikom, ali mislim da ce bilo koje
rjesenje pri kojemu ce ti baze ostati kakve jesu biti problematicno
i vjerovatno sporo.
Predlazem izmjenu u strukturi podataka (mada to podrazumjeva i izmjenu
sorsa, ali koliko sam razumio iz neke od tvojih poruka ti tek pises
tu neku univerzalnu aplikaciju pa ti malo preprojektovanja mozda nece
ni smetati) :
Polja koja su ista drzis u jednoj (osnovna) bazi uz obavezan identifikator
o kome se radi (osoba ili firma) dali putem neke oznake ili dijela sifre.
Ostatak polja koja se razlikuju drzis u bazi osoba i bazi firmi
indeksiranim po identifikatoru iz osnovne (osnovna indeksirana po nazivu).
Kolone u pregledu ti vraca funkcija ciji je parametar identifikator.
Problem (ili mozda i nije) :
Kada zasebno obradjujes jednu od ovih evidencija vise ne radis sa jednom
nego sa dvije baze. Tu vec koristis rjesenje koje ti je neko vec poslao.
Na prvi pogled, tu je mnogo vise komplikovanja pri upisu, brisanju,
editovanju, kljucanju, transakcijama ... :<, ali vjerovatno vec imas
razne funkcije za ove nabrojane (i ostale nenabrojane) operacije sa kojima
se ovo nece ni osjetiti. :)
P.S.
Ponekad se mnogo vise postize 'solidnom' organizacijom podataka, nego
'genijalnim' programerskim zahvatima.
P.P.S.
Da ovo ne bude samo puko razglabanje, evo i na brzinu sklepanog primjera!
prim_zzk.zipclipper.436bulaja,
-> #421, ikordic│E sad, ono što meni treba jeste da se te dve baze pregledaju u jednom
│tbrowse-u KAO DA SU JEDNA odnosno sortirane po npr. ime1, tako da npr.
│"Aleksić" iz kl_f dođe pre "Alpha Commerce" iz kl_p.
└───
Aaaa :). Pa može i to, naravno opet sa jednim custom skipBlock-om.
Treba ti u stvari jedna standardna skipBlock funkcija, samo preradjena
da umesto dbSkip() radi ovo:
IF xOne->Ime > xTwo->Ime
dbSelectArea ("xTwo")
ELSE
dbSelectArea ("xOne")
ENDIF
dbSkip()
odnosno da skipuje na onaj slog koji je sledeci po logickom redosledu
i da ostavi tu bazu aktivnu (selektovanu). Onda u TBColumnNew() samo
ubaci da ne kupi polje IME (ili kako ti se već zove) preko aliasa, već
direktno iz baze koja je aktivna (i deklariši na početku procedure
FIELD Ime).
Evo su ti ovde kompletne funkcije za preusmeravanje standardnih
TBrowse metoda (nisam ih probao, ali sam pisao iz glave i trebalo bi
da radi:). Uz to što si stavio u TBColumnNew() preusmeri i standardne
TB metode:
TB:skipBlock := { |n| Booth_Skip (n) }
TB:goTopBlock := { | | Booth_Top() }
TB:goBottomBlock := { | | Booth_Bottom() }
U ovim funkcijama sam koristio xOne i xTwo kao aliase za prvu odnosno
drugu bazu podataka, a IME za naziv polja ključnog za pomeranje po
bazi. Naravno, ovo treba zameniti konkretnim aliasima, ili eventualno
proširiti funkcije tako da im se i ta dva aliasa prenose kao parametri
pa dobiti potpuno konfigurabilne funkcije koje se mogu koristiti u
svim slučajevima :). Ako nekome treba nek viče, pa ću i to da ubacim :).
Sledi source:
**** -------------------------------- ****
**** Zamenjuje dbSkip()
FUNC Booth_Skip (nToSkip)
LOCAL nSkipped := 0
LOCAL bSkip := ; // code block koji zamenjuje
{ ; // gorenavedenu IF konstrukciju
|nSkip| ;
IF (xOne->Ime > xTwo->Ime, ;
dbSelectArea("xTwo"), ;
dbSelectArea("xOne")) ;
dbSkip (nSkip) ;
}
IF nToSkip < 0
DO WHILE (nSkipped > nToSkip)
Eval (bSkip, -1)
IF BOF()
dbSkip(1)
EXIT
ENDIF
nSkipped--
ENDDO
ELSE
DO WHILE (nSkipped < nToSkip)
Eval (bSkip, 1)
IF EOF()
dbSkip(-1)
EXIT
ENDIF
nSkipped++
ENDDO
ENDIF
RETURN (nSkipped)
**** -------------------------------- ****
**** Zamenjuje dbGoTop()
FUNC Booth_Top ()
xOne->(dbGoTop())
xTwo->(dbGoTop())
IF xOne->Ime > xTwo->Ime
dbSelectArea("xTwo")
ELSE
dbSelectArea("xOne")
ENDIF
RETURN (NIL)
**** -------------------------------- ****
**** Zamenjuje dbGoBottom()
FUNC Booth_Bottom ()
xOne->(dbGoBottom())
xTwo->(dbGoBottom())
IF xOne->Ime > xTwo->Ime
dbSelectArea("xTwo")
ELSE
dbSelectArea("xOne")
ENDIF
RETURN (NIL)
// Copyright (c) 1994 by Jovan Bulajic
// Placed in the Public Domain on 13.07.94
:)
clipper.437bulaja,
-> #426, ikordic│Prvo: Da li može nekako da se sazna, dal' je neka datoteka već otvorena
│sa fOpen ()?
└───
Može - pokušaj da je otvoriš sa FO_EXCLUSIVE i ako neće, onda znači da
je već otvorena.
│Trece: kako da saznam koliko mesta ima na odredišnom disku pri kopiranju ili
│snimanju? DiskSpace () mi slabo pomaže, jerbo ona javlja koliko ima
│'slobodnih' bajata a ne koliko ima nealociranih, odn. zaista slobodnih.
└───
? DiskSpace() ti javlja ono što zna i DOS, a to je koliko ima slobodnih
klastera * veličina klastera, dakle broj zaista slobodnih bajtova. Prema
tome konstrukcija:
IF DiskSpace ( nTargDisk ) >= FSize ( cSourceFile )
...
jeste 100% sigurna za odredjivanje da li će biti slobodnog mesta.
clipper.438mirche,
-> #421, ikordic> specifičnosti jedne i druge baze, ne mogu da ih strpam u istu
> bazu pa da lupim SET FILTER ili slično. Neka polja su, međutim
> ista (po dimenzijama i tipu, ne
A što ne koristiš parcijalne indexe kako se inače i radi. SET FILTER ćeš
ionako morati da izbaciš čim se dohvatiš rada pod mrežom.
clipper.439dpredovic,
-> #425, ikordic> Takođe me zanima da li neko koristi neke naprednije tehnike pri
> linkovanju BLinker-om ili RTLink-om. Smatrate li dovoljno
> dobrim rešenjem oslanjanje na linkerovu automatiku i da, samim
> tim, neko ručno namestanje/premestanje modula ne donosi bitniju
> razliku po pitanju brzine i komfora izvršavanja?
Pogledaj .map fajl, meni stvarno izgleda da se ne postiže ništa.
Ustvari tako bi i treba da bude jer _Dynamic_ Overlay menadžer baš
to i znači...
Inače muvanje clipper modula nema baš nikakve veze ni sa čim, osim
ako nemaš isključen INCREMENTAL OFF, sve clipper module po memoriji
onda muva clipper, a ne Blinker.
clipper.440dpredovic,
-> #427, ikordic> Ima li, dakle, šanse da se jednom lepo patch-ne neki od onih
> viška nacionalnih .OBJ-ova i da se to lepo sredi jedared za
> svagda?
>
Urađeno. Pregledaj starije poruke, nakačio sam i source.
Inače, ja sam ga već pustio iz beta-faze i (za sada-čuk-čuk)
radi kod korisnika sasvim ok.
clipper.441dpredovic,
-> #426, ikordic> veličina klastera na nekom drajvu. Treba, znači, funkcija
>
> nClusterSize := ClusterSize ( nDrive ) // nDrive = 0, 1, ...
Funcky:
Name: clustsize()
Usage: clustsize(drive) -> nClustSize
Params: string drive - A character string containing the drive letter
to check in the format 'd:'.
Returns:
A long equal to the size of a cluster on the specified drive
or ERROR if an error occurred.
clipper.442dpredovic,
-> #395, bulaja> Da :). Fali ti SixUk.obj (ili SixSwe.obj, SixYu.obj,..).
> Takodje ne znam koliko ce SIx da radi pod RTLink-om, ali
Ili UK6.OBJ ako radiš sa 5.01...
clipper.443dpredovic,
-> #360, ikordic> Zanima me koliko se brée (i da li uopäte) izvrsavaju C funkcije
> od odg. Clipper rutina? Recimo, manipulacije stringovima, fopen
> () i sl., dakle one koje su podréane u oba jezika. Jel' neko
> merio (ne baä ätopericom) ili se nalazio u sliünoj situaciji da
> mora da bira?
Pretpostavljam da rutine za stringove iz MS C7.00 i višeg rade brže
prosto zato što i nisu funkcije nego se uvlače u kod inline.
clipper.444dpredovic,
-> #359, ikordic> Kada se iz Clipper-a izäelujem u DOS ili neku externu
> aplikaciju, pa se potom vratim u program, ostaje mi ukljuüen
> kurzor. Gad ne konstatuje moje napore izraéene kroz SetCursor (
> n ) proteste već uporno ostaje ukljuüen.
Kažeš SET CURSOR ON pre izlaska u dos, ili SET CURSOR ON; SET CURSOR OFF
posle povratka.
clipper.445dpredovic,
-> #349, domana> SIXNSX:
>
> rtlink /pll:base52 file %1 library dbfnsx,clipper
>
> Pri RTLINKovanju: error: ert0004: Duplicate stacks
Ovako, napamet... Da nije viška ono lib clipper, to bi već trebalo
da je u pll-u...
clipper.446snemcev,
-> #434, arazumenic>> Ali očito je da nije Blinker krivac za VMIF, mada se sa njim mnogo
>> češće javlja.
Iskreno, nikad nisam sumnjao u izjavu tvoraca Blinker-a da nije Blinker
bagovit, već da otkriva skrivene bagove CA-Clipper-a.
clipper.447snemcev,
-> #435, zzk.>> Polja koja su ista drzis u jednoj (osnovna) bazi uz obavezan
>> identifikator o kome se radi (osoba ili firma) dali putem neke oznake
>> ili dijela sifre. Ostatak polja koja se razlikuju drzis u bazi osoba
>> i bazi firmi indeksiranim po identifikatoru iz osnovne (osnovna
>> indeksirana po nazivu).
A zašto ne strpati sve u jednu bazu? Biće malo šupljikavo, ali Bože moj,
čini mi se da se time više dobija nego što se gubi.
clipper.448snemcev,
-> #436, bulaja>> // Copyright (c) 1994 by Jovan Bulajic
>> // Placed in the Public Domain on 13.07.94
Svaka čast! Ubedi me u 30 linija sorsa da počnem da redefinišem kodne
blokove kod TBrowse-a.
clipper.449nbatocanin,
-> #422, ikordic> Imamo daklem ograničenje od 4096 linija.
A ako svaki element niza bude pasus?
clipper.450zzk.,
-> #447, snemcev> A zašto ne strpati sve u jednu bazu? Biće malo šupljikavo, ali Bože moj,
> čini mi se da se time više dobija nego što se gubi.
Mnogo jednostavnije, s tim da bi se u tom slucaju moglo prebaciti za
rasipanje prostora na disku.
P.S.
Prisjetih se koliko renomirani svjetski proizvodjaci softvera 'stede'
hardver (memorija, disk). :< MA, TRPAJ SVE SKUPA!
clipper.451bulaja,
**** new file ****
R:\IBMPC\CLIPPER\*.*
----------------------
blup301 zip 361239 Blinker v3.01: update sa verzije 3.0
Update je poslao stosic, zahvaljujemo :).
clipper.452ikordic,
RE: Code overhead
Neko je ovde rekao da se u finalni program neće ulinkovati priličan deo
dodatnog koda ako se u programu ne koristi neki od anahronizama Clipper-a (&
makroi, PRIVATE i PUBLIC promenljive itd.). U svaki program se, međutim
ubacuje onaj PUBLIC GetList iako ga ja u svim svojim aplikacijama ni jednom ne
koristim. Može li se on "maknuti" odatle?
clipper.453ikordic,
-> #397, nbatocaninRE: MemoEdit
=> Treba videti CLText i još neke. Trenutno pokušavam da uradim neki
=> alternativni način u čistom Clipper-u.
Uprkos tvom puritanskom stavu po pitanju (ne)korišćenja ne-Clipper dodataka,
ovaj zadatak se čini kao tvrd orah. Glavna prepreka, koju većina ljudi ne
primećuje, jeste da je MemoEdit i slične stvarčice koncipiran kao editor, dok
je u ovom slučaju potreban klasičan tekst-procesor koji radi sa pasusima
teksta, isti automatski preformatira, ev. uravnava itd. Ako koristiš postojeće
mehanizme za tako nešto, nailaziš na velike prepreke - počnimo od pomeranja
kurzora: Clipper-ov MemoEdit ti neće izvršiti wrap kurzora na kraj reda pri
K_LEFT i K_BS ako ti se kurzor nalazi u prvoj koloni - potrebna je gomila
manipulacija sa SetKey i manuelnim pomeranjem kurzora da bi tako nešto
postigao.
Zatim, dolazimo do vrlo bitnog dela kada se radi o obradi teksta - neki
elemantarni WYSIWYG mora postojati. Ovo, naravno, ne znači da sad treba da
pravimo neku Windows-like manipulaciju fontovima, ali npr. bold, podvučeno,
kurziv, itd. se moraju drugačije tretirati. Obavezno je, zatim, omogućiti
korisniku da na istoj strani koristi npr. Courier 10 i par redova ispod
Courier 17 - pošto nam sada staje 100-ak znakova u red, umesto dosadašnjih
60-ak, tekst treba da skroluje levo-desno - kako ovo rešiti u MemoEdit-u?
Ti si donekle rešio ovaj problem svojim tekst formaterom objavljenim u
"Računarima", ali samo donekle. Glavni problem ostaje korisnički interfejs.
Pretpostavljam da i sam shvataš da korisnik ne razmišlja (?) isto kao i
programer i da ono što se tebi čini logičnim i lako razumljivim, njemu izgleda
do zla boga komplikovano i nerazumljivo. Terati čoveka da piše neko pismo ili
ugovor korišćenjem gomile naredbi i da rezultat vidi tek kod štampe je pomalo
deplace za '90.
Elem, ako ti baš nije problem, podeli sa nama neke pre-production nacrte novog
projekta - možda ti neko bude od pomoći.
clipper.454ikordic,
-> #399, nbatocanin=> Može, veoma jednostavno. Potrebno je izmeniti skipBlock tako da
=> "sledeći" i "prethodni" slog traži preko funkcije koja paralelno
=> pomera pokazivače u obe datoteke i to tako što prvo vidi u kojoj je
U svakom slučaju, bio bih zahvalan za malo (pseudo-)koda uz ovo.
clipper.455ikordic,
-> #385, neman=> Ma puca i sixnsx, a ko gresi mozda necemo ni saznati ako objave VO :)
^^^^^
Optimista :). Dajem glavu da tek sa VisualObjects počinju PRAVA sranja. VMIF i
STACK FAULT će biti kid's stuff za njega ... u just wait .and. C
clipper.456ikordic,
-> #444, dpredovicRE: SetCursor ()
=> Kažeš SET CURSOR ON pre izlaska u dos, ili SET CURSOR ON; SET CURSOR
=> OFF posle povratka.
Kurzor se sam upali kada izađe u DOS. Po povratku se NE MOčE isključiti NITI
promeniti funkcijom SetCursor (). SET CURSOR ON | OFF se pretprocesiraju u
SetCursor ( 1 ) i SetCursor ( 0 ), respektivno. Jedini način za gašenje
kurzora jeste poziv SetMode funkcije sa trenutnim video modom.
A ovo što si ti napisao kod tebe radi ili samo nagađaš?
clipper.457ikordic,
-> #429, nemanRE: Frankie "patch"
=> Nije to, f_tour mi se blokira i pisti ( vristi ? )
Uf, da malo sam zbrzao stvar. Uz poruku ide version.obj koga strpate u
frankie.lib sa:
tlib frankie.lib -+ version
Ovaj .obj sam iščupao iz svog .lib-a i garant radi.
version.objclipper.458ikordic,
-> #435, zzk.=> rjesenje pri kojemu ce ti baze ostati kakve jesu biti problematicno
=> i vjerovatno sporo.
Brzina za konkretnu namenu i nije preterano bitna. Sad, ne mora baš da se vuče
k'o puž, ali ...
=> izmjenu sorsa, ali koliko sam razumio iz neke od tvojih poruka ti tek
=> pises tu neku univerzalnu aplikaciju pa ti malo preprojektovanja
Eh, da je tako vse bi bilo lepo ...
=> Polja koja su ista drzis u jednoj (osnovna) bazi uz obavezan
=> identifikator o kome se radi (osoba ili firma) dali putem neke oznake
Umpf, malo previše komplikovano za relativno prost problem. U svakom slučaju
hvala na pomoći i primeru - možda posluži za neku drugu priliku.
clipper.459ikordic,
-> #436, bulajaRE: Zamena za APPEND FROM
Puno fala uvaženi kolega :), to je to. Nešto slično (ali samo slično :) ) sam
već imao u glavi, ali sam smatrao da bi to trebalo rešiti nekim indeksnim
zezalicama u kombinaciji sa mlogo prostijom varijantom skipblock-ova. Ovo je
definitivno poslednja kap (bajt?) koja je prevršila čašu (disk?) - od sada pa
nadalje i ubuduće koristim kodne blokove i gde treba i gde ne treba.
Prednost ovog rešenja je jednostavnost i univerzalnost implementacije. Falinka
je da nije univerzalna (radi samo za TBrowse) - bio bi fazon da može da radi i
za List, Seek/Locate i sl. Doradiću ovo čim nadjem vremena.
žim budem imao vremena, sešću da ovo isprobam i eventualno doradim, pa
javljamo ustiske.
P.S.: Zašto funckije imaju prefiks 'Booth_'?
clipper.460ikordic,
-> #441, dpredovic=> Funcky:
=>
=> Name: clustsize()
=> Usage: clustsize(drive) -> nClustSize
Funcky, na žalost, nemam, ali sam u međuvremenu našao nešto slično: isto radi
i DOS funkcija 1Ch, u DL ide broj drajva, vraća sledeće:
AL sektora po klasteru
CH bajtova po sektoru
DX ukupan broj klastera na disku
Ostalo je boza (ljimunad?). U svakom slučaju, hvala.
clipper.461bulaja,
-> #459, ikordic│P.S.: Zašto funckije imaju prefiks 'Booth_'?
└───
Whoops, u žaru kucanja sam ubacio jedno o viška - trebalo je da stoji
Both odnosno obe (baze zajedno), mrzelo me da smišljam neko drugo ime
:). Ipak, naknadno sam malo analizirao onaj kod napisan u jednom dahu
i naravno there is allways another bug O:) - treba dodati i obradu
graničnih slučajeva (kada se dodje do početka ili kraja neke od baza).
Uradiću to nešto kasnije pa ću poslati ispravljeni source. :)
clipper.462bulaja,
-> #452, ikordic│U svaki program se, međutim ubacuje onaj PUBLIC GetList iako ga ja u
│svim svojim aplikacijama ni jednom ne koristim.
└───
Ne koristiš? Ako imaš bar jedan GET u programu, onda ga i te kako
koristiš, sem ako nisi napravio kompletnu zamenu za GetSys.
clipper.463snemcev,
-> #462, bulaja>> Ne koristiš? Ako imaš bar jedan GET u programu, onda ga i te kako
>> koristiš, sem ako nisi napravio kompletnu zamenu za GetSys.
I onda ne mora da koristi public GetList, već može na početku rutine u
kojoj mu treba get da ubaci jedno local GetList := {} i onda se taj
koristi, ne?
clipper.464cnenad,
Vremenom programi rađeni u kliperu rastu ko kvasac :(( pa se dolazi do
situacije da je nemoguće startovati program u 'pročišćivalu' :)
Kako ste vi rešili taj problem ?
Blinker 3.01, XMS, EMS, 634 Kb donje i 120 gornje memorije slobodno i
nikakvi specijalni prekidači (znači uglavnom DEFAULT parametri CLIPPER-a i
BLINKER-a), samo je uključeno inkrementalno linkovanje.
clipper.465d.petrovic,
Neeeee, ne piše ovo leonardo :). Možda je ovde poznatiji
d.petrovic :))
Daaaavno sam vas pitao kako se generiše i proverava kontrolni
broj po modulu 11 i dobio sam samo nepotpune odgovore. Zašto mi niko
nije rekao da postoji stotinbak modela modula 11 ? ;(((( Da nekog
drugog ne boli glava zbog iste stvari evo tri funkcije i kratak izvod
iz neke knjižice:
---------------------------------------------------------------------
ž) kad korisnik društvenih sredstava i drugo pravno lice
primenjuje osnovne modele sa kontrolnim brojem, označene brojevima
21 do 31, za upisivanje podataka u "Poziv na broj", kontrolni broj
izra!unava po modulu 11 SUB.
Kontrolni broj po modulu 11 SUB računa se tako što se
pojedinačne cifre broja, za koji se računa kontrolni broj, množe s
leva u desno ponderima 7, 6, 5, 4, 3, 2, 7, 6... ciklično. Zbir svih
proizvoda deli se brojem 11, a ostatak deljenja oduzima se od broja
11 i dobijeni rezultat upisuje se kao kontrolni broj(K).
Kada je rezultat 10, kontrolni broj je nula, odnosno kada je
rezultat 11, kontrolni broj je jedan.
---------------------------------------------------------------------
Mrzelo me je da čitam sve ovakve gluposti, tek..., ova glupost
odozgo je za matični broj građana, a evo i dve funkcije za koje
neznam, baš po kom su modelu jer ih koristim od ranije.
BTW. Koja knjižurina kompletno opisuje sve ovo? Da ne bude kao u
ovom priručniku koji imam... "... tački (bla), u odredbi pod (truć),
odredba pod (ghkm), stav (trt). reči ---- se zamenjuju rečima ++++.
modul11.zipclipper.466cnenad,
Da li ste primetili da uvek postoji jedan GETLIST kao PUBLIC promenljiva i da
se ne može ukloniti ?
clipper.467neman,
Pre par dana imao sam problem sa SIXNSX-om i Netware Lite mrezom. Kada sam
pokusao da stampam teskt preko datoteke kojaje vec postojala i bila iz nekog
razloga obelezena sa ReadOnly, pokvarena je jedna od NSX datoteka, tj. tekst
je stampan u indeks datoteku !
clipper.468dvesic,
-> #466, cnenad>> Da li ste primetili da uvek postoji jedan GETLIST kao PUBLIC
>> promenljiva i da se ne moze ukloniti ?
Ih, ne moze ! :)
Samo dodaj recimo ovo na :
FAJL1.PRG :
===========
Announce StartCode
Init Proc OcistiGetList
Release GetList
Return
i u tvom fajlu sa Main procedurom jedno :
Request StartCode
na samom pocetku fajla, i nema vise GetList-a ! :)
Naravno, jos je jednostavnije jedno
RELEASE GETLIST
kao prva linija Main procedure, al' ja volim da komplikujem :)
clipper.469dpredovic,
-> #456, ikordic> => Kažeš SET CURSOR ON pre izlaska u dos, ili SET CURSOR ON;
> SET CURSOR => OFF posle povratka.
> A ovo što si ti napisao kod tebe radi ili samo nagađaš?
Radi, majke mi... ;) Fazon je, čini mi se, u tome što clipper
vodi neku svoju evidenciju stanja kursora, nezavisno od stvarnog
stanja. Pošto DOS upali kursor, a clipper o tome pojma nema, treba
stanje da izravna sa CURSOR ON (pre ili posle, na isto mu izađe), a
tek posle da se ugasi...
clipper.470dpredovic,
Negde daaaavno poslao sam neke obj fajlove za transakcije
i rollback. Evo ga sada i source, pa probajte...
trans.zipclipper.471bpekic,
Da li neko radi sa FLIPPER grafickim funkcijama i ako radi da li ima i editor
fontova FE.EXE, veoma mi je potreban.
Vole bih i da razmenim iskustva u vezi FLIPPER-a.
clipper.472nbatocanin,
-> #453, ikordic> Uprkos tvom puritanskom stavu po pitanju (ne)korišćenja
> ne-Clipper dodataka, ovaj zadatak se čini kao tvrd orah.
Što se tiče puritanskog stava, ne razumite me pogrešno: daleko od
toga da sam protiv korišćenja tuđih rezultata (biblioteka i sl.).
Uostalom, da sam protiv toga ne bih ni koristio Clipper ;) Naravno,
složićete se da je daleko bolje imati svoju funkciju za kreiranje
novog direktorijuma, nego koristiti neku biblioteku sa milion
nepotrebnih stvari.
Jednostavno treba imati u vidu probleme oko nabavke nove verzije neke
komercijalne biblioteke u slučaju nove verzije Clipper-a. Ja sam se
tako nasankao sa Nantucket Tools i od tada strogo pazim šta stavljam
u program. Inače koristim i ja neke biblioteke (dGE, SilverClip).
Izrada dobre alternative za MemoEdit jeste relativno tvrd orah, to mi
je jasno. Imam dosta iskustava na izradi raznih specijalnih editora,
pa mi je ovo poznato i iz prakse.
> kurzora: Clipper-ov MemoEdit ti neće izvršiti wrap kurzora
> na kraj reda pri K_LEFT i K_BS ako ti se kurzor nalazi u
> prvoj koloni - potrebna je gomila manipulacija sa SetKey i
> manuelnim pomeranjem kurzora da bi tako nešto postigao.
Ovo mi se i ne čini kao preveliki problem: čak i WP ne formatira
tekst baš za vreme ukucavanja. žini mi se da ne bi bio preveliki
problem objasniti korisniku da se pasusi preformatiraju prilikom
pripreme za štampu.
> Zatim, dolazimo do vrlo bitnog dela kada se radi o obradi
> teksta - neki elemantarni WYSIWYG mora postojati. Ovo,
> naravno, ne znači da sad treba da pravimo neku
> Windows-like manipulaciju fontovima, ali npr. bold,
> podvučeno, kurziv, itd. se moraju drugačije tretirati.
Da, ovo sam planirao.
> Obavezno je, zatim, omogućiti korisniku da na istoj strani
> koristi npr. Courier 10 i par redova ispod Courier 17 -
> pošto nam sada staje 100-ak znakova u red, umesto
> dosadašnjih 60-ak, tekst treba da skroluje levo-desno -
> kako ovo rešiti u MemoEdit-u?
Moje rešenje se ne bi ni oslanjalo na MemoEdit, nego bi bilo potpuno
samostalno rešenje. Za slova različite veličine bih imao tabelu
širina i na osnovu nje bih formatirao redove. Kad se već konsultuje
tabela moglo bi se obezbediti i pisanje proporcionalnim fontovima?
> Ti si donekle rešio ovaj problem svojim tekst formaterom
> objavljenim u "Računarima", ali samo donekle.
(Na žalost), taj formater rešava samo formatiranje teksta, a ne i
unos. Unos sam malo poboljšao, ali sam svestan da je to daleko od
blizu savršenstva.
> Elem, ako ti baš nije problem, podeli sa nama neke
> pre-production nacrte novog projekta - možda ti neko bude
> od pomoći.
Hoću, vrlo rado. Međutim, ovaj projekat ima kod mene nizak prioritet,
pa trenutno nemam ništa napismeno - sve je još uvek kod mene u glavi.
Znači, biće kad bude :)
clipper.473nbatocanin,
-> #454, ikordic> => Može, veoma jednostavno. Potrebno je izmeniti skipBlock
> tako da => "sledeći" i "prethodni" slog traži preko
> funkcije koja paralelno => pomera pokazivače u obe
> datoteke i to tako što prvo vidi u kojoj je
>
> U svakom slučaju, bio bih zahvalan za malo (pseudo-)koda
> uz ovo.
Imao sam na umu tačno ono što je Bulaja napisao.
clipper.474nbatocanin,
-> #464, cnenad> Blinker 3.01, XMS, EMS, 634 Kb donje i 120 gornje memorije
> slobodno i nikakvi specijalni prekidači (znači uglavnom
> DEFAULT parametri CLIPPER-a i BLINKER-a), samo je
> uključeno inkrementalno linkovanje.
Najjednostavnije rešenje je da isključiš inkrementalno linkovanje.
Ako imaš VGA probaj i VIDRAM.
clipper.475cnenad,
-> #474, nbatocaninŁŁŁ Najjednostavnije rešenje je da isključiš inkrementalno linkovanje.
Ali šta ako je programu potrebno 800 Kb memorije, plus CLD ? :((
Sa manjim ciframa sam nekako i izlazio na kraj, recimo LH CLD PROGRAM pa deo
ode u gornju a deo u donju memoriju ali može da radi.
clipper.476ikordic,
-> #449, nbatocaninRE: MemoEdit
=> > Imamo daklem ograničenje od 4096 linija.
=> A ako svaki element niza bude pasus?
BOOM - prava stvar!!!
Ovo pitanje implicira da svoj supertajni :) TurboEdit ne koncipiraš na
ruševinama MemoEdit-a, nego će to izgleda biti nešto potpuno novo (kao onaj
LIST.PRG).
Ostaje samo problem obrade svega toga u Clipper-u. Pritom ne mislim da je taj
zadatak posebno težak, radi se prvenstveno o brzini kojom bi se takav program
izvršavao. Ne znam da li si pokretao svoj LIST.PRG na nekoj 286-ici, ali ti
mogu reći da je dosta spor, osvežavanje ekrana je prilično "stepenasto", ispis
se "cima" gore-dole bri bržem kretanju po tekstu - a još nismo stigli ni do
obrade teksta! Ovo kritika, naravno, nije upućena tebi, nego Clipper-ovoj
"brzini".
Elem, željno iščekujem(o) prvi pressrelease po pitanju TurboEdit-a :) ...
clipper.477ikordic,
-> #443, dpredovicRE: Clipper vs. C
=> Pretpostavljam da rutine za stringove iz MS C7.00 i višeg rade brže
=> prosto zato što i nisu funkcije nego se uvlače u kod inline.
Pitanje sam postavio zato što, koliko sam shvatio, Clipper interpretira p-kod
za vreme izvrsavanja a C(++), normalno, ne (ovo se, takođe, odnosi i na
asembler). Kako sad to fercera - malo runtime interpretiranje, malo
izvršavanje?
A i nevezano za ovo, zanimljivo je znati šta je brže. Zna li, daklem, neko?
Još nešto u vezi sa MSC-om: zašto je za verzije >= 6.0 potreban LLIBCA.LIB iz
MSC 5.1? Jel' ovi nemaju podršku za alternate math ili je drugačije
koncipirana? Kako se više verzije (> 6.0) podnose sa Clipper-om?
I na kraju, večito pitanje: BC i Clipper. Pre nego svi dignete frku u stilu
"Aman čoveče, pročitaj prošle poruke - lepo piše da ne može!" obavezan sam da
kažem da ja JESAM pročitao sve stare poruke. I u najmanje dve poruke (za te
sam siguran, možda ih ima i više) se eksplicitno navodi da je rad sa BC sasvim
moguć i u praksi primenljiv. Daklem, molim odgovor od onih koji KORISTE
Borland-ov C - kakva su iskustva i ima li nekih saveta, uglavnom po pitanju
linker-a.
Smatram da je vrlo bitno insistirati na ovom pitanju, jer je Borland-ov C(++)
de facto standardna alatka za razvoj (ozbiljnijih? ;)) DOS i Windows
aplikacija i imam želju da se jednog dana na nj prebacim. Nisam blesav da svo
dosadašnje iskustvo (doduše ne preterano obimno) sa TC-om zaboravim, da bih,
kada batalim Clipper (samim tim i MSC), ponovo počinjao ispočetka.
clipper.478ikordic,
-> #437, bulajaRE: File I/O
=> │ Prvo: Da li može nekako da se sazna, dal' je neka datoteka već
=> │ otvorena sa fOpen ()?
=> └───
=> Može - pokušaj da je otvoriš sa FO_EXCLUSIVE i ako neće, onda znači
=> da je već otvorena.
Bitan mi je onaj drugi deo pitanja (ovo sam i sam provalio). Daklem, ne treba
mi funkcija:
lIsOpen := xFunc ( nHandle ) // što radi tvoj predlog
nego:
cFileName := xFunc ( nHandle )
dakle na osnovu handle-a, da mi vrati path datoteke. I da naglasim: problem ne
mogu rešiti nekim preusmeravanjem na neku svoju funkciju - poželjna je,
daklem, neka DOS akrobacija.
=> ? DiskSpace() ti javlja ono što zna i DOS, a to je koliko ima
=> slobodnih klastera * veličina klastera, dakle broj zaista slobodnih
=> bajtova. Prema tome konstrukcija:
=> jeste 100% sigurna za odredjivanje da li će biti slobodnog mesta.
Right on, Commander! Taman sam se spremao da ti "otpozdravim" na poruku, kada
primetih sitnu greškicu u programu koji je testirao opisani problem.
clipper.479ikordic,
-> #284, dzoricRE: Novi CA produkti
=> Evo ga mr Luiz Quintela objasnjava muvanje, kopiranje i ostale
=> zezancije sa Tbrowse-ovima. Inace tip je zesca zverka u CA.
Fajl readme iz browsrdd.zip paketa se završava tako što pomenuti mister
Quintela navodi na kojim projektima sve radi. Među njima su i:
=> CA-C++
Jel' čuo neko za ovo?
=> CA-Visual Objects for Clipper
Prvi put čujem da se ovako zove. Naime, naslov implicira da se ne radi o
samostalnom paketu već o nekom dodatku za Clipper - o čem se daklem ovde radi?
clipper.480mdrazic,
Jeste l' čuli deco... novi software a zove se Comix 3.0 RDD
za Clipper. Hvali se (u reklami) kao: najbrži, najmanji,
kompatibilan sa FoxPro (CDX/FPT). I nekoliko gurua za
Clipper ga je uzgred pominjalo kao odličnog RDD. Cena je
129$ sam ili 179$ sa ClipMore (ad-hoc queries, reports and
TBrowses). Postoji i neki benchmark (ali bez SIX 2.0!):
(na 386 40MHz, 105MB IDE disk, 5000 records)
DBFNTX SIXNSX 1.5 SIXCDX 1.5 COMIX 2.0
Index creation 58.44 32.46 42.45 34.66
Skip forward 12.80 9.00 13.18 7.96
Skip backward 19.27 14.72 60.48 7.31
Seek 19.84 9.24 16.93 7.30
Append:
1000 rec. 254.31 15.21 124.57 15.54
keyNo() n/a 90.95 818.66 2.41
(kažu nije štamparska greška)
Load Size (w/RTLINK) 228K 261K 279K 233K
Ima mogućnosti slične SIX-u, ali bez kriptovanja, trigera, kompresije.
A čime se (opet u reklami) hvali SIX 2.0 RDD ?
(na 486, 8MB RAM, Netware 3.11)
DBFNTX CMX/FLEX SIX 2.0 (NSX)
index manipulation:
Index size 330K 58K 38K
Indexing time 17.2 6.2 5.5
5000 seeks 28.2 29.7 26.9
5000 skips 32.3 33.4 31.4
2500 appends 45.8 49.5 40.9
array storage in memos:
1000 appends n/a 65.1 2.5
1000 replaces n/a 41.2 2.7
1000 retrieves n/a 26.2 3.6
Ako neko čita iz inostranstva i poseduje nešto od ovoga, rado bih
lično testirao :))))
P.S. Ipak, za mreže je pravo rešenje nešto poput ADVANTAGE
client/server RDD-a u Clipperu, odnosno NLM na Novell-u.
Bez izmene programa radi client/server na (istoj) mreži.
U prevodu (seek itd. se odvija na serveru - brzina, a
resetovanje stanice uzrokuje samo da zahtev za transakciju
nije kompletiran pa se ignoriše - sigurnost, potreban je
samo UPS na serveru za garantovan integritet podataka).
Pozdrav od Milana
clipper.481arazumenic,
-> #475, cnenad-> Ali šta ako je programu potrebno 800 Kb memorije, plus CLD ? :((
Ovoliko memorije ti treba za startovanje programa, ili je to dužina .EXE
fajla?
Ako je prvi slučaj, onda ti ne valja .lnk fajl. Pošalji da ga vidimo.
Najviše memorije potrebne za startovanje, koju sam ikada dobio je 520k
prilikom isprobavanja raznih kombinacija u .LNK fajlu.
Ako je drugi slučaj, onda nema nikakvih problema, radiće. Kad sam već
naveo gornji rezultat, onda evo i ovo: .EXE fajl od 1,3 Mb radi sasvim O.K.
Saša
clipper.482dr.grba,
-> #465, d.petrovic>> BTW. Koja knjižurina kompletno opisuje sve ovo? Da ne bude kao u
>> ovom priručniku koji imam... "... tački (bla), u odredbi pod (truć),
>> odredba pod (ghkm), stav (trt). reči ---- se zamenjuju rečima ++++.
E baš je tako, svugde )))): Kad nađeš nnašto čitljivo, obavesti nas.
Mnogi će ti biti zahvalni.
clipper.483bulaja,
-> #480, mdrazic│Jeste l' čuli deco... novi software a zove se Comix 3.0 RDD za Clipper.
└───
žuo sam nešto o tome :), a evo ga i jedan tekst (u Word 4 Win formatu)
koji objašnjava neke stvari vezane za SIxCDX i COMIX. Tekst je star
godinu dana i odnosi se na stare verzije RDD-ova, ali možda se nadje
unutra nešto korisno (ja još nisam pročitao:). Ovde prenosim uvodni deo
teksta, a ceo tekst se nalazi u datoteci prikačenoj uz poruku.
DBFSIX vs. COMIX
A Tale of Two RDDs
by Steve Larsen
Originally appeared in the Denver Clipper Users Group Newsletter, June 1993
With the release of Clipper 5.0, Computer Associates introduced the
concept of the Replaceable Database Driver, or "RDD". Simply put, RDDs
are alternative database engines that let you access different data
structures such as Paradox files, Foxbase compatible .dbfs and others.
All you have to do is link the RDD into your application and go, with
few if any modifications to your code. The underlying premise is that
for the most part you can access all alternative databases via normal
Clipper commands, for example
USE MyFile
INDEX ON Lastname TO Last
SET INDEX TO Last
Depending on the RDD in use, MyFile might be a dBase .DBF, a Paradox
.PDX, a Lotus .WKS, a Btrieve .BTR, etc. If there is an RDD to support
it, you can use it just like you use normal .DBFs. At present there are
RDDs for Clipper 5.0 and 5.2 to support .DBF, .PDX, and .BTR file
formats among others. But that isn't all. RDDs don't just have to
provide support for file formats, they can still support .DBFs, but
provide additional or enhanced capabilities from the default DBFNTX
driver. That is what the two RDDs do that this paper looks at. Both
RDDs reviewed here support the traditional .DBF file format, however
they provide improved indexing capabiltities for faster performance,
smaller index file size, better sorting and filtering capability and a
couple of other features that soon become hard to live without.
The impact to you may or may not be important, depending on your needs.
Most of you are probably using the default DBFNTX driver that works with
.DBF files but creates .NTX indexes. If you write a Clipper program
that must share data with dBase III, you might wish to use the DBFNDX
driver, which uses the dBase compatible .NDX index file structures. New
with Clipper 5.2 is the DBFMDX driver for dBase IV compatiblity, the
DBFCDX driver for FoxPro compatibility, and the DBPX driver for Paradox
files.
For those of you who might need a bit more than the canned drivers
deliver, there are two third party RDDs available which support .DBF
file structures: DBFSIX from SuccessWare, Inc. and COMIX from
LoadStone. Both offer similar capabilities however approach the problem
from different angles, and both work with Clipper 5.01 and 5.2.
DBFSIX was developed by the same people (SuccessWare) who developed the
DBFCDX driver that comes with Clipper 5.2, and whose main claim to fame
is their support for FoxPro style index file structures (.CDX and
.IDXs). FoxPro indexes are considerably faster and smaller than the
Clipper standard .NTX files, so you gain not only performance and
diskspace conservation, but you may also share files with a dot prompt
utility, an especially handy tool for your arsenal of data weaponry.
DBFSIX is a mature and feature-rich product, with functions for index
scoping, sub-indexing and on-the-fly data encryption, making a good
choice for someone looking for an all around database engine.
COMIX utilizes a proprietary index structure that is imcompatible with
any other commercial product, however in the process gains an additional
speed advantage over DBFSIX. COMIX is not a feature rich as DBFSIX,
however has chosen to narrow its focus on a specific set of functions
that, in the hands of a skilled programmer, deliver far more power and
performance than its competitor.
...
sixvscmx.zipclipper.484cnenad,
-> #481, arazumenicŁŁŁ Ovoliko memorije ti treba za startovanje programa, ili je to dužina .EXE
ŁŁŁ fajla?
Još nisam dogurao sa EXE fajlom od 800 kb ali imam jedan od 680 Kb :(( i
on neće da radi odnosno ne mogu da startujem dibager.
ŁŁŁ Ako je prvi slučaj, onda ti ne valja .lnk fajl. Pošalji da ga vidimo.
U njemu nema ništa posebno. Ali evo skraćene verzije
BLINKER EXECUTABLE SERIAL 'BIT-MAP'
BLINKER INCREMENTAL ON
BLINKER INCREMENTAL PAD 500
BLINKER HOST MESSAGE ON
file AS
file ...
...
@sixcdx.lnk
LIB clipper
LIB extend
LIB bumenu
clipper.485nbatocanin,
-> #476, ikordic> Ostaje samo problem obrade svega toga u Clipper-u. Pritom
> ne mislim da je taj zadatak posebno težak, radi se
> prvenstveno o brzini kojom bi se takav program izvršavao.
> Ne znam da li si pokretao svoj LIST.PRG na nekoj 286-ici,
> ali ti mogu reći da je dosta spor, osvežavanje ekrana je
> prilično "stepenasto", ispis se "cima" gore-dole bri bržem
> kretanju po tekstu - a još nismo stigli ni do obrade
> teksta! Ovo kritika, naravno, nije upućena tebi, nego
> Clipper-ovoj "brzini".
Koristim (doduše dosta modifikovani) list u programima na 286
računarima i prilično sam zadovoljan brzinom. Trudio sam se da to
rešenje bude "čisto" i brzina izvršavanja je bila u drugom planu.
Moglo bi se dobiti na brzini, ali ne previše, ali bi se izgubila
sadašnja čista struktura. Naravno, kod alternative za obradu teksta
bi pojedini delovi morali biti pisani na asembleru ili C-u;
prvenstveno zbog analize stringova i ispisivanja šarenog teksta na
ekran.
> Elem, željno iščekujem(o) prvi pressrelease po pitanju
> TurboEdit-a :) ...
Eh, kao što rekoh to će morati da sačeka :( Propao projekat gde je to
zatrebalo, pa se obustavlja do prve prilike. Nego, sve mi se čini da
neću ni morati da radim taj procesor: jeste li videli CLText?
clipper.486nbatocanin,
-> #475, cnenad> Ali šta ako je programu potrebno 800 Kb memorije, plus CLD
> ? :((
??? Mora da si nešto grdno veliko natrpao u root: ja imam program od
oko 1.1MB EXE, a izvršava se u 500K sasvim pristojnom brzinom.
clipper.487dobrada,
-> #456, ikordic> SetCursor ()
Jedno od mogucih resenje je i sledece:
Pre izlaska u DOS:
nOldCurs = SetCursor() // Sacuvati oblik kursora
nCol = Col() // Eventualno i koordinate
nRow = Row()
cOldScreen = SaveScreen( 0, 0, MaxRow(), MaxCol() ) // Sacuvati ekran
Izaci u DOS
Po povratku vratiti stare parametre:
RestScreen( 0, 0, MaxRow(), MaxCol(), cOldScreen )
SetPos( nRow, nCol )
SetCursor( nOldCursor )
Moze se i napraviti funkcija koja sve ovo stavlja na stek (niz),
a posle povrati sa steka.
clipper.488dpredovic,
-> #477, ikordic> Pitanje sam postavio zato što, koliko sam shvatio, Clipper
> interpretira p-kod za vreme izvrsavanja a C(++), normalno, ne
> (ovo se, takođe, odnosi i na asembler). Kako sad to fercera -
> malo runtime interpretiranje, malo izvršavanje?
Interpretira se clipperov kod u low-level kod, a sav low-level je
(narafski) C ili asm.
> Još nešto u vezi sa MSC-om: zašto je za verzije >= 6.0 potreban
> LLIBCA.LIB iz MSC 5.1? Jel' ovi nemaju podršku za alternate
> math ili je drugačije koncipirana? Kako se više verzije (> 6.0)
> podnose sa Clipper-om?
Nikada mi nije zatrebao LLIBCA, ali verovatno je fazon da neke
funkcije mogu da promene ime u raznim verzijama...
> Smatram da je vrlo bitno insistirati na ovom pitanju, jer je
> Borland-ov C(++) de facto standardna alatka za razvoj
Khmm... Tryin to start a holly war or just kiddin? ;))
clipper.489cnenad,
-> #486, nbatocaninŁŁŁ ??? Mora da si nešto grdno veliko natrpao u root: ja imam program od
ŁŁŁ oko 1.1MB EXE, a izvršava se u 500K sasvim pristojnom brzinom.
Ne znam da li si obratio pažnju na primer LNK fajla koji sam poslao ali si
u pravu. Sve ide u ROOT.
Znači sve nepotrebno da ide u OVERLAY-e i onda neće biti problema ?
Samo još jedno pitanjce onda: zar se kad ide BEGINAREA pa spisak fajlova pa
ENDAREA pravi još jedan OVL fajl pored EXE-a ? Ako jeste tako da li se to
može izbeći, da znači sve bude u jednom EXE fajlu. Nisam siguran ali mi se
čini da ako se koristi BEGINAREA/ENDAREA nije moguće napraviti EXE sa
BLINKER EXECUTABLE DUAL opcijom ili tako nešto.
Smatram da je ovo izuzetno korisna osobina BLINKER-a i da je ne treba
tek tako ispuštati i ne koristiti je.
clipper.490arazumenic,
-> #484, cnenad-> Još nisam dogurao sa EXE fajlom od 800 kb ali imam jedan od 680 Kb :(( i
-> on neće da radi odnosno ne mogu da startujem dibager.
Pa šta ti je onda 800k ?
Izvinjavam se što odgovaram u samom citatu, ali me mrzi da prepisujem.
-> BLINKER EXECUTABLE SERIAL 'BIT-MAP'
-> BLINKER INCREMENTAL ON <--- ovo je default. Izbaci
-> BLINKER INCREMENTAL PAD 500 <--- OVO PRAVI PROBLEM. Stavi 60 ili izbaci
-> BLINKER HOST MESSAGE ON
-> file AS
<-------------------------- dodaj BEGINAREA
-> file ...
-> ...
<-------------------------- dodaj ENDAREA
-> čsixcdx.lnk
-> LIB clipper <----------------- ovo možeš da izbaciš
-> LIB extend <----------------- ovo možeš da izbaciš
-> LIB bumenu
Saša
clipper.491snemcev,
-> #484, cnenad>> LIB clipper
Za početak, umesto ovog stavi @Clp52min.lnk
clipper.492bulaja,
Još ne smem da tvrdim, ali izgleda da nemam više problema sa VMIF! :)
Programi koji su raznije redovno pucali nekoliko puta dnevno, već tri
dana rade bez ikakvih problema i bez ikakvog pucanja! Jedina izmena u
programu bilo je korišćenje updateovanog Blinker-a 3.01 i linkovanje
njegovih biblioteka u root (nema veze što ništa od njih ne koristim:)
odnosno ubacivanje ovoga u lnk file:
Lib BlxRateX
Search BlxClp52
Naravno još se ne može sa sigurnošću tvrditi da će ovim svi problemi
biti rešeni, ali bar u mom slučaju ima indicija da je ipak tako :).
clipper.493dr.grba,
-> #480, mdrazic>> P.S. Ipak, za mreže je pravo rešenje nešto poput ADVANTAGE
>> client/server RDD-a u Clipperu, odnosno NLM na Novell-u.
>> Bez izmene programa radi client/server na (istoj) mreži.
>> U prevodu (seek itd. se odvija na serveru - brzina, a
>> resetovanje stanice uzrokuje samo da zahtev za transakciju
>> nije kompletiran pa se ignoriše - sigurnost, potreban je
>> samo UPS na serveru za garantovan integritet podataka).
Vrlo, vrlo zanimljivo. Rad bih bio čuti još podataka o ovome. O probanju da
ne govorim (((:
clipper.494dr.grba,
-> #490, arazumenic>> -> čsixcdx.lnk
>> -> LIB clipper <----------------- ovo možeš da izbaciš
Bolje da ne izbacuje. Preporuka je da kad se koristi SIXCDX ili SIXNSX, da se
lib CLIPPER eksplicitno na vede, i to KAO DRUGI. Ovo da bi se prvo iz SIX
biblioteke uzele neke vrednosti koje imaju isti oblik komande (za primer,
pogledaj samo SET INDEX...)
clipper.495nbatocanin,
-> #484, cnenad> Još nisam dogurao sa EXE fajlom od 800 kb ali imam jedan
> od 680 Kb :(( i on neće da radi odnosno ne mogu da
> startujem dibager.
:))) Pa to je mačji kašalj! Mora da si sve strpao u root.
> U njemu nema ništa posebno. Ali evo skraćene verzije
Ovako kako si napravio sve ide u root! Moraš napraviti bar jednu
BEGIN..ENDAREA sekciju i tu staviti nešto. Šta treba staviti treba
odrediti eksperimantalno. Za početak probaj da staviš EXTEND.LIB i
uživaj...
clipper.496ljubaz,
dA LI NEKO IMA BIBLIOTEKU ArtFul TWO ?
pozdrav
LJUBAZ
clipper.497szeman,
-> #430, dpredovic>> čelja četvrta: /* ... */
>> Daj primer.
>>
>
> Pa, čini mi se da konstrukcije u stilu:
Uz poruku je prikačena arhiva PR102.ZIP sa DOC fajlom ;)
Ukratko uradjena je podrška komentarima i uvlačenje posle PROCEDURE i
FUNCTION i još neke sitnice, što možete da pročitate.
Javite da li je sve u redu, (da kucnem u drvo :) a bulaja će već da se
snadje :)
Pozdrav, Saša
pr102.zipclipper.498arazumenic,
-> #494, dr.grba-> Bolje da ne izbacuje. Preporuka je da kad se koristi SIXCDX ili SIXNSX,
-> da se lib CLIPPER eksplicitno na vede, i to KAO DRUGI. Ovo da bi se prvo
-> iz SIX biblioteke uzele neke vrednosti koje imaju isti oblik komande (za
-> primer, pogledaj samo SET INDEX...)
Objasni zašto da navodim CLIPPER.LIB.
U opštem slučaju, ako su definisane dve funkcije sa istim imenom, onda će
linker javiti upozorenje.
Za ovaj poseban slučaj (SIXCDX drajver), gde se neke naredbe predefinišu
(npr. USE), onda se pozivaju samo dodatne funkcije iz SIXCDX.LIB, koje su
različitog imena u odnosu na CLIPPER.LIB.
Što se tiče naredbe SET INDEX, ona se ne predefiniše u SIXCDX drajveru,
odnosno, ova naredba se prevodi isto kao i bez SIXCDX drajvera. Pogledaj
SIXCDX.CH, nigde se ne vidi da je promenjena komanda. Kao dokaz, evo
primera NTX.prg i SIX.prg:
=================
// NTX.prg
set index to zika
=================
=================
// SIX.prg
#include "sixcdx.ch"
set index to zika
====================
i njihov prevod sa clipper /p
// NTX.ppo
if !.F. ; ordListClear() ; end; ordListAdd( "zika" )
// SIX.ppo
#line 1 "c:Đclipper5ĐmojĐsixcdxĐ52ĐchĐsixcdx.ch"
EXTERNAL SIXCDX
#line 3 "TEST.PRG"
if !.F. ; ordListClear() ; end; ordListAdd( "zika" )
Saša
clipper.499ikordic,
-> #462, bulajaRE: Code Overhead
=> Ne koristiš? Ako imaš bar jedan GET u programu, onda ga i te kako
=> koristiš, sem ako nisi napravio kompletnu zamenu za GetSys.
Ajde ;). U svakoj funkciji koja koristi GET sistem, imam jedan
LOCAL aGetList := {} // malko izmenjen GET sistem, nervirala me
// nedoslednost u nomenklaturi
na početku, što znači da nigde ne baratam sa onim PUBLIC GetList-om.
Pošto sam se relativno kasno ušaltovao na Clipper, izbegao sam sve one
"bolesti" koje ljudi koji su počeli još sa dBase-om vuku za sobom. Tako se
pridržavam sledećeg:
* programi se prevode sa /m /n /w prekidačima
* dosledno primenjivanje koncepta modularnog programiranja sa oslanjanjem na
OOP
* nema runtime inicijalizovanja i kreiranja promenljivih. Sve promenljive se
definišu na početku i to sa odgovarajućom vidljivošću i životnim vekom
* PRIVATE i PUBLIC promeljive ne koristim uopšte; umesto njih LOCAL, STATIC
i neka žongliranja za globalnu vidljivost
* makroe ne koristim (zbogom data-driven rad ...); gde je baš nužno nešto
slično, stavljam kodne blokove ili izmenim kod da drugačije obavi zadatak.
* mađarska notacija i pregledno pisanje koda. NIKAD mi se još nije desilo da
imam potrebu za nekom alatkom kao što je SNAP ili PR koja će mi srediti
sors kako treba jer me mrzi da pritisnem TAB posle CASE ili slično.
clipper.500ikordic,
-> #485, nbatocaninRE: CLText
=> zatrebalo, pa se obustavlja do prve prilike. Nego, sve mi se čini da
=> neću ni morati da radim taj procesor: jeste li videli CLText?
Ne, a gde toga ima :)?
Uzgred, neko reče da je to rešenje dosta bugovito - jel' može malo opširnije
(neki kratak komentar - pro et contra)?
clipper.501ikordic,
-> #487, dobrada=> Jedno od mogucih resenje je i sledece:
=>
=> Pre izlaska u DOS:
Pa ne preterujmo, nisam baš totalna ofca :). Fala jasno da čuvam trenutne
parametre ekrana (da, na steku) i posle ih rekonstruišem. Taj sistem mi sa
opisanim problemom nije radio, pa sam ga ogolio samo na SetCursor ( 0 / 1 )
kombinaciju, ali i dalje ne ide. Ovo se dešava sa BLinker-om 3.0, Clipper 5.01
i testirano na 4 potpuno različite mašine.
clipper.502ikordic,
-> #488, dpredovicRE: Clipper vs. C
=> Interpretira se clipperov kod u low-level kod, a sav low-level je
=> (narafski) C ili asm.
Ergo, sfejedno C ili Clipper?!?
clipper.503ikordic,
-> #489, cnenad=> Znači sve nepotrebno da ide u OVERLAY-e i onda neće biti problema ?
Jasno. Uz BLinker ide i nekoliko Clipper primera, pa probaj. U svakom slučaju
svaki .LNK fajl završavaj jednim
@CL5??MID.LNK // (ono ?? je 01 ili 20, zavisno koji Clipper koristiš)
koji na poseban način ubacuje module iz CLIPPER i EXTEND biblioteka. Ukoliko
su performanse kritične, stavi CL5??MIN.LNK, a ukoliko si tanak sa memorijom
stavi CL5??MAX.LNK.
=> Samo još jedno pitanjce onda: zar se kad ide BEGINAREA pa spisak
=> fajlova pa ENDAREA pravi još jedan OVL fajl pored EXE-a ? Ako jeste
=> tako da li se to
Ne, sve ide u jedan .EXE fajl u kome se nalaze i overleji.
clipper.504ikordic,
-> #492, bulajaRE: VMIF
=> dana rade bez ikakvih problema i bez ikakvog pucanja! Jedina izmena u
=> programu bilo je korišćenje updateovanog Blinker-a 3.01 i linkovanje
=> njegovih biblioteka u root (nema veze što ništa od njih ne koristim:)
Totalna zbunjenost: zar nije rečeno da je frka do Clipper-a, a da BLinker
"samo potencira već postojeće probleme"? Kak'e veze ondak ima BLinker update?
Ako je ovo tačno, onda je problem rešen samo privremeno - to znači da ponovo
imamo pritajenu lutajuću bombu, koja čeka neki novi momenat da kaže BOOM!
clipper.505dpredovic,
-> #484, cnenad> Još nisam dogurao sa EXE fajlom od 800 kb ali imam jedan od 680
> Kb :(( i on neće da radi odnosno ne mogu da startujem dibager.
> BLINKER EXECUTABLE SERIAL 'BIT-MAP'
> BLINKER INCREMENTAL ON
> BLINKER INCREMENTAL PAD 500
!!!
:))) Svaka funkcija ti uzima 500 bajta više nego što joj treba,
smanji malo... Meni je default (128) sasvim OK.
clipper.506dpredovic,
-> #502, ikordic> => Interpretira se clipperov kod u low-level kod, a sav low-level je
> => (narafski) C ili asm.
>
> Ergo, sfejedno C ili Clipper?!?
Da, pogotovo otkada su u 5.2 (konačno) dokumentovali low-level
funkcije za stringove, fajlove, itd, pa je sve drugo čist
code-overhead...
clipper.507nbatocanin,
-> #487, dobrada>> SetCursor ()
>
> Jedno od mogucih resenje je i sledece:
>
> Pre izlaska u DOS:
Kod mene ovo ne radi.
clipper.508nbatocanin,
-> #489, cnenad> Znači sve nepotrebno da ide u OVERLAY-e i onda neće biti
> problema ?
Ne "nepotrebno", nego sve što se ne koristi često: sve svoje ne često
korišćene procedure strpaj u overlej. Za komercijalne biblioteke se
obično daju saveti kako ih rasporediti.
> Samo još jedno pitanjce onda: zar se kad ide BEGINAREA pa
> spisak fajlova pa ENDAREA pravi još jedan OVL fajl pored
> EXE-a ?
Ne. Ovo nije po defaultu, ali se može izvesti.
clipper.509nbatocanin,
-> #492, bulaja> Još ne smem da tvrdim, ali izgleda da nemam više problema
> sa VMIF! :)
Uh, bojim se da grešiš. Pogledaj šta piše u tekstu koji si poslao
(SIX vs COMIX):
DBFSIX is a great idea and a good implementation, but unfortunately,
it's broken. There are serious memory corruption bugs in it, and in
fact, the parts of DBF SIX that ship with Clipper 5.2 are the leading
cause for 5.2's unuseability in i'ts present form. Linking DBFSIX
into a 5.01 or 5.2 application will invariably result in 5333 and VM
Integrity Errors. SuccessWare knows about the problems and is
working on them. However that still doesn't take away from the fact
that DBFSIX can and will crash your application.
Ajde da nabavimo taj Comix :)
clipper.511nbatocanin,
-> #500, ikordic> => zatrebalo, pa se obustavlja do prve prilike. Nego, sve
> mi se čini da => neću ni morati da radim taj procesor:
> jeste li videli CLText?
>
> Ne, a gde toga ima :)?
Svuda po malo ;) Šifra: dođite da se dogovorimo ;)
> Uzgred, neko reče da je to rešenje dosta bugovito - jel'
> može malo opširnije (neki kratak komentar - pro et
> contra)?
Sistem je u fazi razgledanja :)
clipper.512dobrada,
-> #501, ikordic> => Jedno od mogucih resenje je i sledece:
Ako sam te dobro razumeo, ovaj primer ilustruje ono sto si hteo:
WinOpen(0,0,maxrow(),maxcol(), , 'w+/b') // Prozor aplikacije
inkey(0)
WinOpen(0,0,maxrow(),maxcol(),,'w/n',' ') // Prozor za DOS program
setcursor(1)
! ed // Startivanje Q editora
inkey(0)
WinClose()
inkey(0)
WinClose()
Dakle zelis da upalis kursor pre DOS programa i da ga ugasis po povratku u
tvoj program.
Opisi sta si konkretno hteo da startujes.
U prilogu RUN.ZIP je kompletan fajl sa funkcijama WinOpen() i WinClose().
Pokusao sam i sa EDIT ali nije bilo dovoljno memorije za startovanje, a
nisam imao neki drugi editor koji menja oblik kursora u zavisnosti od Ins.
Ovo kod mene radi: Clipper 5.01 + Rtlink
run.zipclipper.513jolicm,
HELP !
čelim da povezem clipper i msc 6.0
iz literature za clipper 5.2 stoje napisani parametri za kompajliranje
C programa za verziju 5.0, kada kompajliram sa tim parametrima program ne radi.
Dakle molim izgled komandne linije za kompajliranje msc6.0 funkcije.
Hvala :)
clipper.514pyramid,
-> #416, bdm.
> Moze malo vise informacija o ovome, tj. malo jasnije kako
> se to radi?
Obrada polja u VISE REDOVA u GET/READ sistemu
---------------------------------------------
Sintaksa:
@ top, left, bottom, right GET MEMO tekst_polje ...
Implementacija:
Ovo sto sledi (Pocetak ... Kraj) iskompilirajte i ulinkujte sa
svojim programom i koristite. Dati primer na kraju ovog teksta
iskopilirajte sa CL.BAT.
Napomena:
Osnovna ideja je iz knjige: "Clipper 5.2 - Mrezno programiranje"
od L. i B. (poglavlje o EMail-u, EMAIL.PRG), a ja sam ga malo
ulepsao (dodao okvir i naslov).
Sitan nedostatak (neko bi mogao da ga otkloni):
Moze da bude samo jedan GET MEMO po jednom READ-u, i to mora da
bude poslednji od svih GET-ova.
(To je zbog onog GE_WRITE ako je: nKey == K_CTRL_ENTER ...)
* P o c e t a k ************************************************************
#include "INKEY.CH"
#include "GETEXIT.CH"
#include "MEMOEDIT.CH"
#command INICIRAJ <p> NA <val> [,<pn> NA <valn>] ;
;
=> <p> := IIF(<p> == NIL, <val>, <p>) ;
[;<pn> := IIF(<pn> == NIL, <valn>, <pn>) ] ;
#xcommand @ <nTop>,<nLeft>,<nBot>,<nRight> GET MEMO <mVar> ;
[PICTURE <pic>] [<ro: READONLY>] [COLOR <cColor>] ;
;
=> @ <nTop>,<nLeft> CLEAR TO <nBot>,<nRight> ; ;
@ <nTop>,<nLeft> TO <nBot>,<nRight> ; ;
@ <nTop>,(<nRight>+<nLeft>+1-LEN(" O P I S "))/2 SAY " O P I S " ; ;
MEMOEDIT(<mVar>,<nTop>+1,<nLeft>+2,<nBot>-1,<nRight>-1,.F.,.F.) ; ;
AADD(GetList, GETNEW(<nTop>+1, <nLeft>+2, ;
{|val| iif(val==NIL,<mVar>,<mVar> := val)}, ;
<(mVar)>,<pic>,<cColor>)) ; ;
ATAIL(getlist):Reader := { | oget | MemoReader(oGet, <nTop>+1, ;
<nLeft>+2,<nBot>-1,<nRight>-1,!<.ro.>,<cColor>) }
****************************************************************************
//
// Function: MemoReader()
// Purpose: A function for READing memo gets
//
///////////////////////////////////
FUNCTION MemoReader(oGet,nTop,nLeft,nBottom,nRight,lReadWrite,cColor)
LOCAL oldColor,cMemo
INICIRAJ lReadwrite NA .T., cColor NA SETCOLOR()
oldColor := SETCOLOR(cColor)
cMemo := EVAL(oGet:Block) // Retrieve initial value...
KEYBOARD CHR(K_HOME)
cMemo := MEMOEDIT(cMemo,nTop,nLeft,nBottom,nRight,lReadwrite,"MemoUDF")
EVAL(oGet:Block,cMemo)
SETCOLOR(oldColor)
RETURN ( NIL )
*
**********************************************************
*
FUNCTION MemoUDF(nMode,nLine,nCol)
*
**********************************************************
*
LOCAL nKey := LASTKEY()
LOCAL nRetVal := 0
STATIC nLastLine := 0
DO CASE
CASE nKey == K_UP
*
* Na prethodno polje, ako smo u prvom redu
*
IF nLine == 1 .and. nLastLine == 1
KEYBOARD CHR(K_CTRL_W)
GetActive():ExitState := GE_UP
ENDIF
CASE nKey == K_CTRL_UP .AND. nMode <> ME_INIT
*
* Na prethodno polje
*
KEYBOARD CHR(K_CTRL_W)
GetActive():ExitState := GE_UP
CASE (nKey == K_CTRL_ENTER .OR. nKey == K_CTRL_DOWN) .AND.;
nMode <> ME_INIT
*
* Na sledece polje
*
KEYBOARD CHR(K_CTRL_W)
GetActive():ExitState := GE_WRITE
CASE nKey == K_ESC
*
* Prekid unosa
*
Getactive():ExitState := GE_ESCAPE
ENDCASE
nLastLine := nLine
*
RETURN ( nRetVal )
* K r a j ******************************************************************
*
* P R I M E R
*
Polje1 := SPACE(20); Polje2 := SPACE(30); Polje3 := ""
SETCOLOR("W/B,B/W,,,W/N")
DO WHILE .T.
CLS
@ 3, 3 TO 17,67 DOUBLE
@ 5, 5 SAY "Polje 1:"; @ 7, 5 SAY "Polje 2:"
@ 5,15 GET Polje1 PICTURE "@!K"; @ 7,15 GET Polje2 PICTURE "@!K"
@ 9, 5,15,65 GET MEMO Polje3 COLOR "GR+/B"
READ
IF LASTKEY() == K_ESC
EXIT
ENDIF
? Polje1; ? Polje2; ? Polje3
inkey(0)
ENDDO
*
* K R A J P R I M E R A
*
****************************************************************************