PCPROG.3

26 Jul 1993 - 22 Apr 1994

Messages - clipper

clipper.306 nbatocanin, -> #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.307 nbatocanin, -> #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.308 bipin,
Kako u *.pll-u zameniti f-ju BiloKoju() za novu verziju iste. Za biblioteku je <<< TLIB proba -+ BiloKoju >>> a za PLL?
clipper.310 neman, -> #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.309 neman, -> #304, mickeyl
> Pozdrav i ne ljuti se. Nema problema, ja to samo onako ;)
clipper.311 toma, -> #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.312 v.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.313 snemcev,
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.314 ndragan, -> #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.315 ndragan, -> #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.316 mcgoran, -> #313, snemcev
#define trt(a,b,c) trt(a,x,b,c)
clipper.317 bulaja, -> #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.318 snemcev, -> #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.319 toma,
■> 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.320 mcgoran, -> #318, snemcev
#abrakadabra TRT MILOJKA => MILOJKA TRT ;( Copyright (C) NoSense Soft Systems., All Rights Reserved
clipper.321 mickeyl, -> #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.323 v.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.322 v.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.324 ndragan, -> #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.325 cnenad, -> #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.326 toma, -> #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.327 nbatocanin, -> #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.328 nbatocanin, -> #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.329 nbatocanin, -> #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.331 nbatocanin, -> #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.332 nbatocanin, -> #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.330 nbatocanin, -> #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.333 dr.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.335 snemcev, -> #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.336 cnenad, -> #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.337 arazumenic,
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.338 toma, -> #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.339 majkl, -> #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.340 dr.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.341 cnenad, -> #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.343 arazumenic, -> #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.345 dr.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.344 dr.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.zip
clipper.346 cnenad, -> #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.347 bipin, -> #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.348 d.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.349 snemcev, -> #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.350 snemcev, -> #347, bipin
>> U pitanju su objekti onog Slovaka. Bači bre to! Jes' da je interesantno, al' je sporo do zla boga.
clipper.351 mandrejevic,
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.352 cnenad, -> #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.353 oldtimer,
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.356 nbatocanin, -> #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.355 nbatocanin, -> #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.354 nbatocanin, -> #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.357 d.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.359 snemcev, -> #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.360 v.nesic, -> #351, mandrejevic
> Kako da napravim PICTURE za TBCOLUMN? > ... > oC := TBColumnNew(cNaslov, {|| Transform(cImePolja, cPicture)}) oC := TBColumnNew( cNaslov, &( '{|| Transform(' + cImePolja + ; ', "' + cPicture + '")}' ) )
clipper.361 dusanp, -> #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.362 bulaja, -> #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.363 arazumenic, -> #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.364 v.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.365 d.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.366 d.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.367 neman, -> #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.368 dejanr, -> #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.369 arazumenic, -> #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.370 dusanp, -> #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.371 ndragan, -> #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.372 dr.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.373 bulaja,
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.374 bulaja, -> #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.375 snemcev, -> #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.376 ndragan, -> #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.377 cnenad, -> #357, d.petrovic
ŁŁŁ Pa koliki su ti programi? ;) 400 Kb. exe ?
clipper.378 cnenad, -> #377, cnenad
ŁŁŁ 400 Kb. exe ? Sa incremental ON i bez opcije u kompajliranju /b !
clipper.379 arazumenic, -> #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.380 ndragan, -> #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.381 bora, -> #372, dr.grba
U 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.382 snemcev, -> #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.383 dr.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.384 milanv,
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.385 bulaja, -> #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.386 mcgoran,
- 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.387 ematic, -> #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.388 d.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.389 domana,
Da li neko zna da je napravljen btrieve record manager za clipper 5.2. Odgovori na licnu postu, molim :) Miki
clipper.390 bulaja,
**** 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.391 cnenad, -> #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.392 ndragan, -> #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.393 ndragan, -> #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.395 dr.grba, -> #393, ndragan
>> =fclose(fridrih) .... >> I meni se lepše sviđa desna verzija.... I meni, e zbog onog Fridriha (;
clipper.394 dr.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.396 jpiri,
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.397 gari, -> #390, bulaja
Ovo 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.398 cnenad, -> #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.399 dr.grba, -> #397, gari
>> p.s. Narode glasajte za ovo !!! Glasam za tvoje remek delo preloma teksta (:
clipper.402 nbatocanin, -> #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.401 nbatocanin, -> #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.400 nbatocanin, -> #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.403 stosic,
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.zip
clipper.404 dr.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.405 snemcev, -> #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.406 stosic, -> #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?