clipper.306nbatocanin,
-> #276, neman> Testirajuci brzinu aplikacije uvideo sam da DBCOMMIT()
> dosta usporava izvrsenje aplikacije, cak i na
> jednokorisnickoj masini.
Ovo je vrlo čudno: COMMIT je vrlo brz, a DBCOMMIT() još brži, jer
snima samo tekuću radnu zonu. Ako nemaš baš *ogroman* broj polja+memo
u slogu, ovo bi moralo da bude praktično trenutno (snimanje 1-2K na
disk!). Još ako koristiš SHARED za otvaranje, u memoriju se učitava
manje podataka, pa je COMMIT još brži. Ja isto uvek uradim COMMIT po
upisu i nikad mi to nije usporilo program. Nešto mi je ona funkcija
ChkRec() sumnjiva?
clipper.307nbatocanin,
-> #285, d.petrovic> neaktivnosti tastature od n sekundi izvrši upis na disk, a
> svuda gde treba izvršiti upis umesto dbcommit() postavljam
> promenljivu koja kontroliše upis na .T.
Clipper automatski povremeno prazni memorijske bafere, samo se ne
može tačno odrediti kad. COMMIT služi da se isprazne svi baferi kod
kritičnih operacija. Pražnjenje bafera se obično radi kad je
tastatura nektivna, tj. kada korisnik ništa ne ukucava, zato nisam
siguran da ubacivanje COMMIT-a u funkciju za skaniranje ima nekog
efekta?
clipper.308bipin,
Kako u *.pll-u zameniti f-ju BiloKoju() za novu verziju iste.
Za biblioteku je <<< TLIB proba -+ BiloKoju >>> a za PLL?
clipper.310neman,
-> #306, nbatocanin> Ovo je vrlo cudno: COMMIT je vrlo brz, a DBCOMMIT() jos
> brzi, jer snima samo tekucu radnu zonu. Ako nemas bas
> *ogroman* broj polja+memo u slogu, ovo bi moralo da bude
> prakticno trenutno (snimanje 1-2K na
Pa dobro, odokativno sam primetio usporenje kod aplikacije
, disku se pristupa vise sto ima za posledicu sporiji odziv.
To i nije mnogo znacajno kod prostog azuriranja podataka,
problem se javlja recimo sekvencijalne obrade kada treba
pristupati vecem broju slogova i azurirati ih. Problem se samim
tim javlja i kod mreznih aplikacija jer da bi performanse celog
sistema aplikacija-mreza-racunari bile sto bolje treba sto efikasnije
tj sto manje pristupati podacima ( molim da ne bude komentara
tipa " a sta je sa client-server bazama " jer razgovaramo o Clipperu )
Onda sam napisao ranije pomenuto programce kojim sam testirao
uticaj DBCOMMIT()-a. Imam disk sa vremenom pristupa od 26ms i
386DX na 20 MHz, BUFFERS=10. Odnos vremena izvrsenja programa
sa DBCOMMIT() i bez doticne funkcije je ipak prevelik da bih
olako presao preko toga. Treba uzeti u obzir i cinjenicu da
ima korisnika ( uopste gledano ) koji poseduju AT 286 / 12 MHz
masine ( dobro ih sluze ) i nije mi svejedno reci da kupe neku
386DX/40 MHz, disk < 16ms da bi aplikacija isla brze.
Sto se tice broja od 1 - 2 K nisam bas siguran da je samo toliko.
Nemam literaturu o organizaciji CLipper-ove memorije za podatke,
tako da cu sledeca racunica ne mora da bude tacna ali ...
Velicina bafera - 64K
Ako imas 10 otvorenih datoteka ukljucujuci i indekse onda svaka zona
zauzme po oko 6-7 KB. E sad ako se kaze da UNLOCK cini promene vidljive
ostalim procesima tu moze da se kaze da ima do 1 K podataka. Medjutim
DBCOMMIT() prazni bafere, pa kad prvo isprazni (snimi) pomenutih 6-7 kb,
pa isprazni DOS bafere 512*n bajtova pa jos i izvrsi i solid-write
to mu onda dodje do 10-ak K ?
ChkRec() upotrebljavam na sledeci nacin
STATIC _m_chkfld
// Azuriranje
defrec()
@ y, x SAY ... GET ...
READ
IF RECLOCK(10) .AND. CHKREC()
REPL
DBCOMMIT(); UNLOCK
ENDIF
PROC defrec
LOCAL wi
_m_chkfld := {}
FOR wi := 1 TO FCOUNT(); AADD( _m_chkfld, FIELDGET(wi)); NEXT
RETURN
FUNC chkrec
LOCAL wret := .T.
FOR wi := 1 TO FCOUNT(); wret := wret .AND. _m_chkfld[wi] == FIELDGET(wi);
NEXT
IF !wret
ALERT("podaci su izmenjeni tokom rada;ponovite a`uriranje")
ENDIF
RETURN wret
clipper.309neman,
-> #304, mickeyl> Pozdrav i ne ljuti se.
Nema problema, ja to samo onako ;)
clipper.311toma,
-> #307, nbatocanin■> .................... Pražnjenje bafera se obično radi kad je
■> tastatura nektivna, tj. kada korisnik ništa ne ukucava, zato nisam
■> siguran da ubacivanje COMMIT-a u funkciju za skaniranje ima nekog
■> efekta?
Ja jesam :), primer:
use test
for n:=1 to 1000
append blank
replace POLJE with str(n)
next n
a:=0
@10,10 get a
read
.......žekao sam 40 sec i resetovao. Nije se NIŠTA upisalo na disk!
clipper.312v.nesic,
-> #307, nbatocanin> kritičnih operacija. Pražnjenje bafera se obično radi kad je
> tastatura nektivna, tj. kada korisnik ništa ne ukucava, zato nisam
žini mi se da ti imaš original programa pa ću da te zamolim da
nekom zgodnom prilikom ovde javiš šta kaže dokumentacija po tom
pitanju, tj kada se vrši snimanje na disk sem u slučaju
eksplicitnog zahteva sa nekom od commit naredbi.
clipper.313snemcev,
U vezi korišćenja direktiva pretprocesora #command i #translate
Imam recimo funkciju Trt koju pozivam sa argumentima (a, b, c). Treba mi
direktiva pretprocesora koja bi poziv funkcije Trt(a, b, c) pretvorila u
Trt(a, const, b, c). Ako uzmem #command, Clipper prijavljuje 'C 2079
Circular #translate/#command'. Može li se ovo uopšte uraditi i kako?
clipper.314ndragan,
-> #302, nesa/> U FP2.+ postoji bibliotetka netware.plb; nismo se još sigrali s
/ Kasno sam se priključio! Može li dodatno objašnjenje?! :(
Bogami si me naterao da pročitam šta veli help na tu temu (ako imaš
fokspro, pročitaj, otprilike dvadeseta tema odozgo, ako ne, nisi mnogo
propustio - dvetri poruke).
Ono što mene zanima je da li TTS omogućuje zaštitu od prljavog čitanja.
O čemu se radi: na dve mašine sabiramo nešto nas dvojica i upisujemo
rezultat na isto mesto. Neka tamo u početku piše 1000, i to smo
pročitali obojica. Ja dodam 20 i hoću da upišem; on dodaje 30 i hoće da
upiše. Ako sam ja prvi uleteo, šta će Novel uraditi (ako smo obojica
markirali početke i krajeve transakcija):
- upisaće 1020 a njemu javiti da transakcija nije prošla
- upisaće 1020, pa posle 1030 a onih 20 pojela cica maca
- upisaće 1050 i pokazati više simptome inteligencije nego što ja
očekujem od njega
- zbingovaće se i reći da pozovemo NjetWare, gde će nam pozdraviti
širu rodbinu što radimo sa žutom verzijom, koje i mi njima isto tako
želimo nazad
Zna li neko?
clipper.315ndragan,
-> #305, mickeyl/ se desi da se neke promjene snime na disk i u tom slučaju,
/ ne možeš Jovo nanovo :((.
Isprojektuj obradu da bude ponovljiva. Može, može.
clipper.316mcgoran,
-> #313, snemcev#define trt(a,b,c) trt(a,x,b,c)
clipper.317bulaja,
-> #312, v.nesic│Cini mi se da ti imas original programa pa cu da te zamolim da nekom
│zgodnom prilikom ovde javis sta kaze dokumentacija po tom pitanju, tj
│kada se vrsi snimanje na disk sem u slucaju eksplicitnog zahteva sa
│nekom od commit naredbi.
└───
Prilikom svakog SKIP ili GO TO, tj. dbSkip() i dbGoTo() (ovo pise i u
uputstvu, a i u NG). Verovatno je praznjenje bafera vezano i za keyboard
inactivity, a mozda i za memory manager.
clipper.318snemcev,
-> #316, mcgoran>># define trt(a,b,c) trt(a,x,b,c)
Brzo, kratko, jasno.
A sad malo da zakukuljim - kako kad treba da ostane isti broj parametara?
Npr. Trt(a, b, c) => Trt(c, a, b)
clipper.319toma,
■> zip20 a01 122567 Info-Zip, PKZip 2 kompatibilni arhiver (source)
■> zip20 a02 119897 Info-Zip, PKZip 2 kompatibilni arhiver (source)
Kad bi se ovo povezalo s Clipperom ....
clipper.320mcgoran,
-> #318, snemcev#abrakadabra TRT MILOJKA => MILOJKA TRT ;(
Copyright (C) NoSense Soft Systems., All Rights Reserved
clipper.321mickeyl,
-> #315, ndragan=> Isprojektuj obradu da bude ponovljiva. Može, može.
Znam da može, ono se odnosilo samo na najjednostavniju
obradu. Pa reko ajd da upozorim :).
clipper.323v.nesic,
-> #317, bulaja> Prilikom svakog SKIP ili GO TO, tj. dbSkip() i dbGoTo() (ovo pise i u
> uputstvu, a i u NG). Verovatno je praznjenje bafera vezano i za keyboard
Ja probao i ne radi. Evo programa :
use proba
for i:=1 to 10000
append blank
replace proba->proba with "dsfljh"
endif
go 1
alert("Resetuj me!"," Ako smeš :> ")
Kada mi se pojavi poruka udarim Ctrl-Alt-Del i kada dođe sebi sa
DBU PROBA utvrdim da je datoteka prazna.
clipper.322v.nesic,
-> #318, snemcev> Npr. Trt(a, b, c) => Trt(c, a, b)
Pa isto sa #define, samo pazi da onda uvek moraš da pišeš Trt, trt
ili TRT neće da rade sa #define, sa #command i #translate hoće...
clipper.324ndragan,
-> #311, toma/ .......žekao sam 40 sec i resetovao. Nije se NIŠTA upisalo na disk!
Dobio si fajl dužine nula, ili prazan kao što je bio. DOS tek prilikom
zatvaranja fajla upisuje njegovu dužinu u direktorij; eventualno je
povećava kad program zatraži nove klastere, onda upiše one prethodne.
Sve skupa, treba povući vodu (u foksu se pomenuta naredba zove Flush) s
vremena na vreme u toku unosa, a kod ovakvih 'obrada' namestiti da budu
ponovljive.
clipper.325cnenad,
-> #6, dejanrŁŁŁ (istina, ne za te koji koriste declipper, takve jos, fala
ŁŁŁ Bogu, nisam imao,
Dejane da li mislis na DISCLIPPER ili bas DECLIPPER, jer skinuo sam
sa EUKLID-a DISCLIPPER ali program ne radi kako treba odnosno nisam
nista uspeo sa njim da uradim. A ako je u pitanju DECLIPPER onda
je to izgleda nesto novo i opasno ?
clipper.326toma,
-> #323, v.nesic■>> Prilikom svakog SKIP ili GO TO, tj. dbSkip() i dbGoTo() (ovo pise
■>> i u uputstvu, a i u NG). Verovatno je praznjenje bafera vezano i
■> za keyboard
■>
■> Ja probao i ne radi. Evo programa :
Izgleda da ne radi zato što nije radio pod mrežom :))
Šta kaže NG za GO:
■ Refreshing database and index buffers: In a network environment,
you can refresh database and index buffers without moving the record
pointer using GO RECNO(). Refer to the Network Programming chapter
in the Programming and Utilities book for more information.
Jel to to?
clipper.327nbatocanin,
-> #311, toma> Ja jesam :), primer:
>
> use test
> for n:=1 to 1000
> append blank
> replace POLJE with str(n)
> next n
> a:=0
> @10,10 get a
> read
> .......žekao sam 40 sec i resetovao. Nije se NIŠTA upisalo
> na disk!
U pravu si. Prvo što sam pomislio je da se upis vrši kada se popuni
memorijski bafer. Zato sam ovaj primer izmenio tako da slog bude
veličine 50-60K. Međutim, ništa se ne upisuje na disk i u slučaju
takvih velikih slogova!
A što se tiče "rada u pauzi", evo šta kaže NG:
NOIDLE prevents CA-Clipper from detecting and taking advantage
of idle time during execution of compiled applications. CA-Clipper
detects idle states (e.g. keyboard wait states) during execution of
compiled applications. When an idle condition is detected, the system
uses the slack time to perform garbage collection, file updates, and
other routine housekeeping duties. This increases system performance
by performing this work while the application is waiting for user
input.
Note: NOIDLE is provided for applications in which idle time
processing is unacceptable. Since it reduces overall system performance,
its use is generally not recommended.
Izgleda da se prethodno ne odnosi na fizičko upisivanje u datoteku.
clipper.328nbatocanin,
-> #310, neman> Sto se tice broja od 1 - 2 K nisam bas siguran da je samo
> toliko. Nemam literaturu o organizaciji CLipper-ove
> memorije za podatke, tako da cu sledeca racunica ne mora
> da bude tacna ali ...
> Velicina bafera - 64K
U pravu si: ono 1-2K sam rekao otprilike i bez razmišljanja.
Verovatno se radi o većoj vrednosti. Međutim, što se tiče bafera od
64K, nema šanse: za baferisanje podataka se koristi VMM, a on alocira
memoriju do 64MB!
> ChkRec() upotrebljavam na sledeci nacin
žini mi se da ovaj sistem sa memorisanjem sloga može znatno usporiti
rad. Probaj da izbaciš ovo. Interesuje me da li se nešto menja u
brzini.
clipper.329nbatocanin,
-> #308, bipin> Kako u *.pll-u zameniti f-ju BiloKoju() za novu verziju
> iste. Za biblioteku je <<< TLIB proba -+ BiloKoju >>> a za
> PLL?
Napraviš novi PLL.
clipper.331nbatocanin,
-> #312, v.nesic> žini mi se da ti imaš original programa pa ću da te
> zamolim da nekom zgodnom prilikom ovde javiš šta kaže
> dokumentacija po tom pitanju, tj kada se vrši snimanje na
> disk sem u slučaju eksplicitnog zahteva sa nekom od commit
> naredbi.
Uh, trenutno mi papiri nisu ovde, ali videću.
clipper.332nbatocanin,
-> #318, snemcev> A sad malo da zakukuljim - kako kad treba da ostane isti
> broj parametara? Npr. Trt(a, b, c) => Trt(c, a, b)
Pošto se pretprocesirane linije ponovo pretprocesiraju sve dok može,
lako će ti se desiti da upadneš u mrtvu petlju. Zašto komplikuješ i
ne rešiš sve oko argumenata u okviru f-je Trt?
clipper.330nbatocanin,
-> #314, ndragan> Ono što mene zanima je da li TTS omogućuje zaštitu od
> prljavog čitanja.
Nemam iskustva sa TTS-om, ali mi se čini da ovo mora da kontroliše
tvoja aplikacija (sistem za upravljanje bazom podataka, što bi
rekli). Otkud TTS da zna *tačno* šta ti hoćeš? Možda baš hoćeš da
gubiš promenu u ovakvim situacijama?
clipper.333dr.grba,
-> #325, cnenad>> sa EUKLID-a DISCLIPPER ali program ne radi kako treba odnosno nisam
>> nista uspeo sa njim da uradim...
Disclipper može da razbije kod pisan u Clipperu S'87, pod uslovom da
je pisam u plain vanila Clipperu.
clipper.334.bale.,
-> #327, nbatocanin>> .......žekao sam 40 sec i resetovao. Nije se NIŠTA upisalo
>> na disk!
>
> U pravu si. Prvo što sam pomislio je da se upis vrši kada se popuni
> memorijski bafer. Zato sam ovaj primer izmenio tako da slog bude
> veličine 50-60K. Međutim, ništa se ne upisuje na disk i u slučaju
> takvih velikih slogova!
E, kako sad a da ne zaje*avam? ;-))) Nije nego, možda je ovako, a
možda onako... Možda pukne, a možda i ne :)
clipper.335snemcev,
-> #332, nbatocanin>> Pošto se pretprocesirane linije ponovo pretprocesiraju sve dok može,
>> lako će ti se desiti da upadneš u mrtvu petlju. Zašto komplikuješ i
>> ne rešiš sve oko argumenata u okviru f-je Trt?
Zato što je Trt sistemska funkcija iz Clipper-ovih biblioteka ;(((
Izgleda da ona ideja sa #define i obraćanjem pažnje na mala i velika
slova može da posluži kao rešenje. Any other ideas?
clipper.336cnenad,
-> #333, dr.grbaŁŁŁ Disclipper moze da razbije kod pisan u Clipperu S'87, pod
ŁŁŁ uslovom da
To mi rece Vlada, ali videh da Dejan spominje DECLIPPER pa reko da
pitam jel imo neko iskustva sa takvim stvarima.
clipper.337arazumenic,
Kako nisam dobio odgovor na ranije pitanje, evo ga ponovo, jer mi je
zbilja veoma potrebno:
Kako u memoedit funkciji ograničiti unos na odredjeni broj redova?
Saša
clipper.338toma,
-> #337, arazumenic■> Kako u memoedit funkciji ograničiti unos na odredjeni broj redova?
Odmah da ti kažem, ovo je samo teorija, tj nisam probao ali
trebalo bi da radi.
Pretpostavljam da si proučio Batoćaninov Editor u Clipper-u, e
problem je što se tasteri koji prave novu liniju prvo izvrše pa onda
predaju kontrolu funkciji, ali.. odo da probam...
I naravno, jedna dobra ;) i jedna loša :( vest.
Dakle, uspeo sam da kontrolišem taster ENTER na sledeći način:
(delovi iz Editora..)
provera:=.F.
WHILE .T.
DoNotesEdit()
// Koja je komanda?
Ch := LastKey()
if provera
broj_linija:=mlcount(tekst,tekst_sirina)
if broj_linija > 10
keyboard chr(K_UP)+chr(K_END)+chr(K_DEL)
endif
loop
endif
......... Dakle ako je ENTER i broj linija veći od 10, vrati
kursor na prethdnu poziciju (UP + END + DEL) ....., naravno potreban
je i deo u user-defined :) funkciji....
CASE Mode == ME_IDLE
// Ispisivanje pozicije
Ch := LastKey ()
if Ch==K_ENTER
provera := .T.
keyboard chr(K_CTRL_W)
endif
..................
OTHERWISE // Mode == 2 i Mode == 3
Ch := LastKey ()
CASE Ch == K_CTRL_W
if !provera
Ret := ME_IGNORE
else
Ret := K_CTRL_W
endif
..... Ovo je isprobano i radi, aliiiii...
Loša vest. Novu liniju pravi ENTER (što smo rešili) i strelica na
dole (isključivo strelica, ništa PgDn, ništa Ctrl-X). Isti mogu da
izazovu kreiranje nove linije prelaskom u najdonji :) red teksta ili
prelamanjem linij (ENTER i insert mod). Dakle i strelica se da
repišiti na ranije opisan način. Međutim i dalje ostaje problem šta
ćemo sa rečima koje automatski padaju u sledeći red. Kao jedina
ostaje mogućnost da proveravamo ama baš svaki taster koji Memoedit
sam obradi (Mode == ME_IDLE) i onda:
ako je ENTER, ubacimo u bafer K_UP K_END K_DEL
ako je K_DOWN, --- || --- K_UP,
i ako je bilo šta drugo ubacimo K_BS (Backspace).
Napominjem da sam probao i realizovao samo ENTER, za ostalo ne
garantujem :))
ps. Sorry ako je nečitko i nejasno, malo je kasno, tj. rano
clipper.339majkl,
-> #314, ndragan> Ono što mene zanima je da li TTS omogućuje zaštitu od
> prljavog čitanja.
Bez obzira da li se koristi TTS ili ne, čitanje vrednosti radi
izmene treba vršiti tek nakon zaključavanja. Pre i nije potrebno, i
rešava problem.
Mislim da ni TTS (kada bi trebao da omogući takvu zaštitu) ne bi
mogao drugačije, a onda bi naleteo na problem: da li je ovo čitanje
radi promene ili ne (recimo uzimanje podataka iz šifarnika). TTS-u
ostaje rešavanje drugih problema, poput dead lock-a i sl.
clipper.340dr.grba,
-> #336, cnenad>> To mi rece Vlada, ali videh da Dejan spominje DECLIPPER pa reko da
>> pitam jel imo neko iskustva sa takvim stvarima.
Na kraju se UVEK svede na to da mi je lakše da osmislim svoje, pa to
i realizujem nego da čačkam tuđ kod. Eventualno da nešto naučim, da
vidim neki princip rešenja, onako kako Nenad radi u svojoj školi
Clippera u Računarima. Ali da sednem, pa petljam po celom source-u
aplikacije u kojoj je neko ostavio tragove svih svojih žurbi i
cajtnota... Ni u svojim programima to ne radim...
I zato, moj ti je kolegijalni savet da se ne trudiš i ne insistiraš
na upotrebi raznih razbijača koda. Suma sumarum - neće ti doneti
nikakvo dobro.
clipper.341cnenad,
-> #340, dr.grbaŁŁŁ I zato, moj ti je kolegijalni savet da se ne trudis i ne
ŁŁŁ insistiras na upotrebi raznih razbijaca koda. Suma sumarum -
ŁŁŁ nece ti doneti
Pitam da neko ne bi slucajno moj EXE razbijao a ne da ja razbijam
tudje. Ako znas ono ako ne mozes da ih pobedis pridruzi im se...
clipper.343arazumenic,
-> #338, toma-> Odmah da ti kažem, ovo je samo teorija, tj nisam probao ali
-> trebalo bi da radi.
Hvala na ideji!
Ovo ću koliko sutra da probam, mada mi je želja bila da ako je moguće
ne koristim taj editor, jer mi nisu bile potrebene ugradjene funkcije.
Saša
clipper.345dr.grba,
-> #341, cnenad>> Pitam da neko ne bi slucajno moj EXE razbijao a ne da ja razbijam
>> tudje. Ako znas ono ako ne mozes da ih pobedis pridruzi im se...
Sećaš li se one priče o kriptovanju, pre izvesnog vremena u grupi
bussines? E, pa kriptovanjem rešiš sve stringove čijom bi izmenom
lopov došao do besplatnog programa za svoje potrebe.
clipper.344dr.grba,
Juče sam u PC.PROG:algoritmi napisao par reči o svom iskustvu u
traženju algoritma za dodelu kontrolnog broja žiro računu, kao
što traži SPPFN, eto čisto da ne zadremamo (:
Smlatio sam neko programče koje vam prepuštam na milost i nemilost.
Taj algoritam ja dalje razvijam za protrčavanje kroz nekoliko baza,
a ovaj deo svakako ostaje kao trajna kontrola za budućnost. Štaviše,
mislim, malo bolje razvijenom funkcijom logičke kontrole bi se mogao
trajno rešiti proces unosa žiro računa...
Svima kojima treba MOJ žiro račun u smislu dodele novčanih sredstava
sugeriram da ga traže na ma wr dr.grba (;
mod11.zipclipper.346cnenad,
-> #345, dr.grbaŁŁŁ Secas li se one price o kriptovanju, pre izvesnog vremena u
ŁŁŁ grupi bussines? E, pa kriptovanjem resis sve stringove cijom
ŁŁŁ bi izmenom lopov dosao do besplatnog programa za svoje
ŁŁŁ potrebe.
Da, secam se. Ali ja i dalje ostajem pri pitanju. Moze li se necim
razbiti EXE pisan u 5.01. Kriptovanje je na mestu ali sta to vredi ako on
razbije EXE u SOURCE ? Onda nije tesko promeniti ime korisnika programa ?
clipper.347bipin,
-> #329, nbatocanin# > Kako u *.pll-u zameniti f-ju BiloKoju() za novu verziju
# > iste. Za biblioteku je <<< TLIB proba -+ BiloKoju >>> a za PLL?
#
# Napraviš novi PLL
U pitanju su objekti onog Slovaka.
Jedino PLL daje korektnu aplikaciju, a kada povezem sa LIB-om
zaglavljuje kod kreiranja System1.dbf bez kreiranja Syserror.txt.
Isto se desava kada kreiram LIB ili PLL.
clipper.348d.petrovic,
-> #346, cnenadĂ> razbiti EXE pisan u 5.01. Kriptovanje je na mestu ali sta to
Ă> vredi ako on razbije EXE u SOURCE ? Onda nije tesko promeniti ime
Ă> korisnika programa ?
ma ne zamaraj se bre :). Mislim da program preveden rtlink-om, sa
dinamičkim overlejima ne može da razbije. Program preveden blinkerom
isto ne može. E... program bez overleja..., nemam pojma, ali ko to
još pravi u kliperu ? ;))
clipper.349snemcev,
-> #344, dr.grba>> Štaviše, mislim, malo bolje razvijenom funkcijom logičke kontrole bi
>> se mogao trajno rešiti proces unosa žiro računa...
Da, ali samo za "obične" žiro račune. Koji kontrolni broj u ovom računu
(osim poslednjeg, koji je UVEK kontrolni broj)?
65500-840-215-62420
>> Svima kojima treba MOJ žiro račun u smislu dodele novčanih sredstava
>> sugeriram da ga traže na ma wr dr.grba (;
A jel ima kontrolni broj? ;))
clipper.350snemcev,
-> #347, bipin>> U pitanju su objekti onog Slovaka.
Bači bre to! Jes' da je interesantno, al' je sporo do zla boga.
clipper.351mandrejevic,
Pomagajte drugovi...
Kako da napravim PICTURE za TBCOLUMN?
Direktni pristup radi:
oC := TBColumnNew('Dat.Izd.', {|| Transform(_work -> dat_izd, '@d')})
Ali hocu da napravim univerzalni TBROWSE:
oC := TBColumnNew(cNaslov, {|| Transform(cImePolja, cPicture)})
^^^^^^^^^
Probao sam sve varijane sa makro operatorima ali nista ne pomaze ??!!
Dobijem recimo 'da._.zd'
clipper.352cnenad,
-> #348, d.petrovicŁŁŁ isto ne moze. E... program bez overleja..., nemam pojma, ali
ŁŁŁ ko to jos pravi u kliperu ? ;))
Ja, za sada... A inace linkujem BLINKER-om.
clipper.353oldtimer,
Pitanje postavlja kolega iz firme, pa reply može u mail ali je
bolje na voice (firma se zove MOVENS, čeljko, 1768-963, ili na
kućni broj 123-231)
Imam sledeci problem:
Pri upisu na mrežni disk Clipper mi javi internu grešku
i iskoči iz rada. Zapis je nečitak kao i sledećih nekoliko
(desetak) u toj datoteci. Ako je nastavljeno sa radom, a
greška nije ispravljena ostali zapisi su regularni. Pri
naknadnom ispravljanju (brisanje loših rekorda i pakovanje
datoteke) loši postaju zapisi koji su pre pakovanja bili iza
prljavog dela.
Podatke mogu koristiti samo ako one ispravne prebacim u
privremenu datoteku, obrišem izvornu i onda preimenujem
privremenu.
Ovo se desilo nekoliko puta u toku ove godine, a neznam
šta je uzrok tome jer se dešava na operaciji koja se dnevno
izvršava i po stotine puta. Radi se o dodavanju po nekoliko
desetina zapisa u datoteku odjednom i više korisnika istovremeno.
žudno mi je to što je datoteka neupotrebljiva i kada obrišem
loše zapise.
Da li je u pitanju nešto vezano za Clipper ili je neki problem
sa mrežnim diskom (Seagate - 300 MB - Novell 3.11)?
B) Miša
clipper.356nbatocanin,
-> #337, arazumenic> Kako u memoedit funkciji ograničiti unos na odredjeni broj
> redova?
Ovako bez probe:
1) U statusnoj liniji normalno ispisuješ brojeve Lin/Col, a kada
korisnik prešiša, ti mu ispišeš blink poruku "MALI, NE PRETERUJ" ;)
2) Isto to, ali kad se brojač redova popne na nedozvoljen nivo
ignorišeš tekuću komandu i generišeš skok na poslednji regularan red.
3) Napraviš običan GET željenog broja stringova.
clipper.355nbatocanin,
-> #335, snemcev> Zato što je Trt sistemska funkcija iz Clipper-ovih
> biblioteka ;((( Izgleda da ona ideja sa #define i
> obraćanjem pažnje na mala i velika slova može da posluži
> kao rešenje. Any other ideas?
Daj malo više detalja, pa da vidimo.
clipper.354nbatocanin,
-> #334, .bale.>>> .......žekao sam 40 sec i resetovao. Nije se NIŠTA
>>> upisalo na disk!
>>
>> U pravu si. Prvo što sam pomislio je da se upis vrši kada
>> se popuni memorijski bafer. Zato sam ovaj primer izmenio
>> tako da slog bude veličine 50-60K. Međutim, ništa se ne
>> upisuje na disk i u slučaju takvih velikih slogova!
>
> E, kako sad a da ne zaje*avam? ;-))) Nije nego, možda je
> ovako, a možda onako... Možda pukne, a možda i ne :)
žuj, rasprave o ovakvim situacijama mogu biti samo komplikovanije i
za najbolje operativne sisteme/programe: šta će se desiti ako nestane
struja u toku kritičnih situacija?
U vezi teme, prevideo sam ono što reče NDragan: DOS ne menja dužinu
datoteke sve dok se ne zatvori. Zato se može reći da Clipper ne
upisuje *ništa* u DBF sve dok se ne zada COMMIT ili se datoteka
zatvori! Hmmm, kad malo razmislim, ovo i nije tako loše: kad radim
neku transakciju, mogu da računam da nikad neće biti upisan samo deo
slogova, već ili svi ili nijedan! Ali, ako želim da ostane što više,
onda nema druge nego COMMIT iza svake operacije.
clipper.357d.petrovic,
-> #352, cnenadĂ> ŁŁŁ isto ne moze. E... program bez overleja..., nemam pojma, ali
Ă> ŁŁŁ ko to jos pravi u kliperu ? ;))
Ă>
Ă> Ja, za sada... A inace linkujem BLINKER-om.
Pa koliki su ti programi? ;)
clipper.358.bale.,
-> #354, nbatocanin> slogova, već ili svi ili nijedan! Ali, ako želim da ostane što više,
> onda nema druge nego COMMIT iza svake operacije.
A šta je sa dvofaznim COMMIT-om? Kad već Clipper to sam ne radi (ili
radi?), možeš to da ubaciš u svaku aplikaciju. Pa onda rollback itd,
ispade aplikacija od 1000 linija velika 4MB ;-) Naravno, isključi se
cache diska, osim, eventualno, ako je ugrađen u OS, a znamo da nije :)
clipper.359snemcev,
-> #355, nbatocanin>> Daj malo više detalja, pa da vidimo.
Recimo da se funkcija zove dbUseArea() i da njen treći parametar treba
promeniti tako da umesto vrednosti "koznasta" dobije vrednost
"e:\koznasta". Kontrola pristupa podacima iz programa tj. program može
da uzima podatke samo sa unapred određenog mesta, a ne iz tekućeg
direktorijuma ili ko zna odakle.
clipper.360v.nesic,
-> #351, mandrejevic> Kako da napravim PICTURE za TBCOLUMN?
> ...
> oC := TBColumnNew(cNaslov, {|| Transform(cImePolja, cPicture)})
oC := TBColumnNew( cNaslov, &( '{|| Transform(' + cImePolja + ;
', "' + cPicture + '")}' ) )
clipper.361dusanp,
-> #327, nbatocanin=> CA-Clipper detects idle states (e.g. keyboard wait states)
=> during execution of compiled applications. When an idle
=> condition is detected, the system uses the slack time to
=> perform garbage collection, file updates, and
Postavlja se zanimljivo pitanje: neka sve i radi tako kako
pise, ali pretpostavljam da se cela magija odvija kada je cliper
u nekoj inkey(0) pauzi. E sad, ako ja koristim moju verziju inkeja,
koja se originalnom obraca samo preko inkey(), clipper prakticno
nece nikada detektovati idle time. Sta mislite o tome?
clipper.362bulaja,
-> #361, dusanp│E sad, ako ja koristim moju verziju inkeja, koja se originalnom obraca
│samo preko inkey(), clipper prakticno nece nikada detektovati idle time.
└───
Clipper ima svoj interni keyboard mehanizam, cije usluge samo koriste
zamene za Inkey() koje napises. Preko tog internog keyboard sistema
(koji ne mozes da promenis) su napravljene i stvari kao sto su SetKey(),
typeahead buffer, LastKey(), praznjenje database buffera i druge
funkcije viseg nivoa. Iz NanForum 2.1 source-a je moglo da se nauci
korisnih stvari o celom tom mehanizmu u Clipper-u 5.01 (npr. gde je
adrese keyboard buffera), nazalost on je promenjen u CA-Clipper 5.2,
a to jos nigde nije dokumentovano :).
clipper.363arazumenic,
-> #356, nbatocanin-> 1) U statusnoj liniji normalno ispisuješ brojeve Lin/Col, a kada
-> korisnik prešiša, ti mu ispišeš blink poruku "MALI, NE PRETERUJ" ;)
Moj jedini odogovor na može biti: LEPO SI ME NASMEJAO!
-> 2) Isto to, ali kad se brojač redova popne na nedozvoljen nivo
-> ignorišeš tekuću komandu i generišeš skok na poslednji regularan red.
Probaj. Videćeš da ne ide.
-> 3) Napraviš običan GET željenog broja stringova.
Definitivno otpada, jer se uneti sadržaj upisuje u datoteku.
clipper.364v.nesic,
Povodom rasprave vođene po pitanju kada kliper snima podatke, evo
još jednog priloga:
use proba
for i := 1 to 1000
append blank
next
go 1
commit
for i := 1 to 1000
replace proba->polje with str(i)
skip
next
alert("Resetuj me", " ! ")
Datoteka proba ima polje dužine 1024 znaka.
Rezultat: prvih 492 sloga su bili ažurirani, ostatak je bio prazan.
clipper.365d.petrovic,
-> #363, arazumenicĂ> -> 3) Napraviš običan GET željenog broja stringova.
Ă> Definitivno otpada, jer se uneti sadržaj upisuje u datoteku.
Kakve to veze ima ?
clipper.366d.petrovic,
-> #364, v.nesicĂ> Datoteka proba ima polje dužine 1024 znaka.
Ă> Rezultat: prvih 492 sloga su bili ažurirani, ostatak je bio
Ă> prazan.
Verovatno je malo memorije na računaru, inače nebi bilo ubačno NI 492
clipper.367neman,
-> #364, v.nesic> Povodom rasprave vodene po pitanju kada kliper snima
> podatke, evo jos jednog priloga:
Jos jedno pitanje se postavlja nakon svega ovog. U NG-u kaze da DBCOMMIT
treba raditi kada je slog zakljucan, a u slucaju da nije zakljucan mogu
da nastanu problemi. Kada se zatvara datoteka, Clipper vrsi njeno azuri-
ranje tj. snimanje. Ako prihvatimo tezu da DBCOMMIT() i CLOSE rade iste
stvari samo sto CLOSE i zatvara datoteku, nije mi jasno zasto ne mogu da
koristim DBCOMMIT() kad mi je volja. Ovu problematiku bi trebao da resava
operativni sistem, medjutim mislim da bi i Clipper to trebao da regulise.
Neko je pomenuo pojavu djubreta u datoteci; i kod mene se javilo na jednom
ili dva mesta ove godine. Mislim da je to posledica kolizije vise CLOSE
naredbi.
neman
clipper.368dejanr,
-> #325, cnenad>> Dejane da li mislis na DISCLIPPER ili bas DECLIPPER, jer skinuo sam
>> sa EUKLID-a DISCLIPPER ali program ne radi kako treba odnosno nisam
>> nista uspeo sa njim da uradim. A ako je u pitanju DECLIPPER onda
>> je to izgleda nesto novo i opasno ?
Iskreno rečeno, ne sećam se tačno. Video sam neki program tog tipa,
mislim da se zvao DECLIPPER. Pošto sam zaključio da se radi o stvari
koju je bolje "utamaniti", naprosto sam je obrisao. ZKrstić je nešto
testirao, mislim da je ustanovio da se korišćenjem nekih caka pri
linkovanju može malo zamutiti stvar, ali je to bio program od pre
par godina, možda su u međuvremenu napravili bolji...
clipper.369arazumenic,
-> #365, d.petrovic-> Ă> -> 3) Napraviš običan GET željenog broja stringova.
-> Ă> Definitivno otpada, jer se uneti sadržaj upisuje u datoteku.
->
-> Kakve to veze ima ?
A kako bi ti organizovao datoteku koja treba da sadrži neki tekst čija je
dužine promenljiva (od 0, pa do recimo 15 redova) nego preko memo polja?
Nećeš valjda da imaš 15 polja dužine 80 karaktera?
Saša
clipper.370dusanp,
-> #362, bulaja=> Clipper ima svoj interni keyboard mehanizam, cije usluge samo
=> koriste zamene za Inkey() koje napises.
Naravno. Ali pretpostavljam da je detektovanje neaktivnosti
uradjeno u stilu "ako se program nalazi u inkeyu>xx sec, uradi
commite i sve ostalo...". Posto se ja originalnom inkey servisu
obracam samo na kratko (inkey()), pretpostavljam da se onih xx
sec nikada ne dostigne.
Jeste da se baze napune sigurno pri close-u, ali me brine
mogucnost da je interni clipper mehanizam za detektovanje idle
time-a onemogucen.
clipper.371ndragan,
-> #330, nbatocanin/ rekli). Otkud TTS da zna *tačno* šta ti hoćeš? Možda baš hoćeš da
/ gubiš promenu u ovakvim situacijama?
Posle sam i ja razmislio - upravo mora biti tako, odnosno moram sam da
vozim računa o tome, a TTS mi samo obezbeđuje da se ne sudarim sa nekim.
clipper.372dr.grba,
-> #349, snemcev>> Da, ali samo za "obične" žiro račune. Koji kontrolni broj u ovom
>> računu (osim poslednjeg, koji je UVEK kontrolni broj)?
>>
>> 65500-840-215-62420
Ovo je broj nekog levog fonda, već ima četiri grupe i iz meni neznanih
razloga ne dira se.
>> >> Svima kojima treba MOJ žiro račun u smislu dodele novčanih
>> ...
>> A jel ima kontrolni broj? ;))
Od tebe primam samo kafu i hladno jagodinsko (;
clipper.373bulaja,
Stavljate li automatski SET DELETED ON na pocetak svih svojih programa?
Ako vam nije preko potrebno filtriranje obrisanih slogova, onda ipak od
sad stavljajte SET DELETED *OFF* :). Obican dbSkip() po celoj bazi ce
ovim raditi nekoliko puta brze (ja sam sad merio na nekoj bazi i dobio
ubrzanje 7.5 puta). Ovo stoga sto postavljanjem SET DELETED ON, Clipper
prakticno uradi jedan SET FILTER TO Deleted() za svaku bazu, sto naravno
usporava rad.
clipper.374bulaja,
-> #370, dusanp│Naravno. Ali pretpostavljam da je detektovanje neaktivnosti uradjeno
│u stilu "ako se program nalazi u inkeyu>xx sec, uradi commite i sve
│ostalo...".
└───
Neverujem. Verovatno je to uradjeno na najnizem (ili najvisem, zavisno
kako posmatrate:) nivou Clipper sistema. Ali pravu istinu mozda necemo
saznati dokle god neko ne nabavi onaj Clipper Technical Reference sto
ga CA reklamira :).
clipper.375snemcev,
-> #372, dr.grba>>>> 65500-840-215-62420
>>
>> Ovo je broj nekog levog fonda, već ima četiri grupe i iz meni
>> neznanih razloga ne dira se.
Eh, da je meni taj broj računa... Na njega u Kikindi ide onih 1% poreza
na finansijske transakcije.
clipper.376ndragan,
-> #369, arazumenic/ Nećeš valjda da imaš 15 polja dužine 80 karaktera?
Petnaest memorijskih promenljivih, koje onda trimuješ i slepiš, i onda
ubaciš u memo polje. Problem je što onda gubiš repovanje, a ne znaš ni
kad je bio pritisnut enter.
clipper.377cnenad,
-> #357, d.petrovicŁŁŁ Pa koliki su ti programi? ;)
400 Kb. exe ?
clipper.378cnenad,
-> #377, cnenadŁŁŁ 400 Kb. exe ? Sa incremental ON i bez opcije u kompajliranju /b !
clipper.379arazumenic,
-> #376, ndragan-> Petnaest memorijskih promenljivih, koje onda trimuješ i slepiš, i onda
-> ubaciš u memo polje. Problem je što onda gubiš repovanje, a ne znaš ni
-> kad je bio pritisnut enter.
Eto i sam vidiš da je neprimenljivo, jer se uneti tekst mora sačuvati.
Saša
clipper.380ndragan,
-> #373, bulaja/ sad stavljajte SET DELETED *OFF* :). Obican dbSkip() po celoj bazi
Evo rezultata iz FoksProa; mere su u sekundama i milisekundama.
set dele for !dele() set filter to !dele()
broj slogova off on off off
(čitanje baze u petlji scan/endscan)
7774 3,569 3,313 3,758 4,067
21768 10,180 9,397 10,530 11,152
(replace all brdok with "*", bez indeksa)
21768 31,068 27,032 27,854 28,274
(replace all brdok with "*", jedan strukturni indeks po datumu)
21768 29,149 25,996 27,102 26,668
Pre merenja, urađeno je Recall All, pa brisan svaki peti slog. Ploča SX
na 33, 2M, pola mega dato pisi kešu, Qemm 6. Disk Sigejt 1219A ili tako
nešto, 210MB. Veličina datotetke (sa 21768 slogova) 2,9MB.
Sve u svemu, u FoksProu se najviše isplati Set Deleted On, bez ručnog
petljanja sa funkcijom Deleted(), a razlike baš i nisu neke.
clipper.381bora,
-> #372, dr.grbaU vezi diskusije o žiro računima:
1. Kontrolni broj za broj partije (četvrti broj od 7 cifara) je
uveden u žiro račune tek u zadnje dve godine. Za takve račune sedma
cifra je kontrolni broj samo za prvih 6 cifara partije (nule su
vodeće). Stariji računi to nemaju i zato je uveden kontrolni broj za
ceo žiro račun na mestu namene (3 cifre ali se upisuje samo jedna
cifra).
2. Kontrolni broj za ceo žiro račun se uvodi SAMO za žiro račune
kod kojih račun (drugi broj od 3 cifre) počinje sa 6 (grupa 6) kao
što je najčešće xxxxx-601-zzz-xxxxxxx (zzz kod takvih ne postoji i
menja se sa kontrolnim brojem.
Bora
clipper.382snemcev,
-> #381, bora>> 1. Kontrolni broj za broj partije (četvrti broj od 7 cifara) je
Mešaš pojam cifre i broja. Uopšte mi nije jasno šta si hteo ovim da
kažeš. Znam da je poslednja cifra u broju individualne partije
kontrolna, ali na šta se odnosi "četvrti broj od 7 cifara" stvarno ne
mogu da dokučim.
>> 2. Kontrolni broj za ceo žiro račun se uvodi SAMO za žiro račune
>> kod kojih račun (drugi broj od 3 cifre) počinje sa 6 (grupa 6) kao
Koji je to drugi broj od tri cifre? Valjda misliš na drugu grupu cifara
u broju žiro računa tj. broj posle oznake filijale SPP.
clipper.383dr.grba,
-> #381, bora>> vodeće). Stariji računi to nemaju i zato je uveden kontrolni broj
>> za ceo žiro račun na mestu namene (3 cifre ali se upisuje samo
>> jedna cifra).
Mislim da je bilo reči o zameni, tj dodeli kontrolnog broja partije
tim starim žiro-računima. Da li je to tačno i da li je to sprovedeno?
clipper.384milanv,
Da bi se dobila dužina neke .DBF baze, verovatno je najlakši
način primeniti formulu: RECSIZE() * LASTREC() + HEADER() + 1. I
to je jasno i opšte-poznato. Međutim, nije mi jasno kako se može
'izmeriti' dužina .DBT fajla. Pretpostavljam da je rešenje
trivijalno, ali ja propisno olupah zid glavom, a problem stoji...
clipper.385bulaja,
-> #384, milanv│Da bi se dobila duzina neke .DBF baze, verovatno je najlaksi nacin
│primeniti formulu: RECSIZE() * LASTREC() + HEADER() + 1. I to je jasno
│i opste-poznato. Medutim, nije mi jasno kako se moze 'izmeriti' duzina
│.DBT fajla. Pretpostavljam da je resenje trivijalno, ali ja propisno
│olupah zid glavom, a problem stoji...
└───
Evo kako se dobija duzina bilo koje datoteke, poziva se npr. sa
bu_FileSize("Memo.DBT") (slobodno promenite ime funkciji:) i vraca
duzinu datoteke.
#include "Directry.ch"
**** ---------------------------------------- ****
FUNC bu_FileSize (cFileName)
LOCAL aDir, nSize
aDir := Directory (cFileName)
IF Len (aDir) != 1
// file not found
nSize := 0
ELSE
nSize := aDir[ 1, F_SIZE]
ENDIF
RETURN (nSize)
clipper.386mcgoran,
- Povodom Dejanove poruke u PC.PROG.2 u vezi lastrec()
> Da li ste vec culi da... Clipper funkcija LASTREC() vraca 1 ako
> u bazi ima nula slogova. Takode vraca 1 ako u bazi ima jedan
> slog.
Ovo mi je malo cudno jer ja "if lastrec() == 0" koristim bez
problema u detekciji da li je .dbf prazna.
Napisah stoga, provere radi, sledeci test program u
Clipperu 5.01 (Nantucked) :
------
proc main()
dbCreate( 'test', {{'a','C',1,0},{'b','C',2,0}} )
use test new
? test->(lastrec())
------
i rezultat rada programa je 0 (nula).
Dejane Vor hepn ?!
clipper.387ematic,
-> #385, bulaja> Evo kako se dobija duzina bilo koje datoteke, poziva se npr. sa
Postoji i drugi način, mada se meni lično više sviđa ovaj bulajin :)
#include "fileio.ch"
function filesize(fname)
local handle := fopen(fname), size
if handle != -1
size := fseek(handle, 0, FS_END)
else
size := 0
// Greška..
endif
fclose(handle)
return size
clipper.388d.petrovic,
-> #377, cnenadĂ> ŁŁŁ Pa koliki su ti programi? ;)
Ă>
Ă> 400 Kb. exe ?
Zar nije zdravije da kod tolikog programa ode 150 K u overleje
(rtlink i blinnker prilično lepo rade sa overlejima) i ta memorija
ostane za baze ??
clipper.389domana,
Da li neko zna da je napravljen btrieve record manager za clipper 5.2. Odgovori
na licnu postu, molim :)
Miki
clipper.390bulaja,
**** new file ****
R:\IBMPC\CLIPPER\*.*
----------------------
vern_six zip 5775 Spisak funkcija u Vern Six's Clipper 5.x biblioteci
vs_904 a01 184617 Vern Six's Clipper ToolBox v9.04 biblioteka #1
vs_904 a02 184469 Vern Six's Clipper ToolBox v9.04 biblioteka #2
vs_904 a03 181470 Vern Six's Clipper ToolBox v9.04 biblioteka #3
clipper.391cnenad,
-> #388, d.petrovicŁŁŁ Ă> 400 Kb. exe ? Sa Blinkerom 2.0. INCREMENTAL ON !
ŁŁŁ
ŁŁŁ Zar nije zdravije da kod tolikog programa ode 150 K u
ŁŁŁ overleje (rtlink i blinnker prilicno lepo rade sa overlejima)
ŁŁŁ i ta memorija ostane za baze ??
Ovo sam cekao. Mislim da je vreme da se uhvatim u kostac i sa tim
problemom. Moze li kratak kurs kako to izvesti ?
clipper.392ndragan,
-> #379, arazumenic/ Eto i sam vidiš da je neprimenljivo, jer se uneti tekst mora sačuvati.
Sačuvao bi se kad ga prebaciš u memo polje, nego kažem da se ne bi znalo
da li je pritisnut enter za kraj reda ili nije, tj. da li da taj cr
ubacuješ u memo ili ne, da li je trebalo poslednju reč iz jednog stringa
prebaciti u sledeći red i eventualno spojiti (ili je čovek ubacio
crticu)...
I obratno, za ispravke bi morao da ga pustiš u memoedit ili da vadiš oči
kako ćeš memo polje da isečeš na pet stringova, i opet da spajaš i
vraćaš nazad.
Sve skupa, zašto ne središ stvar jednom valid funkcijom - da izbroji
redove u memo polju, i da kaže "tekst je duži od 5 redova - skrati
malo", i da ga vrati u memoedit.
clipper.393ndragan,
-> #387, ematic/ Postoji i drugi način, mada se meni lično više sviđa ovaj bulajin :)
Bulajino brže radi, jer čita samo direktorij, a ovo sa niskim udarcima
(low level file functions) mora da ga nađe u direktoriju, otvori, i
zatvori. To traje.
Verzija za foks:
func fsize func fsize
para fname para fname
priv fridrih, duz priv n,d
fridrih=fopen(fname) n=adir(d,fname)
if fridrih>0 if n=1
duz=fseek(fridrih,0,2) retu d(1,2)
else else
duz=0 retu 0
endif endif
=fclose(fridrih)
retu duz
I meni se lepše sviđa desna verzija. Lako se prepravlja da vraća i
vreme, datum i/ili atribute fajla.
clipper.395dr.grba,
-> #393, ndragan>> =fclose(fridrih)
....
>> I meni se lepše sviđa desna verzija....
I meni, e zbog onog Fridriha (;
clipper.394dr.grba,
-> #391, cnenad>> Ovo sam cekao. Mislim da je vreme da se uhvatim u kostac i sa tim
>> problemom. Moze li kratak kurs kako to izvesti ?
Evo šablona za Blinker (sa # se označavaju komentari):
# Blinker 2.0 Sample Link file for Clipper 5.01
#
# For final links - UN-COMMENT the following command:
# BLINKER INCREMENTAL OFF
#
BLINKER EXECUTABLE CLIPPER F25;SWAPPATHK:ĐSWP;
#
OUTPUT <EXE filename>
#
FILE <MAIN Clipper routine>
#
# E, ovde počinje spisak modula u overlejima:
BEGINAREA
FILE <next Clipper file>
FILE <next Clipper file>
#
# UNCOMMENT and list your own Clipper code libraries here
# LIBRARY <my library>
# LIBRARY <my other library>
#
# UNCOMMENT and list your overlayable 3rd party libraries here
# LIBRARY <3rd party>
# LIBRARY <3rd party>
ENDAREA
#
# Sad spisak modula koji ne idu u overleje, po želji ili po potrebi
# (asembler i C moduli MORAJU "dole")
#
# Uncomment and list your 3rd party non overlayable object modules here
# FILE <3rd party1>,<3rd party2>
#
# UNCOMMENT and list 3rd party non-overlayable libraries here:
#
# LIB nanfor
# LIB expand
# ...
# FILE CLD.LIB
#
# Ovde ide navod .LNK fajla koji leži u lib direktorijumu, a koji dodatno
# kontroliše gde će koji modul iz osnovnih Clipper biblioteka
#
# Call the distribution script to overlay EXTEND.LIB ( MIN / MID / MAX )
čCL501MIN.LNK
#
# Microsoft LLIBCA C library comes last if needed
# LIB LLIBCA
Sa RTLINK programom slično. u xxx.lnk fajlu ide:
fi glavni
fi prateci_1
...
fi prateci_n
fi help
beginarea
fi overlay_1
fi overlay_2
...
fi overlay_n
endarea
lib expand, nanfor
;
Naravno, radi komplikacije sve ovo može i u pletenicu da se zamota, ali
za potrebe programiranja 99% je povoljno upotrebiti ovakav šablon.
A šta ide dole, šta gore? Pa, formalno, dole ide samo main() struktura i
asembler/C rutine, a da sve ostalo može u overleje. Sad, pitanje je koliko
valjane perfomanse taj princip daje. Stoga često pozivane procedure valja
potrpati u donji deo. Tipičan primer procedure koja treba da je u donjem
delu je user defined help, koji zbog visoke frekvencije poziva daje bolje
perfomanse ako je uvek u memoriji... Ovde, dakako, sledi mnogo duža i
ozbiljnija priča....
clipper.396jpiri,
Verovatno su se mnogi od vas (poput mene) svojevremeno slatko smejali
citajuci poruke koje su bile ugradjene u Apple-ov C kompajler (VICEVI 6.51).
Da vas podsetim, poruke su bile u stilu:
"type in (cast) must be scalar; ANSI 3.3.4; page 39,
lines 10-11 (I know you don't care, I'm just trying to annoy you)"
ili:
"Too many errors on one line (make fewer)"
Nemojte misliti da su ovakve duhovitosti rezervisane samo za Apple-ove pro-
gramere! Elem, ako pokrenete Clipper kompajler sa malo slobodnog RAM-a
(npr. Brief vam je ostao rezidentan), Clipper ce odbiti prevodjenje uz
odgovarajucu poruku ('Not enough memory'). Medjutim, ako ostavite rezidentan
npr. Telix (sto se meni sticajem okolnosti dogodilo) Clipper ce krenuti da
prevodi a onda ce se kada u programu naidje na PROCEDURE ili FUNCTION za koje,
gle cuda, odjedared nema dovoljno RAM-a, potpuno slogirati, prekinuti
prevodjenje i izbaciti vrlo promucurnu i nadasve informativnu poruku:
"FATAL C3050: Something terrible has happened!"
Ponukan ovom porukom (i zeljan dobre zabave) procesljah CLIPPER.EXE
i nadjoh jos par lepih porukica:
- "Push a WHAT?"
- "END wreaks terrible vengeance on control stack!"
- "Unresolved DO target symbol kills parse tree!"
- "Control level closure leaves gaping wound in control stack!"
- "Ford Maverick error number" (?)
U novoj verziji Clipper-a ocekujem da suvoparnu i neinventivnu
poruku "File not found" zamene sa npr. mnogo poeticnijom:
"Something's rotten in the state of Denmark!"
Em je nadahnutije, em covek o'ma' zna gde skripi.
clipper.397gari,
-> #390, bulajaOvo mi na prvi i drugi pogled izgleda super!
A ako hocete da jos vise ugodite korisnicima sezam-a
onda bi mogli (pored verzije 9.05 koja je izasla u maju)
da dignete i sledecu stvar:
DBC.ZIP 168281 03-08-92 Data Base Communications- This
program will
| link up to another computer using
this same
| program via modem & establish
communications
| to transfer records from one
database to
| another. This program is totally
generic in
| that it will work with any database
| structure. Transmitted records go
directly
| into the receiving database after
being
| verified. Error correction is
implemented. By
| Vern Six.
pozdrav, Gari.
p.s. Narode glasajte za ovo !!!
clipper.398cnenad,
-> #394, dr.grbaŁŁŁ Evo sablona za Blinker (sa # se oznacavaju komentari):
Grbo, stvarno si DR. ! :))) Bas sam razmisljao sa cime cu da se zezam narednih
dana kad eto meni domaceg zadatka. TNX
clipper.399dr.grba,
-> #397, gari>> p.s. Narode glasajte za ovo !!!
Glasam za tvoje remek delo preloma teksta (:
clipper.402nbatocanin,
-> #363, arazumenic> -> 1) U statusnoj liniji normalno ispisuješ brojeve
> Lin/Col, a kada -> korisnik prešiša, ti mu ispišeš blink
> poruku "MALI, NE PRETERUJ" ;)
>
> Moj jedini odogovor na može biti: LEPO SI ME NASMEJAO!
Dobro, ne mora baš ova poruka ;) Može i: "TO ŠTO PIŠEŠ OKAžI MAžKU O
REP" ;)
> -> 2) Isto to, ali kad se brojač redova popne na
> nedozvoljen nivo -> ignorišeš tekuću komandu i generišeš
> skok na poslednji regularan red.
>
> Probaj. Videćeš da ne ide.
Nemam vremena, ali mi se i dalje čini da može.
> -> 3) Napraviš običan GET željenog broja stringova.
>
> Definitivno otpada, jer se uneti sadržaj upisuje u
> datoteku.
Kakve to veze ima?
clipper.401nbatocanin,
-> #370, dusanp> Jeste da se baze napune sigurno pri close-u,
> ali me brine mogucnost da je interni clipper mehanizam za
> detektovanje idle time-a onemogucen.
Može da bude. Treba isprobati.
clipper.400nbatocanin,
-> #358, .bale.> A šta je sa dvofaznim COMMIT-om? Kad već Clipper to sam ne
> radi (ili radi?), možeš to da ubaciš u svaku aplikaciju.
> Pa onda rollback itd, ispade aplikacija od 1000 linija
> velika 4MB ;-) Naravno, isključi se cache diska, osim,
> eventualno, ako je ugrađen u OS, a znamo da nije :)
Nisam te baš najpreciznije razumeo. Ako misliš da je COMMIT naredba
za kontrolisan upis izmena na disk, varaš se (na žalost). Ako hoćeš
da kažeš da je potrebna neka nadgradnja/poboljšanje originalnog
Clipper-ovog sistema za pristup bazi podataka, slažem se.
clipper.403stosic,
Mozda je bilo...
PERFORMANSE
-----------
Funkcija AEVAL() bi trebalo da brze obradjuje nizove od FOR petlje.
Nije uvek najcitljivije, ali ako je brze...
Koliko?
Za zainteresovane tu je i test primer.
test.zipclipper.404dr.grba,
-> #400, nbatocanin>> da kažeš da je potrebna neka nadgradnja/poboljšanje originalnog
>> Clipper-ovog sistema za pristup bazi podataka, slažem se.
Nešto mi govori danam je ovde potreban neki C guru...
clipper.405snemcev,
-> #403, stosic>> Funkcija AEVAL() bi trebalo da brze obradjuje nizove od FOR petlje.
>> Koliko?
>> Za zainteresovane tu je i test primer.
Mislim da bi poruka bila mnogo konstruktivnija da si tu naveo rezultate
merenja umesto programa, pa ko voli nek izvoli.
Btw, drastičNo ubrzanje se postiže i u petljama tipa:
FOR i=1 TO Len(aNiz)
Obrada(aNiz[i])
NEXT
Mnogo brže radi:
nTo := Len(aNiz)
FOR i=1 TO nTo
Obrada(aNiz[i])
NEXT
clipper.406stosic,
-> #405, snemcev
>>Mislim da bi poruka bila mnogo konstruktivnija da si tu naveo rezultate
>>merenja umesto programa, pa ko voli nek izvoli.
Mislim da bi mnogo konstruktivnije bilo da si skinuo program i onda
se javio.
Za manje zainteresovane:
Funkcija AEVAL() (po Rick Spence-u i nbatocanin-u) brze obradjuje nizove
od FOR petlje. Kod je manje citljiv, ali valjda bar toliko brzi da se
isplati njegova upotreba (niko ne kaze koliko brzi).
U ovom primeru AEVAL() je SPORIJI od FOR petlje (0.38;0,33 sec - kod mene).
>>Btw, drasticNo ubrzanje se postize i u petljama tipa:
Btw, gde su tvoji rezultati merenja?