PCPROG.4

22 Apr 1994 - 05 Jan 1995

Topics

  1. algoritmi (153)
  2. comment (15)
  3. ms.dos (123)
  4. windows (304)
  5. asembler (103)
  6. basic (80)
  7. jezici (196)
  8. pascal (880)
  9. cccc (586)
  10. cpp (157)
  11. clipper (1267)
  12. baze.podataka (525)
  13. razno (529)

Messages - clipper

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