clipper.1ppekovic,
Clipper je napravio veliki korak ka jednostavnijem pisanju programa čia je
žiža u bazama podataka, s druge strane doneo je i gomilu pitanja, nedoumica,
bug-ova, nedokumentovanih mogućnosti itd. itd. Ovo je mesto za diskusiju o
svemu tome.
Paya
clipper.2duduk,
Ima li neko, ili zna li bar gde je opisan format Clipper-ovog NTX ?
ia
clipper.3ppekovic,
>>Ima li neko, ili zna li bar gde je opisan format Clipper-ovog NTX ?
Nisam siguran, ali zar onaj C source u jednom od dir-ova, ne radi i sa
NTX-ovima??? Koliko se sećam, trebao bi da radi.
Paya
clipper.4nradeta,
Ima li neko rutinu za ispisianje broja slovima (za racune)
1903 slovima : hiljadu devesto tri dinara
hvala !
nradeta
clipper.5ndragan,
Ovim se rutina SLOVIMA.PRG izrađena u DP "Mihajlo Petrović Alas" iz
Zrenjanina, 023-60-020, proglašava za PD (direktor je sedeo pored mene dok
smo čitali SOR) - spomenite nas negde u dokumentaciji ako je ubacite u nešto
svoje.
Rutina ima i nešto istorije: pre dve godine na Sajmu u Bg dođe neki čiča na
naš štand da nam ponudi takvu rutinu, dve hiljade linija kobola, njegov
tromesečni rad. Naš čovek koji je dežurao nije ga baš najbolje razumeo, i
rekao mu da naša rutina ima skoro dve strane teksta i da smo je radili skoro
dva dana... posle nam bilo žao čoveka.
Bue_ NDragan
slovima.zipclipper.6ivantod,
Evo, pokušaj sa ovim programom. On će na osnovu broja da ti da slovni oblik.
U stvari je pisan za dBASE pa možda neće baš iz prve da proradi na Clipperu,
ali nekih većih problema ne bi trebalo biti. Uputstva su u programu.
broj.prgclipper.7dejanr,
Hvala ndragan-u i ivantod! Pravi prilozi za Sezam. Biće i u "Bajtovima
lične prirode".
clipper.8dejanr,
Program se kod mene nije hteo kompajlirati na clipper 87. Ispravio sam par
sitnica i dodao pred-program za testiranje i još preveo na standard
"Računari"... I evo ga!
slovima.prgclipper.9ndragan,
* Program se kod mene nije hteo kompajlirati na clipper 87. Ispravio sam par
kao što je poznato - mi ložimo foks. btw, moja je samo seckalica za
izdvajanje para ('xx/100'), ostalo su napisali drugari pre par godina.
Bue_ NDragan
clipper.10ppekovic,
Jedan mali bug debuger-a u clipper-u 5.01. Recimo da hoćete da debugirate
program koji se nalazi u prog dir-u. A neka se sve baze nalaze u prog/files
dir-u. E sad vi lepo uđete u prog dir i kažete CLD program i sve lepo počne,
međutim, pošto se baze nalaze u files dir-u, u programu imam komandu !cd files.
Posle te komande, na ekranu će se izgubiti source iako će i dalje sve raditi
kako treba. Naravno, štos je verovatno što je dir promenjen pa debuger nbemože
da pronađe source.
Zato, kada debugirate (isleđujete ;) ) program koji se šete po dir-ovima,
obavezno stavite punu stazu do programa, npr.:
CLD d:\prog\program
Paya
clipper.11vkrstonosic,
Kad smo vec kod Debuger-a za Cliper 5.01, da li neko zna, da li
postoji neko ogranicenje oko duzine source fajla. Probam program koji
je podeljen u pet delova i svi rade osim jednog koji je dugacak oko
80K.
clipper.12vcalic,
Kad se već pominje Clipper i debuggiranje, da li je moguće kod
Clippera raditi "isleđivanje" ;) na source nivou uz pomoć, recimo, Turbo
Debugger-a, kao što je to moguće sa Force-om ???
WR
clipper.13ppekovic,
>> Kad se već pominje Clipper i debuggiranje, da li je moguće kod
>>Clippera raditi "isleđivanje" ;) na source nivou uz pomoć, recimo, Turbo
>>Debugger-a, kao što je to moguće sa Force-om ???
A što, kad je Clipper debuger odličan? Nisam probao.
Paya
clipper.14lazo,
Koristim Clipper Summer 87 i nisam pojma imao da su izlazile još neke
verzije kao naprimjer 5.01 koja se tako često spominje ovdje na Seza-
mu. Interesuje me u čemu su poboljšanja. Meni su za pravljenje uglav-
nom knjigovodstvenih aplikacija dovoljne i ove naredbe, međutim jedina
zamjerka je zasad u tome što pri obradi velikih datoteka pri filteru
se dugo čeka da se ode recimo na prvi slog u filteru ili ako je dato-
teka prazna (pri filteru) on prođe kroz cijelu datoteku da bi nakraju
ustanovio da nema podataka.
Mene u stvari interesuje da li taj Clipper 5.01 brže pristupa datote-
ci tj, podacima u njoj ili su poboljšanja samo u naredbama kao što su
npr. DBEDIT,MENU i sl.
clipper.15ppekovic,
>>Mene u stvari interesuje da li taj Clipper 5.01 brže pristupa datote-
>>ci tj, podacima u njoj ili su poboljšanja samo u naredbama kao što su
>>npr. DBEDIT,MENU i sl.
Pa i ja sam se ponadao da će novi clipper doneti poboljšanja na tom planu,
pogotovu da će ispraviti veliku sporost sa filterom (kako si i sam pomenuo).
Ali, na žalost, on i dalje sporo radi, iako malo drugačije nego '87 verzija.
Naime, prilikom startovanja dbedit-a čeka se mnogo više nego na staroj verziji,
ali je onda kretanje kroz bazu brže. Naravno, sve ovo u slučaju kada je
uključen filter i kada je baza velika (recimo 10'000 slogova). Probao sam na
prvom slogu po filteru da stisnem strelicu na gore i sve je jako brzo radilo.
Taman sam se bio obradovao kad ono kada sam otišao na dno baze i pritisnuo
strelicu na dole, to je radilo, radilo, radilo i radilo užas, pravi užas.
Inače, što se tiče poboljšanja u clipper-u 5.01 kratlko da ti kažem da je
novi clipper sada mnogo bliži načinu razmišljanja u C-u, iako je skoro 100%
kompatibilan sa '87. verzijom, tj. možeš da koristiš nove mogućnosti, ali i ne
moraš. Da ne tupim više, pogledaj članak N. Batoćanina u "Računarima". Ima puno
toga novog i zanimljivog.
Paya
.s
clipper.17beki,
Zdravo svima u PC.PROG. Ja sam nov na Sezamu i nadam se da cemo se lepo
druziti.
Hteo sam da pitam dali ima neko da je eksperimentisao sa bibliotekom
DBFNTX.LIB iz Clipper-a 5 ? Imam ideju da se umesto Clipper-ovog sporog i
nepouzdanog dbf/ntx interfejsa stavi nesto bolje, kao na primer Btrieve
koji lepo prianja na Novell NetWare.
Jos nesto. Dali neko ima iskustva sa CL Tools 3.0 i CL Text 3.0 firme
Dr.Huggle&Partner? Ja sam nabavio CL Report 3.0 i veoma sam zadovoljan.
Beki
clipper.18beki,
Upomoc !!!
Kako da uradim parcijalni index u Clipper-u 5 ?
Naime, potrebno mi je nesto sto Fox vec odavno ima:
INDEX ON <cexp> FOR <lexp> TO <ntxfile>
Dosla mi je ideja o jednom mogucem resenju:
INDEX ON <cexp1> TO <ntxfile> UNIQUE
gde je:
cexp1=IIF(lexp,cexp,"NEKI KLJUC")
Na ovaj nacin cu postici to da svi slogovi koji ne treba da udju u index dobiju
vrednost kljuca "NEKI KLJUC", sto ce u Clipper5-ovom NTX fajlu rezultirati u
samo jednom slogu u indexnom fajlu. Medjutim, resenje ne odgovara kada <cexp>
ne daje UNIQUE kljuceve, sto je najcesci slucaj kod indexa za razne izvestaje.
Beki.
clipper.19ndragan,
* Upomoc !!!
* Kako da uradim parcijalni index u Clipper-u 5 ?
pređi na foks c(;)E (ovo sam ja sa šeširom i bradom)
* cexp1=IIF(lexp,cexp,"NEKI KLJUC")
a šta misliš o cexp1=IIF(lexp,cexp+str(recno(),5),"NEKI KLJUC"); dobio bi
istina jedan slog indeksiran sa 'neki kljutz', ali ostale bi dobio, a taj
jedan nek sadrži chr(255) pa znaš kad si gotov, a?
Bue_ NDragan
clipper.20ppekovic,
Ovo pitanje je mnogo puta pokretano, ali nikada nisam
video celovit odgovor. Radi se o velikim bazama i selekcijama
(prostim ili višestrukim, svejedno).
U čemu je problem?
Ako imam bazu od 10.000 slogova, pa čak i više, što
uopšte nije redak slučaj, i želim da izvšim selekciju svih
onih čije ime počinje na slova od A do C, i koji su rođeni od
1960-1970 (samo primer, može bilo šta), na koji način to
uradii a da bude brzo.
Naime, upotreba komande SET FILTER definitivno otpada.
Zašto? pa, na bazi od 10.000 slogova sa bilo kakvim filterom,
običan SKIP na zadnjem slogu po filteru radi xxx sekundi, tj.
previše sporo.
Postoji rešenje korišćenja index-a po polju ke se
traži, ali onda otpada upotreba dbedit funkcije, tj. morao bi
da se pravi sopstveni dbedit.
Podela na više baza je problematična, tj. kako baze
podeliti.
Dakle, kakva su iskustva? Jel ima neko ideja???
Paya
clipper.21djorzor,
> Podela na više baza je problematična, tj. kako baze
> podeliti.
>
> Dakle, kakva su iskustva? Jel ima neko ideja???
Evo nešto malo iskustva na sličnu temu. Kolega zelkop i ja smo komercijalno
radili na sličnim bazama (živeli smo jedno godinu dana od toga). Baze su
imale oko 15000 slogova i oko 2 MB. Iz takvih baza smo radili izveštaje.
Baza je trebala da radi u jednoj prijateljskoj zemlji, ali za potrebe
naše firme. Jedina mašina koju su naši uspeli da uvezu je bio jedan PS/2-50
(u prevodu AT 286/12 bez koprocesora), koji je imao HDD od 20MB. Na takvoj
mašini smo razvili dosta lepu aplikaciju, koja se i danas koristi.
Korišćen je dBASE IV i na kraju, posle jedno 6 meseci razvoja, najsporiji
deo sistema je bilo štampanje, koje je u nekim slučajevima trajalo i
više od 2 sata za izveštaj od više stotina strana. Sama priprema izveštaja
je trajala najviše oko 20 minuta.
U varijantama kada bi nam trebalo da koristimo EDIT i BROWSE naredbe
to bi rešavali tako što bi bazu kopirali sa DOS copy naredbom, ulazili
u tako kopiranu bazu, brisali naredbom DELETE nepotrebne slogove i
na kraju pakovali. Sve to je radilo vrlo brzo. Posle toga u takvu bazu
uđemo sa EDIT i sve radi.
Fazon sa kopiranjem smo koristili i za pripremanje izveštaja i bili
smo vrlo zadovoljni.
Kao mala napomena može da ide i da smo probali da koristimo SQL iz
dBase-a i bili smo užasnuti sporošću.
Ako Te još nešto interesuje, biće nam zadovoljstvo da Ti to prikažemo.
Pozdrav, Zoran
clipper.22vkrstonosic,
> U varijantama kada bi nam trebalo da koristimo EDIT i BROWSE naredbe
> to bi resavali tako sto bi bazu kopirali sa DOS copy naredbom,
> ulazili u tako kopiranu bazu, brisali naredbom DELETE nepotrebne
> slogove i na kraju pakovali. Sve to je radilo vrlo brzo. Posle toga
> u takvu bazu udemo sa EDIT i sve radi.
Mozda bi se ovo moglo izvesti i bez copiranja baze, jer to ipak
zahteva mesta na disku za bar jos jednu bazu. Obrisati sa delete one
koji nisu potrebni, naravno bez pack, pa onda vratiti status na
undelete kasnije. Problem je jedino koliko dugo radi naredba delete
for <uslov> u jednoj bazi od oko 5M.
Zanima me sta bi se moglo postici razbijanjem baze na vise baza,
sa uvodjenjem nekih internih pokazivaca i slicno ???
Ja imam problem sa bazom od 4M sa oko 20.000 slogova, koja je
naravno nestrucno napravljena, odnosno, formirao neko dbu-om bazu sa
10 polja i posle punio neko ko zna jos manje.
Da li neko zna kako da resi problem skip-a na poslednjem slogu po
filteru ?
clipper.23vkrstonosic,
Kad smo vec kod Clippera, dbf-a i ntx-a, u Clipperu 5.01 je
odvojena biblioteka DBFNTX.LIB u kojoj je drajver za rad sa bazama.
Postoji i funkcija koja iscitava koji se drajver trenutno koristi, ili
postavlja neki drugi. Kakve su sanse da se tu uradi nesto pametno,
odnosno, preradi postojeci, napravi ili nabavi neki drugi drajver ???
clipper.24beki,
> Postoji resenje koriscenja index-a po polju ke se
> trazi, ali onda otpada upotreba dbedit funkcije, tj. morao bi
> da se pravi sopstveni dbedit.
Ne moras praviti sopstveni dbedit. Predji na Clipper 5, tamo imas ***ODLICNI***
browse sistem. Ukoliko postoji interes, poslacu ovde jedan program koji koris-
ti TBROWSE class Clippera 5 i koji je prilicno univerzalan.
Naime, Clipper 5-ov TBROWSE omogucava:
-sve ono sto omogucava dbedit
-umetanje sopstvenih funkcija SKIP, GO TOP i GO BOTTOM
-i jos mnogo toga...
Pozdrav, Beki
clipper.25beki,
> zahteva mesta na disku za bar jos jednu bazu. Obrisati sa delete one
> koji nisu potrebni, naravno bez pack, pa onda vratiti status na
> undelete kasnije. Problem je jedino koliko dugo radi naredba delete
Ovde imas dva problema u jednom.
Sta ako u bazi vec postoje zapisi DELETED ?
Zatim, koliko je brz skip u bazi u kojoj je recimo 90% slogova izbrisan ?
Moje je misljenje da bi se dobio isti rezultat (ako ne isti, onda istog reda
velicine).
> Da li neko zna kako da resi problem skip-a na poslednjem slogu po
> filteru ?
Koristi Clipper 5-ov tbrowse sistem.
Pozdrav, Beki
clipper.26beki,
> Kad smo vec kod Clippera, dbf-a i ntx-a, u Clipperu 5.01 je
> odvojena biblioteka DBFNTX.LIB u kojoj je drajver za rad sa bazama.
> Postoji i funkcija koja iscitava koji se drajver trenutno koristi, ili
> postavlja neki drugi. Kakve su sanse da se tu uradi nesto pametno,
> odnosno, preradi postojeci, napravi ili nabavi neki drugi drajver ???
Isto pitanje !!!!! Pitao sam po mnogim BBS-ovima i nigde nista...
Beki
clipper.27djorzor,
> Mozda bi se ovo moglo izvesti i bez copiranja baze, jer to
> ipak zahteva mesta na disku za bar jos jednu bazu.
> Obrisati sa delete one koji nisu potrebni, naravno bez
> pack, pa onda vratiti status na undelete kasnije. Problem
> je jedino koliko dugo radi naredba delete for <uslov> u
> jednoj bazi od oko 5M.
Ako Ti treba EDIT, brisanje bez pakovanja ne ubrzava stvar. Velika
je verovatnoća da će biti isto tako sporo kao kod SET FILTER. Uz to,
koliko se sećam, SET DELETED OFF/ON ne isključuje obrisane slogove
kod EDIT komande.
Brzina rada za DELETE for <uslov> zavisi od <uslov>, ali neko moje
iskustvo je da je to jedna od bržih varijanti.
Što se tiče mesta na disku, rad sa bazom od 5M u principu je
preporučljiv samo sa dosta mesta na disku.
>
> Zanima me sta bi se moglo postici razbijanjem baze na vise
> baza, sa uvodjenjem nekih internih pokazivaca i slicno ???
Nisam siguran, ali to može da koristi pre svega ako već imaš ideju
kakvi će da budu zahtevi za izveštaje. Na primer, ako Ti vrlo
često trebaju korisnici čije ime počinje nekim slovom, onda ima
svrhe razbiti bazu u 30 podbaza u kojima će se nalaziti podaci
za korisnike kojima ime počinje sa A, B ... Ako takvih zahteva
nema mnogo, nego su uslovi dosta složeniji, mislim da to neće
mnogo pomoći.
Kao međuvarijanta, ako se update base ne radi mnogo često, možda bi
bilo pametno da izvršiš kopiranje baze tako da su slogovi složeni po
azbučnom redu korisnika. Ne znam tačno kako se komanda zove, mislim
da se može naći u HELP-u.
>
> Ja imam problem sa bazom od 4M sa oko 20.000 slogova, koja
> je naravno nestrucno napravljena, odnosno, formirao neko
> dbu-om bazu sa 10 polja i posle punio neko ko zna jos
> manje.
Ako je problem u loše zamišljenoj bazi, mislim da bi trebalo formirati
neku bolju strukturu i onda napisati jednostavan program koji bi podatke
prepisao iz stare u novu bazu.
>
> Da li neko zna kako da resi problem skip-a na poslednjem
> slogu po filteru ?
Nije mi baš jasno šta me pitaš.
clipper.28ppekovic,
>>Ne moras praviti sopstveni dbedit. Predji na Clipper 5, tamo imas
***ODLICNI***
>>browse sistem. Ukoliko postoji interes, poslacu ovde jedan program koji
koris-
>>ti TBROWSE class Clippera 5 i koji je prilicno univerzalan.
>>
>>Naime, Clipper 5-ov TBROWSE omogucava:
>>
>> -sve ono sto omogucava dbedit
>> -umetanje sopstvenih funkcija SKIP, GO TOP i GO BOTTOM
>> -i jos mnogo toga...
Ja i koristim clipper 5.01 ;))) istina tek od skoro
(verovatno jer se skoro i pojavio ;) ).
Kažeš da nema problema sa tbrowse-om i slučajem kada
se na zadnjem slogu po filteru pritisne strelica na dole. Ja
sam probao tbrowse na bazi od 10.000 slogova i jednim
jednostavnim uslovom postavljenim kao filter i na jednom 21 ms
disku sa 2 MB keša je pritisak na strelicu dole na zadnjem
slogu po filteru radio dobrih 20-ak sekundi.
Ako postoji rešenje za ovo upotrebom objekata za
tbrwose ili na neki drugi način, ako ti nije teško, voleo bi
da napišeš par redova o tome.
Za mene bi najbolje rešenje bilo kada bi nekako moglo
da tbrowse pre ispisa svakog sloga, skače na moju funkciju
koja postavlja file pokazivač na slog koji ja želim da se
sledeći prikaže, pa se onda kontrola vrati tbrowse-u i on
ispiše slog koji sam ja u mojoj funkciji izabrao.
Zašto? pa zato jer bi onda u mojoj funkciji mogao da
koristim index po polju koje pretražujem pa sa find i
uzastopnim skip-ovim dok se ne prekrđi uslov da veoma brzo
filtriram bazu po tom uslovu.
Paya
clipper.29ppekovic,
>>> Da li neko zna kako da resi problem skip-a na poslednjem
>>> slogu po filteru ?
>>
>> Nije mi baš jasno šta me pitaš.
Uzmi bazu od 10.000 slogova. Postavi filter, bilo kakav. Uđi u
dbedit ili tbrowse. Idi na dno baze sa ctrl-pgdn (ovo će potrajati). E
sad stisni strelicu na dole i oduševi se kolko je "brz" ;(((
Paya
clipper.30vkrstonosic,
> Sta ako u bazi vec postoje zapisi DELETED ?
>
> Zatim, koliko je brz skip u bazi u kojoj je recimo 90% slogova
> izbrisan ?
Slazem se, ali ja samo razradjujem tudje ideje ;)
Probao sam nocas, na bazi od 400K i oko 1600 slogova, delete for
<jednostavan uslov>, radi oko 30 sec, prema tome, po meni ovo otpada.
clipper.31vkrstonosic,
> Ako je problem u lose zamisljenoj bazi, mislim da bi trebalo
> formirati neku bolju strukturu i onda napisati jednostavan program
> koji bi podatke prepisao iz stare u novu bazu.
To znam i to nije problem, samo me zanima da li neko ima ideje
kako rasturiti bazu, da bi rad posle toga bio najbrzi. Da li podeliti
po slogovima, ili odvojiti polja po raznim bazama. Cilj mi je samo da
dobijem sto brzu selekciju.
clipper.32vkrstonosic,
> Naime, Clipper 5-ov TBROWSE omogucava:
>
> -sve ono sto omogucava dbedit
> -umetanje sopstvenih funkcija SKIP, GO TOP i GO BOTTOM
> -i jos mnogo toga...
Mislim da problem ne moze biti resen pomocu bilo kakvog dbedita,
jer problem lezi u samom clipperovom radu sa filterom. On jednostavno
ucini nevidljivim slogove koji ne ispunjavaju uslov, ali i dalje kad
nesto radi, radi i sa njima. Jedino sto je brzo je naredba seek, pa bi
trebalo videti sta se moze uraditi sa njom. Mada i to ne resava
problem jer seek trazi samo na pocetku indeksiranog sloga, pa ne
dolaze u obzir razni "tezi" uslovi.
Clipperov TBROWSE sam probao, cak i doradio za svoje potrebe, ali
ipak nisam odusevljen rezultatima. Lepo je sto je moguce zamrznuti
kolonu, ili se igrati bojama i nekim oznakama, ali to ipak ne resava
probleme.
clipper.33vkrstonosic,
>> Kad smo vec kod Clippera, dbf-a i ntx-a, u Clipperu 5.01 je
>> odvojena biblioteka DBFNTX.LIB u kojoj je drajver za rad sa bazama.
>> Postoji i funkcija koja iscitava koji se drajver trenutno koristi,
>> ili postavlja neki drugi. Kakve su sanse da se tu uradi nesto
>> pametno, odnosno, preradi postojeci, napravi ili nabavi neki drugi
> drajver ???
>
> Isto pitanje !!!!! Pitao sam po mnogim BBS-ovima i nigde nista...
Eh, a mislim da bi tu trebalo da lezi resenje problema brzine
clipperovog rada sa bazama. Ima li dobrovoljaca da malo prodzaraju po
dbfntx.lib ;))
clipper.34beki,
> Za mene bi najbolje resenje bilo kada bi nekako moglo
> da tbrowse pre ispisa svakog sloga, skace na moju funkciju
> koja postavlja file pokazivac na slog koji ja zelim da se
> sledeci prikaze, pa se onda kontrola vrati tbrowse-u i on
> ispise slog koji sam ja u mojoj funkciji izabrao.
Ideja TBROWSE sistema je upravo u tome. TBROWSE sistem je neka vrsta prethod-
nice objektno orijentisanog Clipper-a. Postupak za rad je sledeci:
1. Kreiraju se tbcolumn objekti koji sadrze definiciju kolona
2. Kreira se tbrowse objekat od svih tbcolumn objekata
3. Ulazi se u petlju koja skenira tastaturu i u zavisnosti od
toga sta treba da se uradi poziva odgovarajuce metode tbrowse
objekta.
Odlicna strana tbrowse-a je sto ne skace on u tebe (kao dbedit), vec ti skaces
u njega i drzis sve njegove konce (moguce je i on-line dodavanje i brisanje
kolona).
Da bi opisao stvar, dacu ovde jedan kratak primer upotrebe tbrowse sistema na
bazu ABC.DBF sa samo dva polja: IME (C[15]) i PREZIME (C[15]).
*******************
LOCAL kolona[2],br,kraj,dugme
CLEAR
USE abc
kolona[1]=tbcolumnnew("Ime", {|| ime}) && Kreiramo objekte u kojima
kolona[2]=tbcolumnnew("Prezime", {|| prezime}) && smestamo kolone
br=tbrowsedb(3,20,22,60) && Kreiramo tbrowse objekt u datom prozoru. Ono
&& ...db kaze da browse-ujemo iz baze i olaksava
&& inicijalizaciju.
br:addcolumn(kolona[1]) && Vezujemo kolone sa tbrowse objektom
br:addcolumn(kolona[2])
kraj=.F.
DO WHILE .not. kraj
DO WHILE !br:stabilize() && Prozor se popunjuje slogovima. Svaki poziv na
ENDDO && br:stabilize dodaje jedan slog u prozoru.
dugme=inkey(0)
DO CASE
CASE dugme=K_DOWN
br:down() && Pozivamo metod za prelaz na sledeci slog
CASE dugme=K_UP
br:up() && Pozivamo metod za prelaz na prethodni slog
CASE dugme=K_ESC
kraj=.T.
ENDCASE
ENDDO
CLOSE
*******************
Objekti u Clipper-u 5 (na zalost, nisu moguci user-defined objekti) imaju svo-
je metode i instance-varijable. Metodi se pozivaju sa:
objekt:metod(parametri) ---> rezultat
Instance-varijable se citaju sa:
objekt:varijabla ---> rezultat
a postavljaju sa:
objekt:varijabla=izraz
Da ne bi ovde mnogo duzio o svim metodima i instance-varijabla (ima ih
podosta),
saljem uz ovaj tekst jedan PRG fajl koji sam uspesno koristio kao genericki
filterirani browse u nekoliko aplikacija.
Inace, Clipperov tbrowse sistem je veoma mocan - moguce je imati istovremeno
nekoliko tbrowse objekata aktivnih i u njima prikazivati sadrzaje nekoliko
povezanih baza, ili mozda jedne baze. Uostalom, sve ovo veoma podseca na sve
okoline za programiranje sa prozorima (message driven okoline), kao
Macintoshov,
Windows itd.
Svakome koga interesuje Clipper 5 toplo bi preporucio knjigu:
Clipper programming guide 2nd edition, Rick Spence, Microtrend.
(^^^^^^^^^^ co-developer of Clipper)
u kome ima mnogo sistematiziranog znanja i umeca sa Clipper-om.
Beki
mybrowse.zipclipper.35lazo,
-> Podela na više baza je problematična, tj. kako baze
-> podeliti.
E ovako. Ja sam taj problem rješio na slijedeći način. Naime, iskori-
stio sam brzinu SEEK naredbe. Naime, indeksirao sam bazu po ključevima
koji mi mogu zatrebati u toku obrade baze. Princip je slijedeći. Recimo
da imamo bazu u kojoj ima nekoliko stotina kupaca i intersuju vas podaci
za jednog kupca. Indeksirao sam datoteku po polju za šifru kupca i zatim
kada se unese odgovarajuča šifra, sa SEEK, koji je veoma brz pozicionira
se na prvi slog koji je vezan za tog kupca. Zatim se naredbom COPY TO dat
WHILE šifrakupca=VARIJABLA dobija nova datoteke sa puno manje slogova.
Rad sa tako kratkom datotekom oduzima mnogo manje vremena, nego sa onom
od preko 10000 slogova. Zatim se pri izlasku iz tog dijela programa
izbriše ta pomoćna datoteka. To je naravno korisno kod izlistavanja raz-
nih kartica i štampe kartica. Na ovaj način sam postigao da se posao koji
je rađen od 8 sati (vjerujte mi na rječ), uradi za 40 minuta. Problem se
naravno javlja ako treba nešto fizički mjenjati u datoteci. Kako ono što
je mjenjano u pomoćnoj da se izmjeni i u glavnoj. Ako bi se svi ti podaci
izbrisali pa zatim dodali iz pomoćne opet bi se dobila sporost rada. Zato
fizičke izmjene radim u glavnoj, a izvještaje pomoću tzv. pomoćnih dato-
teka koje nakon upotrebe brišem, jer nema potrebe da zauzima prostor na
disku kad se ti isti podaci nalaze u glavnoj.
Problem je kad se zada filter pa se čeka dok se pozicionira na prvi
slog u glavnoj filtriranoj bazi, kao i neki nedostaci DBEDIT-a.
Inače, gore opisani način obrade podataka u velikim datotekama je jedan
od načina da se poveća brzina obrade podataka i za mene najbolji. Volio
bih, ako neko zna bolji tj. brži način obrade podataka u DBF datotekama
da ga opiše.
Nadam se da sam bar malo pomogao u tome kako izdjeliti datoteku na više
manjih i da se poveća brzina obrade.
Pozdrav Mickey.
clipper.36ppekovic,
>> Inace, Clipperov tbrowse sistem je veoma mocan - moguce je imati istovremeno
>> nekoliko tbrowse objekata aktivnih i u njima prikazivati sadrzaje nekoliko
>> povezanih baza, ili mozda jedne baze. Uostalom, sve ovo veoma podseca na sve
>> okoline za programiranje sa prozorima (message driven okoline), kao
>> Macintoshov,
>> Windows itd.
Beki, svaka čast na odgovoru i tebi i Lazi, siguran sam da će ovo
još mnogima koristiti.
Paya
clipper.37ndragan,
ljudi, al ga komplikujete. pređite na foks i rešite stvar prostim INDEX FOR.
da se razumemo, i kod mene kartica radi na
seek _kupac
copy to radna while kupac=_kupac
sele promet
use radna alias promet && svuda u kartici piše promet->polje...
i posle obrišem radnu; naravno, ni radna se ne zove baš radna, nego &tmp, gde
je tmp=sys(3), zbog toga da se u mreži ne bi sudarila dvojica koji bi da
prave istu radnu u isto vreme... to radim kad je jedan kupac ili neka manja
količina; ako teram preko cele baze, onda index for. a ima i baza od
par mega, i ne traje dugo. ali filter - nikad više (ko zapali filter,
shvatiće).
i ne vidim čemu tolika galama.
Bue_ NDragan
clipper.38lazo,
Evo djelimičnog rješenja da ne dođe do prelaska prvog, odnosno zadnjeg sloga
u DBEDIT-u i onog dosadnog čekanja do pojave pozicionog markera. Na vrh se
dolazi tipkama CTRL+PGUP, a na kraj CTRL+PGDW. Dakle, ako niste sigurni da
li će kraj ili početak vi pritisnite jednu od ovih kombinacija i zatim kreni-
te u suprotnom smjeru. Napominjem da je rješenje djelimično, ali može pomoći
da ne dođe do 'zaglupljivanja', kad je baza pod filterom i naravno velika.
Vjerovatno ovo znate, ali ... (nije zgoreg spomenuti).
Pozdrav Mickey.
clipper.39lazo,
-> Beki, svaka čast na odgovoru i tebi i Lazi, siguran sam da će ovo
-> još mnogima koristiti.
Eto, odah svoju tajnu.:))))))Sad više moji programi neće biti najbrži.:)))))))
Pozdravljam sve kliperše.
Mickey.
clipper.41ppekovic,
>> ljudi, al ga komplikujete. pređite na foks i rešite stvar prostim INDEX FOR.
>>
>> da se razumemo, i kod mene kartica radi na
>>
>> seek _kupac
>> copy to radna while kupac=_kupac
>> sele promet
>> use radna alias promet && svuda u kartici piše promet->polje...
"Digao sam galamu" ;)) zbog sledećeg:
Imaš bazu od 10.000 slogova i ako udariš filter i na zadnjem slogu
stisneš strelicu na dole, program radi ihaaaaj koliko. No, na svu
sreću tu je Beki i Clipper 5.01 pa smo taj problem rešili.
A što se tiče INDEX FOR ta ideja je dobra sve dok ne dođeš do
slučaja kada ti trebaju višestruki uslovi i to da te višestruke uslove
prepustiš da zadaje korisnik. Primer:
Nađi mi u bazi sve čije ime počinje sa "P"
Od tih mi suzi selekciju na sve koji imaju 18 godina
E sad dodaj mi u tu bazu i sve čije ime počinje i na "M"
U vezi COPY TO komande. Ona na žalost radi isuviše sporo za veliki
broj izabranih slogova, a ako se program pusti da korisnik zadaje
uslove, onda će se sigurno vrlo brzo desiti ovakav slučaj. S druge
strane, COPY TO je skoro neupotrebljiv tamo gde se jako često koristi
selekcija, "deselekcija", a to je u gore pomenutom slučaju.
Paya
P.S. Hvala za preporuku FOX-a ali znaš kako smo svi mi konzervativni.
S druge strane potrebno je izvesno vreme da bi se navikao na nove
komande i funkcije, zatim fox-ove prednosti, ali i bug-ove. A na
kraju, kada nisam 100% siguran oko izbora, idem po sistemu, kud svi
turci ... A svi (većina) odoše put clipper-a, što nikako ne znači da
je ovaj bolji, ali zar svi ne koristimo INTEL-ove procesore a
MOTOROLIni su bolji.
clipper.42bulaja,
Hey Clipperasi,
evo jednog lepog iznenadjenja u prikacenoj datoteci (subntx2.zip):
Í───
║ Subntx() is a C function called from a Clipper program to quickly
║ extract index elements from an existing index file, and create a
║ "subset" index matching some key.
║
║ Typical uses for SubNtx() include implementing a 'WHILE' clause for
║ dbedit, replacing or deleting groups of records, or reporting for a
║ certain condition. Any of these processes can be made to perform
║ significantly faster with SubNtx().
Ë───
Dakle izgleda bas ono sto nam je trebalo za resavanje nekoliko
prethodno spomenutih problema. Ovo je shareware verzija i ogranicenje
je sto se funkcija moze pozvati samo 5 puta prilikom jednog
izvrsavanja programa. Uz registraciju se dobija i C source f-je.
Sad jos kad bi smo znali strukturi NTX datoteke, mislim da ne bi bio
neki problem da i sami ovako nesto napravimo. Prekopacu posle po
Clipper dokumentaciji da vidim ima li mozda opisan NTX ili struktura
alternativnog NTX engine.
JžB
clipper.44beki,
> A sto se tice INDEX FOR ta ideja je dobra sve dok ne dodes do
> slucaja kada ti trebaju visestruki uslovi i to da te visestruke uslove
> prepustis da zadaje korisnik. Primer:
>
> Nadi mi u bazi sve cije ime pocinje sa "P"
> Od tih mi suzi selekciju na sve koji imaju 18 godina
> E sad dodaj mi u tu bazu i sve cije ime pocinje i na "M"
Takav slucaj ne mozes da obuhvatis indexom. To je inace i razlog zasto je
SQL spor - indexe kreiras u data definition i to na vrlo niskom nivou, a
zatim radis upite uopste ne vodeci racuna na indexe. Kad tad, mora se po-
vesti racuna (cak i na VAX6600). Zato u velikim relacionim bazama postoje
profajleri koji ce reci koliko vremena je izgubljeno na kakve stvari i
predloziti indexe. Ideja je u tome da SQL sam optimizuje upit koristeci
indexe.
To bi mozda moglo nekako da se uradi u Clipper-u (pomocu potprograma napi-
sanog u C). Trebalo bi cuvati jedan data-dictionary, u kojem bi bili opisani
svi DBF i NTX fajlovi. Zatim bi se, kad se da upit, odredilo koji index ko-
ristiti itd.....
Ima li neko da ovo uradi ?
Beki
clipper.45beki,
> Sad jos kad bi smo znali strukturi NTX datoteke, mislim da ne bi bio
> neki problem da i sami ovako nesto napravimo. Prekopacu posle po
> Clipper dokumentaciji da vidim ima li mozda opisan NTX ili struktura
> alternativnog NTX engine.
Imam strukturu Clipper-ove NTX datoteke. Samo problem je u tome sto treba
dodati network support i slicne stvarcice. Posto sam radio diplomski rad
oko paralelnog pristupa B-stablima, znam da je to cupav problem.
Poslacu za neki dan opis NTX strukture, jer sad nemam vremena.
> je sto se funkcija moze pozvati samo 5 puta prilikom jednog
Mozda neko provali zastitu !
...Beki
clipper.46zkehler,
Ŕ (...) Sad jos kad bi smo znali strukturi NTX datoteke, mislim da
Ŕ ne bi bio neki problem da i sami ovako nesto napravimo (...)
Clipper-ov sistem za indeksiranje koristi modifikovano B-stablo.
Prvi page je header, ostali koriste ključeve i pointere neophodne
za održavanje stabla.
Struktura pagea za header je sledeća:
#define MAX_KEY 256
typedef struct š
unsigned sign;
unsigned version;
long root;
long next_page;
unsigned item_size;
unsigned key_size;
unsigned key_dec;
unsigned max_item;
unsigned half_page;
char key_expr ŠMAX_KEYĆ;
Boolean unique;
ć NTX_HEADER;
Značenja polja:
sign - dužina 2 bajta, vrednost 03; identifikuje bazu
kao dBase/Clipper
version - polje koje Clipper koristi da bi odredio verziju
indeksnog sistema
root - offset prve indeksne stranice
next_page - offset prve u listi nekorišćenih indeksnih
strana. Prva 4 bajta nekorišćene strane ukazuju na
sledeću takvu stranu. Lista se završava vrednošću nula.
item_size - veličina ključa, plus dužina 2 long broja. Ovo je
razmak između ključnih zapisa
key_size - dužina ključa po kome se indeksira
key_dec - broj decimalnih mesta u ključu, ako je NUMERIC
max_item - najveći broj ključeva, koji zajedno sa pointerima
mogu stati na jednu stranu
half_page - najveći broj ključeva na strani, podeljen sa 2
(važno za B-stabla)
key_expr - izraz po kome je indeksirana baza, najveće dužine
256, NIL na kraju
unique - boolean koji pokazuje vrednost unique flega kada
je indeks kreiran
Offseti polja u NTX datoteci:
00 unsigned sign
02 unsigned version
04 long root
08 long next_page
0C unsigned item_size
0E unsigned key_size
10 unsigned key_dec
12 unsigned max_item
14 unsigned half_page
16 char key_expr ŠMAX_KEYĆ
272 Boolean unique
Imam C programčiće za dump NTX headera i listanje indeksa. Ako
nekome trebaju, javite.
ZK
P.S. "Clipper Programming Guide", 2nd Ed., Rick Spence
clipper.47ndragan,
* Imaš bazu od 10.000 slogova i ako udariš filter i na zadnjem slogu stisneš
* strelicu na dole, program radi ihaaaaj koliko. No, na svu
filter? ne hvala, ako ima duvana, zavijam sam ;). stvarno, baš smo
poslednje nedelje proterali poslednju FILTER naredbu iz svojih rutina. BTW -
jel zna neko da li igde ima da se kupi duvana za zavijanje, i to hercegovačke
škije (našao sam konferenciju gde ću da se oglasim, alal mi vera...).
ranije su to držale politikine trafike, ali evo već godinu ipo dana...
pošto se taj duvan reže u Zadru. U Zadru inače (pre deset godina) niko
nije imao pojma da se to tamo proizvodi.
* Nađi mi u bazi sve čije ime počinje sa "P" Od tih mi suzi selekciju na sve
koji imaju 18 godina E sad dodaj mi u tu bazu i sve čije ime počinje i na "M"
index on <izraz> for (ime='P' .and. godina=18).or. ime='M' to idxfile
just like that. ili ako korisnik zadaje uslov, umesto 'P', 18 i 'M'
ufuraš neke promenljive koje je on zadao; kod mene se često pojavljuje
uslov=iif(odgovor=1,'baza->pera=baza2->mika','baza->laza=baza2->milka')
index for &uslov on &dex to (tmp)
itd; to radi. danas sam na jednoj 20MHz/150/286 indeksirao ovako:
index on skl+kupci.posbroj+kupac+pakdatum ;
for between(posbroj,pbr1,pbr2).and. konto=_konto to (tmp)
naravno, i uslov i indeksni pojam su makroi koje dobijam posle jedne
serije od tri - četiri pitalice. iz baze od oko 96000 slogova po 100
bajta (tu negde) iščupao mi je oko 65000 za 20 minuta; makina je
neposvećeni poslužilac ( :) non-dedicated server) u RPTI mreži (mada
niko drugi nije radio na tom disku); baza je imala oko 10M i nešto.
Obrati pažnju da se u indeksnom pojmu nalazi i jedno polje iz druge
baze koja je u relaciji; kad to uspem da izbegnem stvar šljaka nekih 4
puta brže.
* strane, COPY TO je skoro neupotrebljiv tamo gde se jako često koristi*
selekcija, "deselekcija", a to je u gore pomenutom slučaju.
to i kažem - COPY ni ne koristim; radim samo COPY WHILE ako znam da nema
nešto mnogo da se kopira.
Bue_ NDragan
clipper.48beki,
Bas bi hteo da vidim tog koji bi **samo** iz ovoga uradio novi NTX sistem,
koji ce biti isti sa starim, posebno u multiuser (=network) okruzenju.
Uraditi B-stablo sa konkurentim pristupom je gorak zalogaj (moj diplomski
rad je bio na tu temu), a uraditi to kompatibilno sa Clipper-ovim NTX-om
jos teze.
OVO KAZEM DRUGI PUT: CLIPPER+BTRIEVE=SUPER. ZNA LI NEKO KAKO ZAMENITI
ORIGINALNI DBFNTX.LIB ??????????????????????????
Beki
clipper.49beki,
Jeli moguce koristiti Clipper5-ove overlaye bez RTLINK-a, odnosno sa
nekim drugim linkerom kao LINK ili TLINK ?
Beki
clipper.50beki,
Sve je to lepo. Ali izgleda da niko od nas nije dobro razumeo Payu: on je tra-
zio metod za selekciju zapisa iz baze po uslovu koji zadaje korisnik on-line.
Resenje sa INDEX FOR ****nije dobro**** jer u svakom slucaju mora se preci pre-
ko svih 96.000 slogova u bazi !!! U teoriji relacionih baza postoje metodi za
optimizaciju upita za upotrebu postojecih indexa. Nazalost ovi algoritmi se ne
mogu implementirati u Clipper-u jer zahtevaju nizi nivo pristupa indexnim faj-
lovima, a i nesto drugaciju indexnu strukturu.
U jednom clanku sam nasao algoritam i strukturu podataka koji omogucavaju da
kad se odrede n polja po kojima ce se vrsiti upiti, kreira index koji ce omogu-
citi bilo kakve upite po opsezima tih polja. Na primer, ako treba da radimo
upit po poljima: pol, ime i starost, mozemo postaviti upit kao:
pol="M" .and. 18<=starost .and. starost<=20 .and.
ime>="M" .and. ime<="O"
Kada imamo potrebu za takvu slobodu upita i kada imamo tako veliku bazu (to se
dobro placa, zar ne), mozda se isplati implementirati neki ovakav subsystem.
Mozda se najvise isplati uzeti jedan microVax i Rdb i svi su problemi reseni.
Beki
clipper.51beki,
Dali neko ima ideju kako ugraditi sledece u Clipper-u (5) ?
Treba mi to da su DBF fajlovi zasticeni od citanja u dBase III ili od
drugog Clipper programa. Teoriju vec znam, dali neko ima praksu ???
Beki
P.S.: Previse usera se ohrabrilo da u dBase mogu uraditi sve sa svojom
evidencijom !!!!!!!!!!!!
clipper.52ppekovic,
>> uslov=iif(odgovor=1,'baza->pera=baza2->mika','baza->laza=baza2->milka')
>> index for &uslov on &dex to (tmp)
Eh, tako sam i ja probao, ali mi se ubrzo pojavio problem. Naime,
ako korisnik zada malko više uslova tj. kada string postane povelik,
dešavalo se da mi clipper prijavi greščicu u stilu "e, da nisi malo
preterao" ;))). Samo mi nikad nije bilo jasno po kojoj logici to
prijavljuje. Nema fiksne dužine posle koje to prijavljuje jer se to
nekad dešavalo se kraćim a nije sa dužim stringovima. S druge strane,
ni broj uslova nije baš navodio na neki logičan zaključak. Moguće je
da funkcija po kojoj clipper određuje pojavu ove greške zavisi od više
parametara.
Neznam kako sa ovim stoji FOX. Ako ti nije teško, probaj, unesi
xxx uslova pa vidi dal će da pukne.
Paya
clipper.53ppekovic,
>> Jeli moguce koristiti Clipper5-ove overlaye bez RTLINK-a, odnosno sa
>> nekim drugim linkerom kao LINK ili TLINK ?
Pa trebalo bi da može sa sa MS LINK-om iz MSC-a 6.0.
Paya
clipper.54ppekovic,
>> Dali neko ima ideju kako ugraditi sledece u Clipper-u (5) ?
>>
>> Treba mi to da su DBF fajlovi zasticeni od citanja u dBase III ili od
>> drugog Clipper programa. Teoriju vec znam, dali neko ima praksu ???
;) Uze mi ideju iz glave.
Za sve prikaze u programima, osim u slučaju dbedit-a, rešenje za
ovo je prilično trivijalno. Napišeš svoje funkcije za code i decode
(dal ćeš koristiti xor ili neki drugi sistem codiranja nije ni bitno)
i jednostavno kodiraš celu bazu. Zatim, recimo pre READ/GET-a uradiš
jedno decode tekućeg sloga, uradiš šta treba, posle uradiš jedno code
i gotovo.
E, sa dbedit-om je malko drugačija stvar. Potrebna je funkcija
koje će pre ispisivanja svakog reda dekodirati taj red pa ga tek onda
dati na dalju "obradu" dbedit-u. To u clipper-u '87 nije bilo moguće,
ali u 5.01 jeste, pošto dbedit iz 5.01 dozvoljava da redefinišeš svaki
deo dbedit-a.
Međutim, ima i tu problema. U isto vreme, svi oni koji su trenutno
prikazani u dbedit prozoru treba da su decodirani a svi ostali
kodirani. Zato treba preuzeti kontrolu i nad svim funkcijama za
kretanje kroz bazu u dbedit-u, pa čim jedan ili više slogova izađu iz
prozora, treba ih kodirati, a nove dekodirati.
Probaću ovih dana to da sprovedem u delo pa ću javiti o
rezultatima.
Paya
clipper.55bulaja,
│ E, sa dbedit-om je malko drugacija stvar. Potrebna je funkcija
│koje ce pre ispisivanja svakog reda dekodirati taj red pa ga tek onda
│dati na dalju "obradu" dbedit-u. To u clipper-u '87 nije bilo moguce,
│ali u 5.01 jeste, posto dbedit iz 5.01 dozvoljava da redefinises svaki
│deo dbedit-a.
└───
Bilo je moguce (i ja sam to vrlo cesto koristio) i u Clipperu S87, i
to preko definisanja niza za formatiranje ispisa. Stavis npr.
afld[1]="polje1"
afld[2]="polje2"
(...)
apic[1]="decode(polje1)"
apic[2]="decode(polje2)"
(...)
dbedit(y1, x1, y2, x2, afld, , apic)
i jos definises DECODE funkciju i that's all.
Ideja sa kodiranjem / dekodiranjem (po meni) nije neko resenje, sem
naravno za vrlo poverljive podatke koje i ovako treba sifrovati, a po
njima ne treba vrsiti nikakva pretrazivanja. Kodiranjem svih polja bi
suvise usporio rad kod npr. indeksa, dok bi se kod pretrazivanja jos
nekako i prezivelo ukoliko bi se uslovi pretrazivanja takodje
konvertovali u kodirani oblik. Ali ovo moze dovesti i do prilicno
velikih problema jer ce "glupi" korisnici ulaziti svejedno u bazu i po
onako kodiranoj brljati i samo nesto pokvariti posto tek sad nece
znati sta rade.
Ma kako trivijalno izgledalo jedno resenje koje ja koristim radi.
Pokusajte samo da preimenujete npr BAZA.DBF u BAZA.DAT (ili neku drugu
ekstenziju). Vecina od onih sto su naucili da ulete u dBase u daju
"use baza" ce se tu predati. Provereno.
Drugo resenje koje smatram vrlo dobrim i na kome cu mozda proraditi
ovih dana ako budem imao vremena (mada i nije nikakav tezak posao) je
jednostavno malo sludjivanje zaglavlja .DBF datoteke. Npr. na izlasku
iz programa stavite proceduru koja ce npr. prebrisati prvih nekoliko
bajtova u hederu .DBF datoteke nekim proizvoljnim sadrzajem. Na
pocetku programa naravno stavite da se header povrati u staro stanje
vracanjem na pravu vrednost tih nekoliko bajtova. Nema sanse da
procita onda bazu iz dBasea, pa ste sa te strane mirni. Posto u toku
rada vaseg programa baza stoji na disku u pravom obliku, korisniku
ipak moze pasti na pamet (a malo ih je tako pametnih) da program moze
prekinuti i onda pogledati sta je u bazi. Alt-C ste naravno
iskljucili, a mozete ugraditi u proceduru koja detektuje reset
racunara u toku rada ubaciti gomilu raznih upozorenja npr. stavite da
program pravi nege gluposti, npr. neku nevaznu tmp bazu i nek brlja po
disku koji minut (a u stvari samo treba reindekirati baze ;). Posle
toga tesko da ce se iko usuditi sledeci put da izaziva sudbinu.
Bulaja
clipper.56dejanr,
>> > Jeli moguce koristiti Clipper5-ove overlaye bez RTLINK-a, odnosno sa
>> > nekim drugim linkerom kao LINK ili TLINK ?
>>
>> Pa trebalo bi da može sa sa MS LINK-om iz MSC-a 6.0.
A jel tada malo brže od ono puža zvanog RTLINK?
clipper.57dejanr,
>> Napišeš svoje funkcije za code i decode (dal ćeš koristiti xor ili neki
>> drugi sistem codiranja nije ni bitno) i jednostavno kodiraš celu bazu.
>> Zatim, recimo pre READ/GET-a uradiš jedno decode tekućeg sloga, uradiš
>> šta treba, posle uradiš jedno code i gotovo.
Ideja je dobra, ali bih dodao jednu stvar. Ako planirate nešto slično,
zaboravite ideju da to kodiranje obavite u clipper-u. Jedna obična
petlja for i=1 to len(polje) će toliko unazaditi performanse programa
da će isti postati neupotrebljiv. Ukratko, jedan modulčić na asembleru!
clipper.58dejanr,
>> Kodiranjem svih polja bi suvise usporio rad kod npr. indeksa,
Ne bi! Umesto seek(vrednost) koristilo bi se seek(code(vrednost)) i
brzina bi bila ista, ako se zanemari početno izračunavanje code(vrednost).
clipper.59beki,
> da ce isti postati neupotrebljiv. Ukratko, jedan modulcic na asembleru!
Dejan ima pravo ! Jedan programcic u assembleru ili c-u koji ce biti linkovan
u aplikaciju i koji ce uraditi stvar. Ali stosevi kao:
SEEK code(...)
mime=decode(ime)
...
REPLACE ime WITH code(mime)
su prema meni neprihvatljivi - propada pouzdanost i citljivost aplikacije !
Opet se vracam na DBFNTX.LIB. Mesto za programcic u asembleru je DBFNTX.LIB !
U reklami za Clipper5 je pisalo da "it is possible to replace the low level
database/index interface". Kako ? Je li potreban jos neki Nantucketov
produkt ???
Pomagajte.
Pozdrav, Beki
clipper.60ppekovic,
>>>> Pa trebalo bi da može sa sa MS LINK-om iz MSC-a 6.0.
>>
>> A jel tada malo brže od ono puža zvanog RTLINK?
Dosta je brže, mislim duplo ako ne i više. A kad smo već kod ovog
da iznesem još jedno iskustvo. Danas sam napravio batch fajl koji mi
iskopira clipper 5.01 compiler i potrebne biblioteke na ram disk.
Zatim sam napravio batch koji kompajlira i linkuje program u ram
disku. Kompajliranje je išlo nešto malo brže, ali linkovanje ništa.
Linkujem upravo sa MSC linker-om.
Jedino ubrzanje koje je moguće postići je to da onaj temp fajl
koji kreira MSC link date da kreira u ram disku.
Paya
clipper.61ppekovic,
>> Ideja je dobra, ali bih dodao jednu stvar. Ako planirate nešto slično,
>> zaboravite ideju da to kodiranje obavite u clipper-u. Jedna obična
>> petlja for i=1 to len(polje) će toliko unazaditi performanse programa
>> da će isti postati neupotrebljiv. Ukratko, jedan modulčić na asembleru!
Može i u C-u. Naime, programi na C-u koji ne uključuju STDIO i
GRAPH i još neke manje korišćene header-e, mogu se bez problema
ulinkovati u clipper.
Paya
clipper.62dejanr,
>> Može i u C-u.
Naravno! Dodao bih da bi C bio daleko pogodniji ako treba implementirati
neki iole složeniji algoritam za šifrovanje, na asembleru bi bilo dosta
mučno. Ima li neki dobrovoljac da to uradi pa da posle, recimo, napiše
tekst na tu temu za "Računare"?
clipper.63bulaja,
││Kodiranjem svih polja bi suvise usporio rad kod npr. indeksa,
│└───
│Ne bi! Umesto seek(vrednost) koristilo bi se seek(code(vrednost)) i brzina
│bi bila ista, ako se zanemari pocetno izracunavanje code(vrednost).
└───
Mislio sam na usporenje prilikom kreiranja indeksa. Indeksiranje po
polju koje je kodirano nema nikakvig smisla (sem ako se kao encode
funkcija ne stavi not, kad bi to moglo da se resi descending indexom),
pa je potrebno dati indeksiranje po UDF funkciji (decode), sto ce vec
dosta usporiti rad cak i ukoliko je funkcija radjena u C-u ili ASM,
dok bi Clipper funkcija vec donela katastrofalno usporenje. E sad ne
mogu da se setim kako ide osvezavanje indeksa - vajlda kad se da
replace na key field onda ide i reindeksiranje po UDF funkciji, ali
posto se radi samo za trenutno polje usporenje bi trebalo da je
neprimetno.
Pao mi je napamet drugi veliki problem prilikom kodiranja baze - ja
imam obicaj da u GET maske stavljam direktno ucitavanje ili
prikazivanje (sa CLEAR GETS) polja iz baze. Naravno da nije moguce
GET decode(polje), eventualno bi se dalo simulirati preko VALID, ali
tu vec idemo u takve komplikacije da je jedino primenljivo resenje
smestanje polja u privremeni niz i kasnije snimanje u bazu, cime opet
gubim sve prednosti direktnog GET-a polja iz DBF.
A sad da se zapitamo cemu ovoliko kodiranje i skrivanje podataka. Ako
su vrlo poverljivi onda Ok, makar bilo i 10 puta sporije. Medjutim za
sprecavanje radoznalih korisnika cini mi se da bi najbolje resenje
bilo ono sto sam predlozio za sludjivanje headera baze. Kratko je i
jednostavno (aj' potrudicu se mozda da i uradim to ovih dana), i sto
je najvaznije ne zahteve nikakve dodatne akrobacije prilikom rada sa
bazama u programu.
Bulaja
clipper.64bulaja,
│Opet se vracam na DBFNTX.LIB. Mesto za programcic u asembleru je DBFNTX.LIB !
│U reklami za Clipper5 je pisalo da "it is possible to replace the low level
│database/index interface". Kako ? Je li potreban jos neki Nantucketov produkt?
└───
Nantucket ocito ne zeli da se previse upustimo u analiziranje DBFNTX
biblioteke. U kompletnoj dokumentaciji se jedva i pominje DBFNTX.LIB i
to samo se spomene da postoje tri bibiloteke (CLIPPER, EXTEND i
DBFNTX), a u NG-ovima ni pomena. Jednom recju nista.
Malo sam gledao po tom LIB-u, ima oko 40 raznih funkcija. Kretensko
resenje je da sad vadimo svaki OBJ iz LIB-a, pa malo SOURCER-a, pa
menjamo pa vracamo u LIB etc. Ovo je samo teorijsko resenje, em je
zaludan posao, em se ja i da imam vremena ne bi snasao u tome ;), a ko
zna i dal' bi proradilo. Ostaje nam da cekamo da se ameri sete da to
uradi, il' bar da imamo nesto dokumetvoano da krenemo od toga. Crno
nam se pise ;).
clipper.65dejanr,
>> jedino primenljivo resenje smestanje polja u privremeni niz i kasnije
>> snimanje u bazu, cime opet gubim sve prednosti direktnog GET-a polja
>> iz DBF.
Ja i tako uvek sve prepisujem u privremena polja. Iz razloga što moram
da omogućim korisniku da eventualno usled unosa odustane (sa Esc) od
SVEGA što je do tada na tom ekranu promenio. A za to izgleda nema drugi
način.
>> Indeksiranje po polju koje je kodirano nema nikakvig smisla (sem ako
>> se kao encode funkcija ne stavi not, kad bi to moglo da se resi
>> descending indexom), pa je potrebno dati indeksiranje po UDF funkciji
>> (decode), sto ce vec dosta usporiti rad cak i ukoliko je funkcija radjena
>> u C-u ili ASM, dok bi Clipper funkcija vec donela katastrofalno usporenje.
Pa dobro, indeksira se relativno retko, nije strašno ako malo i potraje.
Ne verujem da bi usporenje bilo baš toliko veliko, vredi probati.Mada
priznajem da mi ovo nije palo na pamet, zato što indekse uglavnom
koristim za pretraživanje a ne za sortiranje.
clipper.66ppekovic,
>>Nantucket ocito ne zeli da se previse upustimo u analiziranje DBFNTX
>>biblioteke. U kompletnoj dokumentaciji se jedva i pominje DBFNTX.LIB i
>>to samo se spomene da postoje tri bibiloteke (CLIPPER, EXTEND i
>>DBFNTX), a u NG-ovima ni pomena. Jednom recju nista.
Pogledao sam na BIX-u u clipper conf. ali ni tamo ni reči. Ostavio sam
poruku sa pitanjem u vezi ovog liba na mom tarzan engleskom ;))) pa ako
budu razumeli, valjda će neko znati nešto.
Paya
clipper.67spantic,
>>> > Jeli moguce koristiti Clipper5-ove overlaye bez
>>> > RTLINK-a, odnosno sa nekim drugim linkerom kao LINK
>>> ili TLINK ?
>>>
>>> Pa trebalo bi da može sa sa MS LINK-om iz MSC-a 6.0.
>
> A jel tada malo brže od ono puža zvanog RTLINK?
Ne da je brže nego rastura. Pre nego što sam počeo da koristim MS C 6.0
sa Clipperom sa koristio TLINK ali sa novim MS linkerom stvar se poboljšala.
clipper.68ndragan,
>* Neznam kako sa ovim stoji FOX. Ako ti nije teško, probaj,
>* unesi xxx uslova pa vidi dal će da pukne.
kod foksproa je ograničenje da kompajlirana linija ne sme da
pređe 1K; nikad nisam imao problema te vrste. ono jes da
ponekad radi sporo, ako se u indeksnom pojmu spominje polje iz
druge (i treće!) baze u relaciji, ali to mi uvek radi.
Bue_ NDragan
clipper.69lola,
Bio sam na putu, pa sa zakasnjenjem citam diskusiju o delimicnim
indeksima. To jeste veliki problem i ja sam se dovijao na razne
nacine.
U svojoj dokumentaciji imam stariju verziju SUBNTX() koja je takodje
demo i pokriva S87.
Ako nekog zanima mogu da je okacim ovde.
(SUBNTX.LZH 32326 27.12.89)
clipper.70beki,
> indeksima. To jeste veliki problem i ja sam se dovijao na razne
Da, jeste veliki problem. Sada, kada sam ovo citao dobio sam jednu ideju
koju jos nisam probao, al bi trebalo da radi. Kada dodajemo novi record
u bazi, iskljucimo one indexe koji ne treba da sadrze taj record. Ovo re-
senje je nezgodno s obzirom na REPLACE i REINDEX. REPLACE u slucaju promene
polja koje ulazi u neki indexni izraz bi trebalo implemenitrati tako sto ce
se obrisati record sa DELETE, pri cemu su otvoreni indexi u koje taj zapis
ulazi, a zatim ponovo APPEND-ovati. REINDEX bi se morao implementirati
kopiranjem baze, record po record, pri cemu ce se za svaki, ukljucivati
odgovarajuci indexi. Malo je nezgrapno, al bi trebalo da radi. Treba probati
da nije previse sporo otvaranje i zatvaranje indexa.
Pozdrav, Beki
P.S.: Nakon sto sam ovo napisao u SOR-u, probao sam gornji metod u dBase
i sve je radilo kako treba. Trebalo bi i u Clipper-u !
P.P.S.: Sve ovo bi se elegantno uklopilo u Clipper5-ovu mogucnost defini-
sanja komandi.
clipper.71ppekovic,
Pitao sam na BIX-u u vezi DBFNTX.LIB-a i evo odgovora:
==========================
clipper/tech.questions #2353, from irae, 317 chars, Mon Nov 4
17:48:46 1991
This is a comment to message 2352.
--------------------------
For that I'd guess you'll need the RDD spec which Nantucket has been
promising to release for the last year or so. The only person outside
of Nantucket that seems to know it is the folks at Successware 90 who
wrote the Babblefish driver for Paradox and have hinted that it uses
the unpublished RDD interface.
Ira
Paya
clipper.72ndragan,
* sprecavanje radoznalih korisnika cini mi se da bi najbolje resenje
* bilo ono sto sam predlozio za sludjivanje headera baze. Kratko je i
a jedna igra tipa 'isprekrštavaj sve pre nego što izađeš i odseci mu heder'?
jeste da je opasno, jer ne garantuje da će sve ostati čitavo kad nestane
struje, ali bi moglo da igra, a? ili, recimo, da se negde u hederu neki od
neiskorišćenih bajtova upotrebi za oznaku da li je heder sluđen, pa ako
jeste, pozovi rutinu koja ga unormaljuje, inače jok (pri otvaranju) i rutina
za zatvaranje koja opet pravi pičvajz po hederu. to čak ne bi moralo naročito
ni da bude komplikovano. mislim da ideja nije ni bila da se podaci bog zna
kako zaštite od nepozvanih, nego da se nedoučeni korisnik spreči da čačka po
dbfu i ubacuje nemoguće kombinacije (a tako smo se mučili oko kontrole u
aplikaciji...). pade mi sad na um još jedna stvar: arhiver sa šifrom
koji se poziva iz aplikacije da raspakuje (naravno sa -m opcijom) sve
dbfove pre upotrebe, i spakuje ih posle... što će naravno značiti da je
640 K neka vrsta berlinskog zida i da mora jednom pasti. izeš intel.
Bue_ NDragan
clipper.73ndragan,
* u bazi, iskljucimo one indexe koji ne treba da sadrze taj record. Ovo
kako misliš da isključiš indekse? set inde to, pa append, pa set inde to
inde1,ind2 - tu si ladno jedno tri-četr puta zvao što dos što bios da ti
pravi promaju (otvara/zatvara datoteke). sve i da ih držiš u ram disku, ne
verujem da je rešenje dovoljno brzo. ako staviš set order to 0, indeksi se i
dalje održavaju. a seti se ovoga:
** cexp1=IIF(lexp,cexp,"NEKI KLJUC")
*a šta misliš o cexp1=IIF(lexp,cexp+str(recno(),5),"NEKI KLJUC")
to bi trebalo da radi, jesi li probao? ja nisam, meni ne treba.
i dalje mi je pomalo čudna cela diskusija, jer kao foksovac stvarno nemam te
probleme (imam neke druge...). primedba da indeks for čita celu bazu je na
mestu (naš prvi komentar je bio 'a što nema index while'), ali ako je za
brauz, možda treba razmišljati o stalnom delimičnom indeksu, ili o jednoj
pomoćnoj bazi koja bi držala samo indeksni pojam prve (glavne) baze i u
drugom polju recno() od prve; u tom slučaju ta manja se indeksira a velika
ne, i uspostavi se relacija po tom drugom polju na broj sloga u velikoj. tako
nešto sam svojevremeno majmunisao u vaks bajziku, i brzo je šljakalo. tamo
čak ona velika nije ni bila indeksna datoteka (nije reč o DBF!) nego
sekvencijalna, a ova mala je bila UNIQ i sadržavala adrese prvih bajtova
prvih slogova po datom ključu u velikoj. time se izbeglo duuugačko
prečitavanje velike.
razmisli.
Bue_ NDragan
clipper.74gristic,
5.48
> OVO KAZEM DRUGI PUT: CLIPPER+BTRIEVE=SUPER. ZNA LI NEKO KAKO ZAMENITI
Sa malim zakašnjenjem: slažem se ! A tek (dobitna) kombinacija
C + Btrieve !!! Ili ((C + C-isam) * UNIX) == SUPER !!!!!!!!!!!
(C-isam je (izmeđuostalog i) srce SQLa - prim.prev.)
__GR__
clipper.75beki,
> dalje odrzavaju. a seti se ovoga:
>
>** cexp1=IIF(lexp,cexp,"NEKI KLJUC")
>
>* a sta mislis o cexp1=IIF(lexp,cexp+str(recno(),5),"NEKI KLJUC")
>
> to bi trebalo da radi, jesi li probao? ja nisam, meni ne treba.
To mi se ne dopada bas najvise. Baza za koju mi ovo treba je stvarno VELIKA
i onih 5 bajtova u nekoliko parcijalnih indexa mi smetaju.
> brauz, mozda treba razmisljati o stalnom delimicnom indeksu, ili o jednoj
> pomocnoj bazi koja bi drzala samo indeksni pojam prve (glavne) baze i u
> drugom polju recno() od prve; u tom slucaju ta manja se indeksira a velika
> ne, i uspostavi se relacija po tom drugom polju na broj sloga u velikoj.
Odlicno. Kako se samo nisam setio ranije. Slicnu sam stvar radio na C64.
Tamo je bilo sekvencijalnih i random fajlova. Ucitavao sam sve kljuceve
u RAM, sortirao, SEEK-ovao u RAM i citao sa floppy disk-a.
Pozdrav, Beki
P.S.: Ono sa otvaranjem i zatvaranjem indexa i nije tako lose ako je baza
takve prirode da nema cestih REPLACE-a i APPEND-a, znaci ako je vise
query baza. Jos vise, tada je to najbolje resenje kad nemas INDEX FOR.
clipper.76beki,
>* sprecavanje radoznalih korisnika cini mi se da bi najbolje resenje
>* bilo ono sto sam predlozio za sludjivanje headera baze. Kratko je i
>
> a jedna igra tipa 'isprekrstavaj sve pre nego sto izades i odseci mu
> heder'? jeste da je opasno, jer ne garantuje da ce sve ostati citavo kad
> nestane struje, ali bi moglo da igra, a? ili, recimo, da se negde u hederu
> neki od
A napraviti jedan rezidentni programcic u kojem ce biti registrirani DBF
fajlovi koje aplikacija koristi i koji ce kod DOS-ovih operacija READ/WRITE
za te fajlove primeniti potrebno kodiranje/dekodiranje. Taj programcic bi
mogao da bide linkovan sa celom aplikacijom, a Clipper-u 5 bi cak moglo:
#translate CUSE <dbfile> => register(<"dbfile">): use <dbfile>
gde je CUSE nova komanda za otvaranje sifrovanih datoteka, a register je
funkcija iz naseg programcica (ovo 'cica' moze da nestane ako bude poveci
program) koja kaze da prilikom read i write iz datoteke koja ce biti otvo-
rena pod imenom dbfile da primeni sifrovanje.
Beki
clipper.77alexa,
> (C-isam je ,)Żmeđuostalog i) srce SQLa - prim.prev.)
Nije tako, SQL je, ipak, samo jezik - on može da se oslanja na
manje-više bilo kakvu database mašinu.
clipper.78gristic,
>> (C-isam je (izmeđuostalog i) srce SQLa - prim.prev.)
> Nije tako, SQL je, ipak, samo jezik - on može da se oslanja na
> manje-više bilo kakvu database mašinu.
OK. Mislio sam na Informix, ali jedno je misliti, a drugo to napisati.
clipper.79alexa,
> OK. Mislio sam na Informix,
E da, tako može. Uzgred, C-ISAM i potiče od Relational Database
Systems, a ova firma se sada zove, pogodi kako:
Informix Software.
clipper.80yupc,
Skoro (relativno, posto nisam od 15.10. do pre dan-dva
bio na SEZAM-u, novi vozac ... ostre krivine ...;>)
je bilo pominjano crtanje grafova iz Clipper-a, uz pomoc
MSC. Posto je i mene interesovalo, nasao sam neke prospekte
od biblioteka za svakojako crtanje u Clipper-u.
Najvise mi se dopao Flipper (bar prema onome sto pisu),
zato sam i prepisao.
Prosudite, predlozite ... Vredi li narucivati ?
Pozdrav,
YUPC
****************************************************************
****************************************************************
****************************************************************
IS YOUR CLIPPER APPLICATON HALF-DRESSED ?
Then Get New Flipper 5.0
AND DRESS FOR SUCCESS !!!
-----------------------------------------------
Flipper 5.0 Graphics Will Keep You Users Out of
Embarrasing Situations
-----------------------------------------------
Witout graphics, even the most advanced Clipper application
simply isn't ready to do business.
Graphics "dress up" your aplication, and better-looking
applicatons are worth more to your clients.
NEW Flipper 5.0 is the complete graphics LIBRARY that fits
Clipper like a fine suit of clothes. Flipper 5.0 give you
the power integrate beautiful graphics into your applications
- quickly, seamlessy, and with only a few keystrokes.
Flipper 5.0 delivers the polished, professional "look of
succes" your clients want. And when your applications look
good, YOU LOOK GOOD.
Graphic, CAD and Clipper: A Perfect Match
-----------------------------------------
Flipper 5.0 brings a CAD-like interface to Clipper Development.
Vector objects such as circles, boxes, polylines and text can
be included in a drawing to create maps, room layouts and other
CAD drawings.
And that's just the beginning. Graphic object can be selected
with a mouse or keyboard, and linked to database records.
Objects can be filled solid or with a pattern, placed on
different layers within a graphic, copied, moved, combined
and more!
Printing: The Image of Success
------------------------------
Flipper 5.0's virtual image print driver lets you print
graphics at the resolution of the printer itself - instead
of at the lower resolution of the traditional print screen.
You get all the graphics your printer allows!
Flipper 5.0 support screen image printing to Laser Jet, Dot
Matrix color and Paint Jet printers, Post Script and HPGL,
driver let you scale grapics to any size, and use your
█printer's internal fonts for maximum output quality.
Flipper 5.0 also supports more than 150 disk-based, bitmapped
and stroke font files. You can compile fonts into ypur program,
and Flipper 5.0 even includes a font editor for total font
flexibility.
2D and 3D Graphs: Just Your Stile
---------------------------------
Flipper 5.0 aways given you a wide variety of graph to choose
from. Flipper 5.0 adds area graphs to the graph types alerady
supported. Any graph type can be switched from 2D to 3D with a
single function. 3D chatrs can be rotated to any angle.
Flipper 5.0 allows you to place an unlimited number of graphs
on the screen, overlay graphs upon each other, create text and
reference lines wherever you want, and much more!
Included Features:
Support standard graphics card:
- Auto detects CGA, EGA, VGA, Hercules
- Switch to 800 x 600 or other resolutions suppored on
video card
2D & 3D Graph Types
- Autoscale axes
- Two independent Y axes
- Unlimited data sets and unlimited points on graph
- Any axes linear or log
- Mix bars, stacked bars, lines stackes line, points on
same graph
- Any number of graphs on screen
- Overlay graph on previos graph
- Linear regression, curve fiting
- Text, reference lines anywhere on graph
- Missing value support
- Draw line as spline
- Set legend anyplace on the graph
PCX picture support
- Read and write PCX pictures
- Display monochrome pictures on color screen
- Display color pictures on monochrome screen
- Scroll PCX picture inside window
- Print PCX picture at resolution of printer
GEM compatibile font support
- More than 150 disk based bitmapped and stroke
font files included
- Fonts can compiled into your program
- New fonts can be acquired from font generation packages
- Font editor is included
- Font can be rotated, sized and justified
Supports printing
- Screen image printing to Laser Jet, Dot Matrix, Paint Jet
- Virtual image printing allows an image to be printed at
resolution of the printer
- HPGL is supported for HP Plotters, Laser Jet III and
other HPGL
- Post Script print driver
Low level drawing function
- Draw lines, boxes, arcs, circles and polygons
- Fill closed figures with solid or pattern
- Line can be set to line pattern
- Viewports for scaling a drawing into world coordinate
system
Graphic menu support
- Event driven mouse driver with keyboard support
- 3D effect drop down menus, icons, check box
- Several menus can be active at the same time
CAD drawing capability
- Draw complex objects can be create using the mouse or
keyboard, such as circles, arcs, lines, polylines, boxes,
polygons and stroke or bitmapped text
- Object can be filled solid or with pattern
- Object can be on different layers
- Objects can be copied, moved, deleted, saved, restored and
combined
- The world coordinate system can be defined than changed
allowing for zooming and panning of the drawing
- Each object can be associated with a database wich provides
further information about object
Complatibile with Blinker, Warplink, RTLink 4.1
Both Clipper Summer 87 an CLIPPER 5.0 support
- Support for Clipper SAYS, GETS, DBEDIT() in graphics mode
Flipper support is unmatched
- Norton guides database
----------------------------
đ - 24 hour online BBS đ
----------------------------
- Free tecnical support
- 70 page tutorial in manual
- 500 page manual
- Royality Free
- 30 day money back guarantee
Guaranteed To Improve Your Image
*****************
* At only $ 295,* Flipper 5.0 makes it easy to dress your
*****************
aplications.
And our money-back guarantee will never go out of style. If
you're not completly satisfied, return Flipper 5.0 witin 30
day for full refund.
clipper.81ppekovic,
>> je bilo pominjano crtanje grafova iz Clipper-a, uz pomoc
>> MSC.
U MSC postoji bibioteka PGCHART za crtanje grafova. Biblioteka je
sjajna, jednostavna za upotrebu, a rad je veoma brz.
Nevolja je u tome što funckije koje koriste funckije PGCHART
biblioteke nisam uspeo da ulinkujem sa clipper-om (pogledaj stare
poruke zašto).
Međutim, može se uraditi sledeće stvar. Može se napraviti odvojen
program za recimo crtanje grafova. Iz clipper-a će se pozivati kao
eksterni program, s tim što u clipper env. promenljivoj moraš odvojiti
dovoljno mesta za izvršavanje istog. Prenos parametara može ići preko
komandne linije (ako ih ima nekoliko) ili, ako ih ima mnogo, preko
temp. fajla.
Paya
clipper.82gristic,
>> OK. Mislio sam na Informix,
> E da, tako može. Uzgred, C-ISAM i potiče od Relational Database
> Systems, a ova firma se sada zove, pogodi kako:
> Informix Software.
Ma, šta mi napriča !;)
clipper.83beki,
>>> je bilo pominjano crtanje grafova iz Clipper-a, uz pomoc
>>> MSC.
>
> U MSC postoji bibioteka PGCHART za crtanje grafova. Biblioteka je
> sjajna, jednostavna za upotrebu, a rad je veoma brz.
Sto ne uzmete CL Tools od Dr.Huggle&Partner? Izmedju ostalog sadrzi
odlicnu graficku biblioteku, koju sam nekoliko puta vrlo uspesno is-
koristio. Mozete pogledati reklame u Byte.
Beki
clipper.84beki,
Ima li neko ekvivalent Clipper-ove funkcije ISPRINTER(), koja bi radila na
momentalno aktivni port za printer, recimo LPT2 ili COM3 ?
Beki
clipper.85vkrstonosic,
Kako da u objektnom browse sistemu u Clipper-u 5.01, postavim
picture za odredjenu kolonu ?
clipper.86beki,
> Kako da u objektnom browse sistemu u Clipper-u 5.01, postavim
> picture za odredjenu kolonu ?
Pa evo ovako. Recimo da zelis da 'telefon' pokazes sa '(999) 999-999'.
Onda uradis:
tbcolumnnew("Telefon", {|| transform(telefon,"@R (999) 999-999")})
Beki
clipper.87vkrstonosic,
> Pa evo ovako. Recimo da zelis da 'telefon' pokazes sa '(999)
> 999-999'. Onda uradis:
>
> tbcolumnnew("Telefon", {|| transform(telefon,"@R (999) 999-999")})
To je to, thanks.
clipper.88bstevan,
Zdravo !
Dali neko može da mi odgovori,ili da adresu firme u YU,
koja prodaje Clipper 5.01
Unapred hvala !
---POZDRAV---
---BSTEVAN---
clipper.89kole,
Ako koristite Clipper 5.01 Extend system da biste omogucili laksi
prenos podataka ka i od vaseg C programa, mozda ste primetili sledec:
Ako linkujete DOS linkerom (ili onim iz MSC 6.0)
dobijate poruke u stilu :
Error 2002: fix-up overflow ,bla,bla...
a program ponekad radi, ponekad ne.
Ako linkujete RTLinker-om ne dobijate nikakve poruke, ali program
jednostavno ne radi.
Resenje je vrlo prosto. NEMOJTE koristit Extend.h za definicije
prototipova funkcija vec ih Vi deklarisite kao _far_ sto resava
sve probleme (za sve linkere !)
Na primer.
extern void far _retni();
void far Vasa_funkcija()
{
...
...
_retni(nesto);
...
...
}
Ako ne radi, javite pa da vidimo !
Kole
clipper.90bulaja,
Kako da saznate da li neka hard disk particija postoji ili ne?
Easy as 1-2-3 ;) - samo proverite DISKSPACE(n) gde je n broj diska, 0
za A:, 1 za B:, 4 za D: itd. Ukoliko DISKSPACE vrati nenormalno veliki
broj, otprilike 1152 Tb (Terra bytes) (vazi za Clipper S87, nisam
proveravao sa 5.01) onda ta particija ne postoji.
Ocigledno, sve ovo ne vazi za particije vece od 1152 Tb ;).
clipper.91mjova,
> Ocigledno, sve ovo ne vazi za particije vece od 1152 Tb
> ;).
znači kod mene to ne bi radilo? :)
clipper.92zkrstic,
!! IS YOUR CLIPPER APPLICATON HALF-DRESSED ?
!! Then Get New Flipper 5.0
!! AND DRESS FOR SUCCESS !!!
Lep reklamni mamac.
Pomalo sam radio sa Flipperom , al' mu moj prisutni (mlađi) bratić
izvadio dušu:
Zdravo, ja sam prisutni BRATIĆ! Usput ja sam radio
sa verzijom 4.0 iz daleke 1988-me godine. Odmah da kazem da sam video
jos pet-sest slicnih paketa ali ni jedan nije ni blizu FLIPPER-u.
FLIPPER 4.0 koliko ja vidim po ovoj reklami gore nema nekih nedostataka
u odnosu na 5.0. Sve radi isto pocevsi od fontova, overleja, grafova
itd... Takodje radi sa standardnim PCX formatom slika. Naravno ako
pri tom imas neki od PICTURE konvertera onda mozes raditi u cemu hoces
i ubaciti te slike u CLIPPER. Medjutim daleko interesantnije podrucje
primene FLIPPER-a su dijagrami i uopste statistika. Naime on izvanredno
radi sa bazama i grafickim prikazivanjem sadrzaja baze. Sve to radi
strasno brzo i lepo. Radi na svim grafickim kartama i svim modovima.
Ovi fontovi koji se spominju su zaista dobri (kod mene ima 138). Ta-
kodje tu je i FONT EDITOR pa ako je neko dokon izvolite molim lepo.
Sve u svemu da ne duzim ako neko ne zna sta ce bez grafike u CLIPPER-u
ja najtoplije preporucujem FLIPPER.
P.S. Mislim samo da ce eventualno zainteresovani imati omanjih problema
prilikom rada. USER MANUAL je na oko 200 strana!!! Pa ako se nekom
isplati...
Eto, toliko... Puno pozdrava i ziveo FLIPPER !!!! Vlajko.
P.P.S. Da neznate ko od domaćih (čitaj: srpskih) distributera ima ovaj
paket: Flipper 5.0?
Pozdrav čeljko
clipper.93drpr,
Ćao svima!
Imam jednu veliku molbu i nadam se da će mi neko od Vas izaći u
susret.
Prvo da naglasim da što se tiče programiranja moj nivo znanja
se kreće samo u oblasti turbo paskala i to na nešto malo većem
nivou od školskog.To navodim iz sledećeg razloga:čeleo bih da
učim clipper pa bih želeo da mi neko ukratko objasni čemu
clipper služi i da li su mi potrbana neka veća predznanja kako
bih mogao većinu stvari o njemu da naučim.Molim vas za
neko 'prostije' objašnjenje,ako je moguće,jer o bazama podataka
ne znam ama baš ništa.Ako bi tu mogli da mi napišete neku
literaturu od koje bih mogao da počnem bio bih baš zahvalan.
Da ne bi mučili sve ostale ljude poruke možete da mi pošaljete
na mail drpr.
Još jednom hvala u napred!
drpr
PS
Ja posedujem knjigu Razvoj aplikacija u Clipper-u od Vlade
Markovića.Neznam da li da krenem od nje.
clipper.94lazo,
Pitanje za one koji su imali prilike da rade sa Clipper grafičkom
bibliotekom koja se nalazi na Sezamu (CLIPGR12.ZIP). Kad dodam linkeru još i
clipgraf.lib datoteku tj. pri linkovanju TLINK prijavljuje slijedeću grešku:
Undefined Symbole '_GR_INFO' in module CLIPGR51.C
Undefined Symbole '_OUTPUT_REGS' in module CLIPGR51.C
Probao sam i sa PLINK-om i sa MS LINK-om i oni su najavljivali nešto slično.
Inače program kad se linkuje radi bez problema. Mene interesuje da li se to
dešavalo još nekom koje bar probao da radi s ovom bibliotekom ili je možda
došlo do neke greške u prenosu, a da je pritom nije detektovao ni
komunikacioni program, odnosno modem, a ni zip?
Pozdrav, Mickey.
clipper.95dnikolic,
>> Ja posedujem knjigu Razvoj aplikacija u Clipper-u od Vlade
>> Markovica.Neznam da li da krenem od nje.
Mislim da je najbolja knjiga koja se koda nas moze kupiti od Strale-a ( xe xe,
mislim da se nekako ovako zove ), a imas je u knjizari u Albaniji ( mislim na
zgradu ) po ceni od oko 1200 Din. Neces se pokajati.
dn
clipper.96gww.,
> Ako linkujete DOS linkerom (ili onim iz MSC 6.0)
>dobijate poruke u stilu :
> Error 2002: fix-up overflow ,bla,bla...
>a program ponekad radi, ponekad ne.
Da pitanje u kom memorijskom modelu je isporučena clipperova biblioteka?
Verovatno u large.
P.S. Nisam clipperista, samo posmatrač.
GWW.
clipper.97ppekovic,
>> Mislim da je najbolja knjiga koja se koda nas moze kupiti od Strale-a ( xe
xe
>> mislim da se nekako ovako zove ), a imas je u knjizari u Albaniji ( mislim
na
>> zgradu ) po ceni od oko 1200 Din. Neces se pokajati.
Straley-eva knjiga je prilicno dobra uz dve napomene:
Napomena 1. Knjiga nije bas udzbenik koji ce pocetnika
u oblasti baza podataka uopste, voditi od osnovnih pojmova
nadalje. Knjiga je za one koji su savladali osnovne korake u
clipper-u i naucili i razumeli osnovne pojmove o bazama uopste.
Napomena 2. knjiga je za Clipper verziju summer '87.
Mislim da bi coveku bilo lakse da odmah krene sa clipper-om
5.01 posto on dozvoljava programiranje koje je mnogo blize
pascal-u nego sto je to slucaj sa '87 verzijom.
Primedba: Nije red kritikovati nesto a ne umeti dati
resenje, ali ja resenje zaista nemam. Jednostavno, ne postoji
knjiga pocetnica za clipper.
I jos da dodam o knjizi črazvoj aplikacija u
clipper-u" g. Markovic-a. Knjiga je najgora knjiga koju sam u
zivotu uzeo u ruke. Ovo je moje subjektivno misljenje, premda,
ako neko zeli da pokaze suprotno, spreman sam izneti i veliki
broj argumenata za to. Sada me jednostavno mrzi da pisem jer
mislim da ne vredi na nju trositi tastaturu.
Paya
clipper.98ppekovic,
>> > Ako linkujete DOS linkerom (ili onim iz MSC 6.0)
>> >dobijate poruke u stilu :
>> > Error 2002: fix-up overflow ,bla,bla...
>> >a program ponekad radi, ponekad ne.
>>
>> Da pitanje u kom memorijskom modelu je isporučena clipperova biblioteka?
>> Verovatno u large.
U pravu si, u pitaju je LARGE model.
Paya
clipper.99bulaja,
│Zeleo bih da ucim clipper pa bih zeleo da mi neko ukratko objasni cemu
│clipper sluzi i da li su mi potrbana neka veca predznanja kako bih
│mogao vecinu stvari o njemu da naucim.
└───
Sluzi za razne poslove / programe koji rade sa bazama podataka. Da bi
naucio sam Clipper kao programski jezik nije potrebno mnogo truda,
ukoliko imas predznanje iz nekog drugog programskog jezika, tj. opste
znanje o programiranju. To se narocito odnosi na verziju S87 koja je
uglavnom zasnovana na dBase III+ dijalektu tj. prilicno jednostavna,
dok je Clipper 5.01 nesto zakomplikovan pa bolje kreni od S87. Ali sa
samo naucenim jezikom slabo ces uraditi ista vredno - bice ti potrebno
dosta znanja i iskustva u dizajniranju baza podataka, pa se zato odmah
u pocetku zapitaj koji ce ti sve to i da li zaista zelis time da se
bavis. Neki Clipper spominju i kao jezik za opstu upotrebu, ali on
nije to - suvise je slab na mnogim poljima. Zato ako samo zelis da se
bavis programiranjem onog sto ti padne napamet, nemoj razmisljati o
Clipperu - ili ostani na TPascalu (sjajan jezik, i ja sam tako poceo ;)
ili predji npr. na C (sto ce ti verovatno savetovati vecina ljudi
ovde). Clipper je samo neko privremeno, medjuresenje (cak i za baze
podataka) - evo npr. ja se posle skoro tri godine rada u njemu trudim
da ga se otkacim (u korist C-a).
│Ako bi tu mogli da mi napisete neku literaturu od koje bih mogao
│da pocnem bio bih bas zahvalan.
└───
Najbolje sto mozes da nadjes kod nas je "Programiranje na Clipper-u"
S.Straley-a (original Addison Wesley, prevod Mikro Knjiga). Odnosi se
na S87, ali posto ti i preporucujem da krenes od S87 verzije onda ce
ti knjiga odgovarati. Inace na tu knjigu imam dosta zamerki, ali
posluzice ti.
Pozdrav,
Bulaja
clipper.100drpr,
Prvo da se zahvalim dnikolicu i ppepkovicu na odgovorima ali
kako svaki početnik ima ono glupo pitanje a to je :
Da li postoji neka knjiga iz koje da počnem možda nevezana za
clipper uz pomoć koje bih mogao da zaplovim i u vode clippera
ili da jednostavno uzmem te koje ste preporučili pa da se bijem
s njima i da kopam i probam te što mi nije jasno da pitam vas?
Još jednom hvala!
drpr
clipper.101zkehler,
Ŕ Primedba: Nije red kritikovati nesto a ne umeti dati
Ŕ resenje, ali ja resenje zaista nemam. Jednostavno, ne postoji
Ŕ knjiga pocetnica za clipper.
Nisu početnice, ali su dobre ove dve knjige:
"Clipper Programming Guide", Rick Spence,
2nd Edition, Microtrend Books, 1991: ISBN 0-915391-41-4
"Clipper Developer's Library", James Occhiogrosso,
Microtrend Books, 1991: ISBN 0-915391-39-2
ZK
clipper.102ppekovic,
>> Clipper je samo neko privremeno, medjuresenje (cak i za baze
>> podataka) - evo npr. ja se posle skoro tri godine rada u njemu trudim
>> da ga se otkacim (u korist C-a).
Cinjenica je da je Clipper '87 bio veoma ogranicen, premda i za njega bas
ne vazi sasvim ovakva tvoja primedba (privremeno resenje). Medjutim, pojava
Clipper-a 5 otklanja svaku sumnju u Clipper kao ozbiljan alat za baze podataka.
Paya
.s
clipper.103ppekovic,
>> Da li postoji neka knjiga iz koje da počnem možda nevezana za
>> clipper uz pomoć koje bih mogao da zaplovim i u vode clippera
>> ili da jednostavno uzmem te koje ste preporučili pa da se bijem
>> s njima i da kopam i probam te što mi nije jasno da pitam vas?
Pa izgleda ti je ipak ostao Straley. Naravno, za sve sto ti nije jasno, tu
smo, uostalom, za to Sezam i sluzi. Samo napred!
Paya
clipper.104dnikolic,
>> Da li postoji neka knjiga iz koje da pocnem mozda nevezana za
>> clipper uz pomoc koje bih mogao da zaplovim i u vode clippera
>> ili da jednostavno uzmem te koje ste preporucili pa da se bijem
Uzmi ti lepo prvo neku knjigu o DBase III Plus, pa to savladaj. Kasnije ce
ti rad sa Clipperom biti vise nego lak. Poceti direktno sa Clipperom je kao
da odmah sednes u Formulu 1, a cak ni vozacki ispit ne polozis.
dn
clipper.105drpr,
E brate jeste carevi!
Govorio meni alias darone za ovakve stvari na sezamu ali ja
nisam verovao!Toliku pomoć ne bi dobio ni u crvenom krstu!
Elem dosta šale,o svim odgovorima ću razmisliti pa ako krenem
da radim i imam neke probleme javiću se.Još jednom hvala svima
na srdačnoj pomoći i van očekivanja iscrpnim odgovorima
,and si ju. :))
drpr
clipper.106zkrstic,
Knjigu od g. Markovića - BACI!
PazarPriručniÚĆk za DBASE III i Programiranje u
Clipperu (oba izdanja od mikroknjige-rakovica)
i pali :)
Pozdrav čeljko
clipper.107dmihajlo,
ARHIVIRANJE PODATAKA
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
APEL:
Problem smatram dovoljno univerzalnim da bi se njegovo
elegantno rešenje moglo primeniti kao jedan od modula u
svim ozbiljnim CL aplikacijama. Iskusni CL programeri su
ga verovatno rešili. Odazovite se...
UKRATKO:
Problem je kako zapakovati i kopirati "nepotrebne"
datoteke koje mogu biti duže od kapaciteta diskete, na
diskete i/ili strimer, i to sve iz CL programa?
Ima li neko program SHROOM za svapovanje RAM-a na disk?
Kako da ga nabavim?
Kako da dobijem errorlevel koji po izvršavanju npr. "RUN
PKZIP" vrati PKZIP ako nešto nije obavio kao treba?
SITUACIJA (NA ŠIROKO):
Svaka ozbiljna aplikacija mora da reši problem gomilanja
podataka. Za neko vreme nakupi se dovoljno podataka da
disk, ma koliko veliki bio, postane zagušen "nepotrebnim"
podacima.
Zbog toga se "nepotrebni" slogovi izdvajaju i smestaju na
neku pomoćnu (DBF) datoteku. Ali i pomocna datoteka
zauzima prostor na disku, pa je povremeno treba zapakovati
i pohraniti na neki drugi medij (traku, diskete...). To
treba obaviti tako da bude moguće vraćanje obrisanih
slogova sa npr. diskete u aktuelnu bazu podataka, ukoliko
se ukaže potreba.
Napravio sam rutinu u CL87 koja između ostalog poziva
PKZIP arhiver koji je trebao privremene datoteke da
zapakuje, zatim sam ZIP paket kopirao na diskete.
Jos pre sam napravio i program u TP6 koji rastavlja ZIP
datoteke na vise datoteka koje nisu duže od slobodnog
prostora na disketi... a onda se pojavio ARJ i ZIPOFF...
PROBLEM:
Međutim! Kada se pokrene CL program, ostane (pre)malo
memorije za PKZIP (treba mu 85K) koji sam pokretao RUN
naredbom. Neće da radi! Kaže: "Too big to fit...". ARJ
program zahteva još više meorije (oko 280K). Znači malo je
koristi od RUN naredbe.
MOGUĆE REŠENJE (R:), ODGOVARAJUĆE PITANJE (P:) I KOMENTAR (K:)
R: U dokumentaciji od ARJ 2.21a spazih čarobnu stvar:
program SHROOM, koji kad se pozove iz nekog programa,
svapuje RAM na disk i oslobodi ga za pokretanje drugog
programa (npr ARJ)
P: Ima li neko taj program ?
K: IDEALNO REŠENJE! Baš ono što treba za RUN iz CL...
R: Pokušati osloboditi memoriju pravljenjem overleja!
P: Da li se pravljenjem overleja može osloboditi dovoljno
memorije za uspešno korištenje "RUN PKZIP..."?
K: Znam, znam... Probaću, pa ću videti! Osim ako neko već
nije probao pa video? Valjda će mi uštedeti trud i vreme?
R: Kombinovati CL i BAT programe: BAT poziva CL koji poziva
BAT (radi zipovanja), a ovaj opet poziva CL sa parametrom
koji kaže nešto u smislu: "nastavi gde si stao..."
P: Da li je moguće da nepostoji ništa drugo???
K: Samo to ne! Samo to ne... Ovo bi bilo samoubistvo...
PRETPOSTAVKA:
Pretpostavka je da program koristi "idiot-korisnik",
odnosno da ne zna da koristi DIR, BACKUP, PKZIP ...
Zato je neophodno da korisniku iz CL programa poručujem:
"Ubaci praznu disketu i pritisni bilo sta...", odnosno
"Disketa nije prazna, ubaci drugu..." i sl.
Osim toga vodim evidenciju o arhiviranim datotekama, a
korisnik se na osnovu nje odlučuje (izabere nešto pomoću
DBEDIT) koju datoteku želi da dearhivira.
Zato je neophodno da se sve obavi iz CL programa.
BoMi
clipper.108ppekovic,
>> Međutim! Kada se pokrene CL program, ostane (pre)malo
>> memorije za PKZIP (treba mu 85K) koji sam pokretao RUN
>> naredbom. Neće da radi! Kaže: "Too big to fit...". ARJ
>> program zahteva još više meorije (oko 280K). Znači malo je
>> koristi od RUN naredbe.
Nećeš verovati kako je jednostavno rešenje za tvoj problem.
Pre startovanja tvog clipper programa stavi jedno:
SET CLIPPER = R85 za ZIP ili
SET CLIPPER = R280 za ARJ i gotovo.
U stvari, napravi jedan batch fajl kojim će se startovati tvoj
program a u kome će prva komanda biti set clipper ...
No, nije sve to tako lepo kao što izgleda. Naime, korišćenje
ARJ-a i ZIP-a je ok. rešenje za interno korišćenje programa, ali
ako taj program prodaješ dalje, ne treba zaboraviti da ni ARJ ni
ZIP nisu PD programi.
Jedno vreme sam hteo da napravim svoj arhiver koji će da deli
arhivu na više disketa vodeći računa o slobodnom prostoru na
disku, kao što to radi opcija -vva iz ARJ-a. Međutim, pojavila su
se dva problema:
1. Pisati arhiver u clipper-u je zamorno, a sam program će
biti veoma spor.
2. S druge strane, mogu ja napisati arhiver u C-u, ali, zbog
problema oko povezivanja Clipper-a i C-a, nemogu integrisati
glavni program sa arhiverom, a ne dopada mi se da arhiver pozivam
komandom RUN. Jest da nemam neki jak razlog za to, ali bih ipak
više voleo da mi je sve u jednom EXE-u.
Ako neko ima rešenje, bar idejno, voleo bi da ga čujem.
Paya
clipper.109zkrstic,
>> Problem smatram dovoljno univerzalnim da bi se njegovo
>> elegantno rešenje moglo primeniti kao jedan od modula u
>> svim ozbiljnim CL aplikacijama. Iskusni CL programeri su
>> ga verovatno rešili. Odazovite se...
>> Ima li neko program SHROOM za svapovanje RAM-a na disk?
>> Kako da ga nabavim?
Brate, zaboravi, šanse da to nateraš da radi sa Clipper-om su
ravne nuli.
Tvoju muku sam već doktorirao :(, ubijao sam se i sa SET CLIPPER
i slično, al kada rezervišeš memoriju, (gotovo) redovno ne ostane do-
voljno za program.
U ZIP-u imaš dve verzije, OVERCL je demo, lepo radi ali je
DEMO, pa radi samo dva puta po startovanju programa. SWITCH je zato
carski, radi koliko hoces puta i mali je :) (eto koristi od malog!)
Ako zagusti a ti viči. Dobra kombinacija sa arhiviranjem je
SWITCH i PCBACKUP 4.3, naravno nezaboravi na copyright za PCBACKUP.
Pozdrav, čeljko
file.zipclipper.110bulaja,
│Kako da dobijem errorlevel koji po izvrsavanju npr. "RUN
│PKZIP" vrati PKZIP ako nesto nije obavio kao treba?
└───
Izgleda da Clipper S87 ima nekih problema sa ispitivanjem errorlevela
kod run-a, ja sam skoro pokusavao nesto da provalim i nikako mi nije
vracao poruke o gresci cak i za obicne DOS komande (cd, md, ..).
│P: Da li se pravljenjem overleja moze osloboditi dovoljno
│ memorije za uspesno koristenje "RUN PKZIP..."?
└───
Pravljenjem overleja ces naravno smanjiti maksimalne zahteve za
memorijom svog programa, ali je pitanje da li ce to biti dovoljno za
ZIP. Ali pre nego sto pokusas nesto sa overlay-ima pokusaj i da pre
"run pkzip" zatvoris sve aktivne baze i indekse, mozda ce ti to biti
dovoljno. Ipak ovo nije neko resenje, jer se moze desiti da na nekoj
masini opet nece biti dovoljno memorije.
│R: Kombinovati CL i BAT programe: BAT poziva CL koji poziva BAT (radi
│zipovanja), a ovaj opet poziva CL sa parametrom koji kaze nesto u
│smislu: "nastavi gde si stao..."
└───
Uzas ;).
Ostaje naravno najbolje resenje da se program za arhiviranje pise u
C-u. Cak ne mora da se pise vec samo prilagodi - postoji dosta
arhivera koji su dati u source kodu (npr. na Sezamu ima source LHA
arhivera u \ibmpc\archiver, ili LZW negde u \rsoft) i PD su pa sa te
strane ne bi bilo nikakvih problema. Ostaju opet memorijski zahtevi
tih arhivera - s obzirom da se direktno povezuju sa Clipperom nije im
potrebna memorija i za dodatan command.com koji se ucitava prilikom
RUN. Mozete malo optimizovati koriscenje bafera pa na racun eventualno
sporijeg rada dobiti znatno manje memorijske zahteve. Ovo iz Clippera
nisam radio, ali sam npr. prilagodio za Force algoritam tj. C program
(koristio sa msvojevremeno Turbo C) za LZW kompresiju i radio je lepo,
bez problema. Sa Clipperom mislim (tj. nadam se ;) da ne bi trebalo
predstavljati problem. Ovo se naravno odnosi na verziju S87 na 5.01
sam tek poceo nedavno da radim i nisam jos proucio extend sistem.
Moguce je i mazohisticko resenje da se arhiver pise bas u Clipperu. U
tom slucajo otpadaju svi problemi, ali ce svaki iole bolji algoritam
biti katastrofalno sporo zbog "brzine" Clippera. Ali zato mi je palo
na pamet vrlo trivijalno resenje za kopresiju .DBF datoteka. Moguce je
.DBF konvertovati u neki levi oblik gde se cuvaju samo zaglavlje
(struktura) baze, a nema fiksne duzine ni za stringove (zapisuje se
prakticno samo rtrim(string_field)), numerici bi se konvertovali iz
stringova (kakav je zapis u .DBF) u normalni binarni oblik (integer,
real), uz neku optimizaciju i logicka polja u jedan bit (tj. bajt ali
ukoliko ima vise logickih polja ona bi se spakovala u taj bajt). Ovde
bi mogle da se ostvare solidne ustede narocito zbog stringova koji su
u 99% slucajeva polupopunjeni zbog hipoteticke maksimalne vrednosti.
Ovakvu proceduru ne bi bio nikakav problem izvesti, uz neki trivijalni
algoritam za kompresiju bi se verovatno dobili sasvim pristojni
rezultati. Pokusacu ovih dana da uradim takvo nesto u Clipperu i
javicu rezultate.
Bulaja
clipper.111hercog,
Da li neko zna zbog cega clipper 5.01 ponekad pri in-
deksiranju datoteke obrise tu datoteku (strukturu i po-
datke ) a ostav njeno ime na disku.
2. da li je nekome poznt razlog blokiranja clippera 5.01
kod naredbe release
Hercog
clipper.112dejanr,
>> 2. S druge strane, mogu ja napisati arhiver u C-u, ali, zbog
>> problema oko povezivanja Clipper-a i C-a, nemogu integrisati
>> glavni program sa arhiverom, a ne dopada mi se da arhiver pozivam
>> komandom RUN.
Zar su problemi toliki? Koliko sam shvatio, može se uzeti C 5.1.
Dakle, arhiver na asembleru?
clipper.113dejanr,
>> Međutim! Kada se pokrene CL program, ostane (pre)malo
>> memorije za PKZIP (treba mu 85K) koji sam pokretao RUN
>> naredbom. Neće da radi!
Ja radim nešto mnogo manje elegantno, ali uradi posao. Naime,
osim nekakvog glavnog programa koji se bavi "obradom" podataka,
napravim odvojen program ARHIVA za prenošenje na diskete. Taj
nije na Clipper-u, i bez problema zove ZIP kad mu treba.
Do sad se niko nije bunio.
clipper.114hercog,
Moj savet ti je da nabavis Clipper 5.01 i da s njim
pises programe.Koristeci njega moci ces da pokrenes
pkzip i sl programe jer se sam svapuje na disk ako
nema dovoljno rama . Ja sam napisao program od oko
620 kb pa mi se iz njega sasvim lepo startuju jos neki
programi/
pozdrav Hercog
clipper.116dmihajlo,
Zahvaljujem svima na odgovorima i pomoci!
Najvise mi odgovara resenje zkrstica (5.109), a probacu i CL5.01 po
preporuci Hercoga (5.114). Probao sam i (5.108) od ppekovica. Radi, donekle,
ali sam uz put otkrio i bag u CL87: posle memory(0), ne radi RUN ... pod
MS DOS 5.0. (vidi fail "bag").zip").
HVALA!
BoMi
bag.zipclipper.117ppekovic,
>> Zar su problemi toliki? Koliko sam shvatio, može se uzeti C 5.1.
Na zalost ja nemam MSC 5.1, ali ako neko ima, i ako ga ne
mrzi, ima u rsoft dir-u C source lzw arhivera (r071lzw.zip (?)).
>> Dakle, arhiver na asembleru?
Da, i neko koga ne mrzi to da pravi na assembler-u.
Da neko slucajno nezna za neku biblioteku (posto ih za clipper
ima gomila raznoraznih) koja ukljucuje funkcije za backup?
Paya
clipper.118vili,
Postoji li nacin da se ALERT() ne pojavljuje na sredini
ekrana, vec tamo gde ja to hocu (eto bas hocu..)
clipper.119ndragan,
/ (struktura) baze, a nema fiksne duzine ni za stringove (zapisuje se
/ prakticno samo rtrim(string_field)), numerici bi se konvertovali iz
to se u foks prou kaže 'copy to druga type delimited with tab'. ja za
arhiviranje iz foksa koristim sledeću logiku: program mi generiše arhiva.bat
i to na lokalnom disku (zbog mreže) i to negde na vrh path liste (obično DOS
direktorij); arhiva.bat poziva ZIP, BACKUP, javlja operateru šta da napiše na
disketu itd. Na ekranu mu ostavim poruku "OTKUCAJ REž ARHIVA <<enter>>"; otkako
se pojavio KEYBUFF i to je otpalo - generišem Arhiva.bat, uradim Clear All,
Run Keybuff Arhiva žM i Quit - tako da se arhiviranje radi još malo pa
automatski.
Bue_ NDragan
clipper.120lazo,
Jel' neko skonto kako da se switch87 pozove iz program i isovremeno pozove
neki drugi program. Ja sam uspio dobiti samo nešto kao Shell to Dos u raznim
programima, a zatim sa exit se vratiš u program.
clipper.122lola,
│ Jel' neko skonto kako da se switch87 pozove iz program i isovremeno pozove
│ neki drugi program. Ja sam uspio dobiti samo nesto kao Shell to Dos u raznim
│ programima, a zatim sa exit se vratis u program.
└────
Nisam u mogucnosti da proverim on-line uputstvo (na disketi), a manual
koji imam je od starije verzije. Tek onako po secanju u programu napises
Drswitch(cDosKomanda,cVrstaMemorije,nMem)
Ne secam se vise kako se specificira extended ili expanded memorija, ali
ako ostavis prazno deo programskog imidza ce ici na disk.
Evo ti primera:
Drswitch('lotus','',300)
Drswitch('backup '+source+Drv,'',200)
Vazno je da linkujes header kao prvi obj a switchu7 kao poslednji. Na
primer:
tlink header7+obj1+obj2+..+switchu7,prog,,CLIPPPER+EXTEND+ lib3 ...
Napomena 1: Do sada nisam imao problema kada sam DRSWITCH koristio sa
Clipper 5.01, bez obzira da li je dinamicko alociranje memorije ukljuceno
ili iskljuceno.
Napomena 2: U uputstvu za stariju verziju DRSWITCH pise da je komanda
RUN DRSWITCH DosKomanda
na primer:
RUN DRSWITCH EDIT MYFILE.PRG
clipper.123zkrstic,
Obzirom na brojna pitanja u vezi raznoraznih programa za pristup
virtuelnoj memoriji, evo par pojašnjenja.
Problem br. 1
Autor swap-a i overlay-a je izvesni Greg A. Martin. Programi su
sjajni, lepo rade, posebno OVERLAY, ali... Nama (meni) su dostu-
pne samo demo verzije, koje su ograničene na 2 odnosno tri izvr-
šenja nakon startovanja programa. Sa čovekom se nemože stupiti u
kontakt ni telefonom ni pismom.
Problem br. 2
Obzirom da za iole ozbiljniji rad ostaje najlošiji među njima, tj.
SWITCH87, čovek koji je probao da radi sa ostalima navikao je na
sintaksu: Result=SWAP(kb,prog) ili kod overlay-a,
Result = OverLay(Program, Memory, Prompt,Pathname, Filename,
Restoredir)
Kod SWITCH-a je sintaksa sledeća: Result = Switch87("prog",kb)
prog - naziv programa na koji se prenosi izvršenje
kb - iznos memorije u kb koji se oslobađa na disk. Ukoliko
je 0, oslobađa se maksimalno moguća količina memorije.
SWITCH radi n-puta po startovanju programa i to mu je jedina prednost
u odnosu na gore pomenuta dva programa. Zna i da blokira računar, al' to is-
ključivo zavisi od ploče i konfiguracije. S toga, ukoliko je ikako moguće
koristite overlay(), jer je najbolji.
Nadam se da sam sad pojasnio u čemu je štos. Kome zatreba još neki
podatak, nek' me izvoli mailovati. :))
Pozdrav, čeljko
P.S.
žim nađem source-ove iz Crvenog signala (moji programi) poslaću ih
jer bi mogli biti dobri kao primeri, iako su matori.
clipper.124lazo,
Zahvaljujem, pomoglo je.
clipper.125ppekovic,
>> Međutim! Kada se pokrene CL program, ostane (pre)malo
>> memorije za PKZIP (treba mu 85K) koji sam pokretao RUN
>> naredbom. Neće da radi! Kaže: "Too big to fit...". ARJ
>> program zahteva još više meorije (oko 280K). Znači malo je
>> koristi od RUN naredbe.
Pre izvesnog vremena si bas od mene dobio odgovor da je veoma
lako resiti ovaj problem setovanjem environment variable clipper
na sledeci nacin:
SET CLIPPER=r:280
To je sasvim tacno, ali samo za verziju '87. Posto sam, otkada
sam presao na 5.01 koristio RUN komandu samo za neke sitnije
programe, nisam pokusavao pomenuti problem da resim na Clipper-u
5.01. Medjutim, danas sam naleteo na taj problem i po inerciji
otkucao set clipper ... ali! program i dalje prijavljuje out of
memory ...
Pogledam lepo sta pise za varijablu clipper kad tamo ni traga
ni glasa nekadasnjem R, a zamene nigde.
Dakle, jel zna neko resenje za malo vece programe, komandu RUN
i clipper 5.01?!
Paya
clipper.126hercog,
Da li neko zna zbog cega clipper 5.01 ponekad pri in-
deksiranju datoteke obrise tu datoteku (strukturu i po-
datke ) a ostav njeno ime na disku.
2. da li je nekome poznt razlog blokiranja clippera 5.01
kod naredbe release
Hercog
clipper.127bstevan,
>> Nisu početnice, ali su dobre ove dve knjige:<<
Dali se zna gde se mogu nabaviti ?
---POZDRAV---
---BSTEVAN---
clipper.128bstevan,
Ovim javljanjem želim da predstavim funkciju MYBROW().
Sam naziv podseća na funkciju BROWSE(), i sve komande iz BROWSE()
rade i u MYBROW().
Razlika je sada što nema više dosadnih poruka poput
bof,eof,Record itd.
Ali nebih zauzimao više ovde prostora o funkciji
MYBROW(), dovoljno je skinuti datoteku mybrow.zip, i videti šta
pruža funkcija MYBROW().
Sva ostala uputstva u vezi funkcije MYBROW(), možete
pročitati u nekom editoru iz fajla readme.txt,a sam rad funkcije
startovanjem demo.exe -fajla.
Način pozivanja funkcije MYBROW(),možete videti iz
demo.prg -fajla.
---POZDRAV---
---BSTEVAN---
mybrow.zipclipper.129ppekovic,
>> Ovim javljanjem želim da predstavim funkciju MYBROW().
>>Sam naziv podseća na funkciju BROWSE(), i sve komande iz BROWSE()
>>rade i u MYBROW().
Pošto je bstevan propustio da kaže, datoteka prikačena uz poruku 5.128 je
demo verzija funkcije mybrow(). Za kompletnu verziju se treba obratiti autoru,
a dobiće se verovatno uz izvesnu materijalnu nadoknadu.
Paya
clipper.130nbatocanin,
Kakva su vam iskustva sa novim Clipper-om? Interesuje me na kakve
probleme nailazite. Ja sam veoma zadovoljan. Svi moji stari programi
sada bez greske rade, a jedan veoma veliki (oko 900K EXE) radi i
bolje (S'97 mi je pravio neke probleme, a 5.01 to savrseno radi).
Ja sam naisao na sledece probleme:
1. Kada se sa DOS-om 5.0 stavi direktiva DOS=HIGH, a program linkuje
sa PLL opcijom, Clipper javlja da je los format datoteke. Kad se
izbaci DOS=HIGH, sve savrseno radi.
2. Postoji odredjena nekompatibilnost u sintaksi koja je morala da
usledi zbog veoma klimave sintakse starog Clipper-a. Na primer:
SUM ALL (x+y)*z TO s
Ovde nije jasno da li treba sabrati izraz (x+y)*s za sve slogove ili
All(x+y)*s - tj. da li je ALL funkcija ili oznaka za scope. Zato sad
treba pisati:
SUM (x+y)*z TO s ALL
3. Desava se da se program veoma nekontrolisano ponasa - da gubi
vrednost nekih promenljivih, ... - a da sve nestane nekom trivijalnom
intervencijom kao sto je promena naziva promenljive. Uzrok jos nije
otkriven, ali mi lici na neke bagove verzije S'87.
Pozdrav, Nenad
clipper.131hercog,
Evo ti jos nekih , cini mi se , bagova clippera 5.01
1. Blokira kod izvrsavanja naredbe release
2. Ponekad pri indeksiranju datoteke izbrise sadrzaj te
datoteke i njenu strukturu , na disku ostavi samo njeno
ime.
3. ima toga jos al ne mogu sada da se setim
pozdrav Hercog
clipper.133ppekovic,
>> Kakva su vam iskustva sa novim Clipper-om? Interesuje me na kakve
>> probleme nailazite. Ja sam veoma zadovoljan.
I ja sam uglavnom zadovoljan osim jedne sitnice (?). Pogledajte
sledeći program:
use baza
č 10,10 get prvo
č 12,10 get drugo
read
? prvo
? drugo
use
Kreirajte DBF baza sa poljima:
PRVO C 10
DRUGO N 8 2 // mogu i druge definicije
i ubacite jedan proizvoljan zapis.
Po startovanju programa ćete dobiti dva GET-a. Promenite vrednost
bilo kog od njih, pređite na drugo polje i pritisnite ESC.
AHA! iako je pritisnut ESC, vrednost polja je promenjena! To
zahteva da se get/read uvek radi sa memorijskim promenljivima, pa da
se ispituje da li je pritisnut ESC pa ako nije da se vrednosti
memorijskih promenljivih prebace u bazu.
Paya
clipper.134ppekovic,
Međutim, ja sam nailazio na mnogo veće probleme sa DEBUGER-om nego
sa samim compiler-om. Konkretno, vrlo često mi se desi da se u sred
rada source izgubi sa ekrana. Tj. brojevi linija su tu, trace lepo
radi i ide po pravimlinijama, ali teksta nema. To se dešava kada u
sred programa pređete u neki drugi direktorijum, što se može rešiti
stavljanjem punog path-a za program, ali dešava se i u drugim
slučajevima koje je teško rešiti. Jedan od takvih je kad naiđem na deo
za štampanje tj. komande set device to printer. Onda debuger poludi.
Gubljenje source-a mi se dešavalo i u još nekim slučajevima kod
kojih nisam uspeo da otkrijem zbog čega se to desilo.
Dalje, Debuger ima probleme sa dužim modulima. Tj. čim je modul
duži od xx K, kaže da nemože da ga svari.
Paya
clipper.135beki,
Ja sam dusom i telom Clipperas ali jedan moj dobar prijatelj koji
nema modem i nije na Sezamu zamolio me je da uputim sledece pitanje do
FoxPro-ovaca dusom i telom:
Kakva su iskustva sa FoxPro V2, sa Distribution Kit-om,
sa C-API za FoxPro V2 i sa svim ostalim sto ide uz njega.
Unapred hvala od mene i od mog prijatelja Dragana
Beki
clipper.136vili,
>
> 1. Blokira kod izvrsavanja naredbe release
Kod mene RELEASE savrseno dobro radi!
_
O
/|\
/ \
clipper.137vili,
> AHA! iako je pritisnut ESC, vrednost polja je promenjena!
Mislim da je to namerno tako uradjeno i da to nije "bug".
It's not a bug, it's a feature!. Uostalom u manualu pise:
ESC - Terminate READ without saving current GET
^^^^^^^
> To zahteva da se get/read uvek radi sa memorijskim
> promenljivima, pa da se ispituje da li je pritisnut ESC pa
Mislim da je tako sigurnije. U manualu se predlaze nesto slicno ovome:
USE baza
memvar->podatak = baza->podatak
@ 10,10 GET memvar->podatak
READ
IF (LASTKEY() != K_ESC) .AND. UPDATED()
REPLACE baza->podatak WITH memvar->podatak
ENDIF
_
O
/|\
/ \
clipper.138vili,
Nedavno sam download-ovao:
The 3PX Clipper Extended Functions Library, Version 5.0
Ta biblioteka je za Clipper Summer'87. Uz tu biblioteku se nalazi i
DEMO program. Probao sam da taj DEMO kompajliram i linkujem sa
CLIPPER 5.01, ali nije islo. Tj. DEMO.PRG se bez problema kompajlira,
ali RTLink javlja sledece:
warning wcl0001:Linking Clipper Summer'87 module 'XMENU' with Clipper5.0 linker
warning wcl0001:Linking Clipper Summer'87 module 'XMISC' with Clipper5.0 linker
warning wcl0001:Linking Clipper Summer'87 module 'XSTRING' with Clipper5.0
linker
UNDEFINED SYMBOL(S) AFTER LIBRARY SEARCH:
SYMBOL FIRST REFERENCE
------ ---------------
'_VSTD' 3PX.LIB
'SUMMER87' 3PX.LIB
Kako taj DEMO da linkujem sa CLIPPER-om 5.01?
Da li je to uopste moguce? Koje opcije za compiler i linker da upotrebim?
P.S. Mene, ustvari, interesuju samo funkcije za rad sa misem.
Kako da pokrenem misa u svojim aplikacijama?
_
O
/|\
/ \
clipper.139zkrstic,
> Kako taj DEMO da linkujem sa CLIPPER-om 5.01?
> Da li je to uopste moguce? Koje opcije za compiler i
> linker da upotrebim?
Samo sa Clipperom 87. S njim radi. A i nije nešto :(
> P.S. Mene, ustvari, interesuju samo funkcije za rad sa
> misem. Kako da pokrenem misa u svojim aplikacijama?
Bejaše neki lib na tanjugu, al' ja nikad nisam uspeo
da ga skinem jer je bag u zipu :(((
Pozdrav, čeljko
clipper.140ppekovic,
>> Mislim da je to namerno tako uradjeno i da to nije "bug".
>> It's not a bug, it's a feature!. Uostalom u manualu pise:
>>
>> ESC - Terminate READ without saving current GET
Sve je to lepo al je lepše bilo onako kako je radio '87. OK. je da radiš sa
mem. promenljnivima kada umećeš novi slog, ali kada ispravljaš postojeći,
lčakše je direktno sa poljima u bazi, pa ako stisneš esc, sve ostane kako je,
ako izađeš legalno, promene se automatski zapišu i super!
Paya
clipper.141ndragan,
/ lčakše je direktno sa poljima u bazi, pa ako stisneš esc, sve ostane
/ kako je,
Ne ostaje - ako izmenjaš šest polja, a na sedmom zvizneš iskejp, prvih šest
je već zapisano. I za ovo je bolje raditi sa memorijskim kopijama.
Bue_ NDragan
clipper.142zdimic,
Hitno mi je potreban razvojni sitem za clipper (87 ?) pod nazivom UI,
a cujem da postoji i neki jos mocniji sys za clipper 5.
U razmenu nudim npr. Fox pro 2.0, gomilu LIBs za clipper itd.
Hvala,
Zoran
clipper.143ppekovic,
>>/ lčakše je direktno sa poljima u bazi, pa ako stisneš esc, sve ostane
>>/ kako je,
>>
>>Ne ostaje - ako izmenjaš šest polja, a na sedmom zvizneš iskejp, prvih šest
>>je već zapisano. I za ovo je bolje raditi sa memorijskim kopijama.
Znam da to tako sada radi, ali sam rekao da bi bilo bolje drugacije, tj.
onako kako je radio clipper '87 (?).
Paya
clipper.144lazo,
Hello everybody!
Moj problem je slijedeći: u DBEDIT() funkciji pri pozivanju
korisničke funkcije se prenose dva parametra "status" i
"fld_ptr". Ovaj drugi ukazuje na tekuće polje u strukturi
datoteke kojem se može pristupiti upotrebom funkcije
FIELD(). Ovo piše u knjizi. Po meni, ovaj parametar je
numerik i sadrži redni broj sloga, kome onda pomoću funkcije
FIELD(red_br_polja) pristupam tj. editujem ga. Problem sam
riješio tako što sam postavio varijablu koja se uvećava,
odnosno umanjuje pri pomjeranju kursorske strlice. U
ovisnosti od tog broja pristupam odgovarajućem polju.
Slabost ovoga je kad neko pritisne recimo tipku za
pomjeranje u desno i ne pušta dok na ekranu ne dobije
željeno. U tom slučaju obavezno se desi da je broj koji se
uvečava za jedan manji od stvarne pozicije. Kada bih mogao
očitati sadržaj pomenutog parametra to se, pretpostavljam,
ne bi dešavalo i smanjio bih svoju funkciju za 10-tak
(ne)potrebnih IF-ova.
Prema tome, zna li neko kako da se preuzme vrijednost iz
ovog parametra (fld_ptr).
Mickey.
clipper.145nbatocanin,
> 2. Ponekad pri indeksiranju datoteke izbrise sadrzaj te
> datoteke i njenu strukturu , na disku ostavi samo njeno
> ime.
Ne mogu da verujem! Meni se desavalo da zabrlja kod indeksne
datoteke, ali da izbrise glavnu... Ako imas program koji to radi,
rado bi ga pogledao.
clipper.146nbatocanin,
> To se
> desava kada u sred programa predete u neki drugi
> direktorijum, sto se moze resiti stavljanjem punog path-a
> za program, ali desava se i u drugim slucajevima koje je
> tesko resiti. Jedan od takvih je kad naidem na deo za
> stampanje tj. komande set device to printer. Onda debuger
> poludi.
Mozes u OPTIONS da postavis sve kataloge gde ti se nalaze programi,
pa ces imati brojeve linija. Na primer: \BASE\SYS;\PROG\UK itd. Meni
SET DEVICE lepo saradjuje sa dibagerom.
clipper.147nbatocanin,
> Kod mene RELEASE savrseno dobro radi!
Zasto uopste i koristite RELEASE?
clipper.148nbatocanin,
> P.S. Mene, ustvari, interesuju samo funkcije za rad sa
> misem. Kako da pokrenem misa u svojim aplikacijama?
Postoje najmanje dva resenja. Prvo, da nadjes neku Clipper biblioteku
koja to omogucava (na primer, Flipper, DGE, ...). Drugi nacin je da
sam pravis funkcije za komunikaciju.
clipper.149nbatocanin,
> Ovo pise u knjizi. Po meni, ovaj parametar je
> numerik i sadrzi redni broj sloga, kome onda pomocu
> funkcije FIELD(red_br_polja) pristupam tj. editujem ga.
Drugi parametar u funkciji koju poziva DBEDIT je redni broj KOLONE
koja je trenutno aktivna, pa ce FIELD korektno raditi samo ako su u
DBEDIT-u navedena REDOM polja datoteke. Najjednostavnije resenje je
da definises niz odgovarajucih polja u proceduri u kojoj definises
DBEDIT parametre i kasnije radis na sledeci nacin:
...
PRIVATE Fields[n]
Fields[1] = "IME"
...
PRIVATE Column[n]
Column[1] = "Left(IME, 20)"
DBEDIT (...)
Sada, ako su ti parametri funkcije MODE i INDEX, izraz Fields[Index]
oznacava tekuce polje, a Column[Index] "sliku" polja na ekranu.
clipper.150nbatocanin,
Mislim da mozes veoma lako da promenis GET sistem da radi kako ti
odgovara - pogledaj datoteku GETSYS.PRG.
Pozdrav, Nenad
clipper.151bulaja,
*** new files *** \ibmpc\program\nf*.*
Nanforum Toolkit je velika zbirka raznih funkcija za Clipper 5, a sve su
date u souce kodu (Clipper, C ili ASM). Napisali su je (biblioteku)
korisnici sa Compuserve-ovog Nantucket Foruma (technical support za
Clipper), blah balh ... napisacu nesto vise ovih dana, posto sam upravo
uploadnuo datoteke pa se zasluzeno odmaram sada ;).
Spisak funkcija je poveci, evo ga u sledecoj poruci (nadam se da se niko
nece ljutiti ;) zbog duge poruke, ali ovaj spisak se ne nalazi nigde u
dokumentaciji vec sam ga ja skidao iz NG-a pa ce svima koristiti).
Bulaja.
clipper.152bulaja,
Nanforum Toolkit v2.0
═════════════════════
Array
────────────────
FT_AADDITION() Add elements unique of source array to target array
FT_AAVG() Average numeric values in an array
FT_ADESSORT() Sort an array in descending order
FT_AEMAXLEN() Find longest element within an array
FT_AEMINLEN() Find shortest element within an array
FT_AMEDIAN() Find middle value in array, or average of two middle values
FT_ANOMATCHES() Find the number of array elements meeting a condition
FT_AREDIT() 2 dimensional array editing function using TBrowse
FT_ASUM() Sum the elements of an array
FT_RESTARR() Restore a Clipper array from a disc file
FT_SAVEARR() Save Clipper array to a disc file.
════════════════
Conversion
────────────────
FT_BYT2BIT() Convert byte to string of 1's and 0's
FT_BYT2HEX() Convert byte to hexadecimal version of its binary value
FT_D2E() Convert decimal to scientific notation
FT_DEC2BIN() Convert decimal to binary
FT_E2D() Convert scientific notation string to a decimal
FT_ESCCODE() Convert Lotus style escape codes
FT_HEX2DEC() Convert a hex number to decimal
FT_INVCLR() Get the inverse of a color
FT_NTOW() Translate numeric value to words
FT_SQZN() Compress a numeric value into a character string
FT_STOD() Convert a date string to a Clipper date data type
FT_UNSQZN() Uncompress a numeric compressed by FT_SQZN()
FT_XTOY() Convert from any data type to any other data type
════════════════
DOS/BIOS
────────────────
FT_CHDIR() Change the current directory
FT_DEFAULT() Retrieve and optionally change the current default drive
FT_DOSVER Return the current DOS major and minor version as a string
FT_DSKFREE() Return the amount of available disk space
FT_DSKSIZE() Return the maximum capacity of a fixed disk
FT_FLOPTST() Test diskette drive status
FT_HANDCNT() Count number of available DOS (not network) file handles
FT_INP() Retrieve a byte from a specified I/O port
FT_INT86() Execute a software interrupt
FT_ISPRINT() Check printer status
FT_ISSHARE() Determine if DOS "Share" is installed
FT_MKDIR() Create a subdirectory
FT_OUTP() Write a byte to a specified I/O port
FT_PEEK() Retrieve a byte from a specified memory location.
FT_POKE() Write a byte to a specified memory location
FT_REBOOT() Force a warm or cold boot
FT_RMDIR() Delete a subdirectory
FT_SETDATE() Set the DOS system date
FT_SETTIME() Set the DOS system time
FT_SYSMEM() Determine the amount of conventional memory installed
FT_TEMPFIL() Create a file with a unique name
════════════════
Database
────────────────
FT_FDEC() Return the number of decimals in a numeric (type "N") field.
FT_FEMPTY() Determine if a field is empty, i.e., contains no value.
FT_FEXIST() Check for the existence of a field.
FT_FLEN() Return a field's length.
FT_FNUM() Return a field's ordinal position given the field name.
FT_FPLACE() Write a new value to a field.
FT_FTYPE() Return a field's type, given field name or ordinal position
FT_FVAL() Return the value of a field.
FT_FVALLEN() Return the length of the value in a field.
════════════════
Date/Time
────────────────
FT_ACCTADJ() Adjust beginning or ending fiscal pd. dates to acctg. dates
FT_ACCTMONTH() Return accounting month data
FT_ACCTQTR() Return accounting quarter data
FT_ACCTWEEK() Return accounting week data
FT_ACCTYEAR() Return accounting year data
FT_ADDWKDY() Return true number of days to add given number of workdays
FT_CALENDAR() Display date/time calendar, find a date, return calendar dat
FT_CIV2MIL() Convert usual civilian format time to military time.
FT_DATECNFG() Set beginning of year/week for FT_ date functions
FT_DAYOFYR() Return calendar, fiscal or accounting day data
FT_DAYTOBOW() Calculate no. of days between date and beginning of week
FT_DOY() Find number of day within year
FT_EASTER() Return the date of Easter
FT_ELAPMIN() Return difference, in minutes, between two mil format times.
FT_ELAPSED() Return elapsed time between two days and/or times
FT_ELTIME() Compute difference between times in hours, minutes, seconds.
FT_FDAY() Return first day of the month
FT_LDAY() Return last day of the month
FT_MADD() Add or subtract months to/from a date
FT_MIL2CIV() Convert time in military format to civilian format.
FT_MIL2MIN() Convert time in military format to number of minute of day.
FT_MIN2DHM() Convert numeric minutes to days, hours and minutes.
FT_MIN2MIL() Convert minute of day to military format time.
FT_MONTH() Return Calendar or Fiscal Month Data
FT_QTR() Return Calendar or Fiscal Quarter Data.
FT_SYS2MIL() Convert system time to military time format.
FT_WEEK() Return calendar or fiscal week data
FT_WORKDAYS() Return number of work days between two dates
FT_WOY() Find number of week within year
FT_YEAR() Return calendar or fiscal year data
════════════════
Environment
────────────────
FT_COM3OR4() Enable use of COM3 and/or COM4 on IBM/PC compatables.
FT_DIR2DB() Create .DBF of directory files, using DOS filespec
FT_EXIST() Test for existence of drive and/or subdirectory
FT_GETE() Return the entire current environment
FT_LINKED() Determine if a function was linked in
FT_ORIGIN() Report the drive, path and filename of the executing program
FT_RESTSETS() Restore status of all SET command settings
FT_SAVESETS() Save the status of all the SET command settings
FT_SETCENTURY() Check/Set the CENTURY Setting
FT_TREE() Locate all directories and subdirectories on a drive
FT_WHEREIS() Locate all occurrences of a filespec on a drive
════════════════
File I/O
────────────────
FT_DFCLOSE() Close file displayed by FT_DISPFILE()
FT_DFSETUP() Set up parameters for FT_DISPFILE()
FT_DISPFILE() Browse a text file
FT_FEOF() Determine when end of text file is encountered
FT_FGOBOT() Go to the last record in a text file
FT_FGOTO() Move record pointer to specific record in a text file
FT_FGOTOP() Go to the first record in a text file
FT_FLASTREC() Determine the no. of records in the currently selected text
FT_FREADLN() Read a line from the currently selected text file
FT_FRECNO() Return the current record number of a text file
FT_FSELECT() Select a text file workarea
FT_FSKIP() Move the record pointer to a new position in a text file
FT_FUSE() Open or close a text file for use by the FT_F* functions
════════════════
Game
────────────────
FT_PEGS() FT_PEGS GAME (all work and no play...)
════════════════
Keyboard/Mouse
────────────────
FT_ALT() Determine status of the Alt key
FT_CAPLOCK() Determine and optionally change the status of CapLock key
FT_CTRL() Determine status of the Ctrl key
FT_MBUTPRS() Retrieve button press status
FT_MBUTREL() Get mouse button release information
FT_MCURSOR() Set the mouse cursor
FT_MDBLCLK() Return true if a double click was detected
FT_MDEFCRS() Define the mouse cursor
FT_MGETPOS() Get mouse cursor position and button status
FT_MGETX() Get mouse cursor row position
FT_MGETY() Get mouse cursor column position
FT_MHIDECRS() Decrement internal mouse cursor flag and hide mouse cursor
FT_MINREGION() Test if the mouse cursor is in the passed region
FT_MMICKEYS() Get mickeys
FT_MRESET() Reset mouse driver and return status of mouse
FT_MSETPOS() Position the mouse cursor
FT_MSHOWCRS() Increment internal cursor flag and display mouse cursor
FT_MXLIMIT() Set vertical bounds of mouse travel
FT_MYLIMIT() Set horizontal bounds of mouse travel
FT_NUMLOCK() Return status of NumLock key
FT_PRTSCR() Enable or disable the Print Screen key
FT_PUTKEY() Stuff a keystroke into the keyboard buffer
FT_SCANCODE() Wait for keypress and return keyboard scan code
FT_SETRATE() Set the keyboard delay and repeat rate on PC/AT & PS/2
FT_SHIFT() Determine status of shift key
FT_SINKEY() Replacement for INKEY() that tests for SET KEY procedures
════════════════
Math
────────────────
FT_GCD() Calculate greatest common divisor of two numbers
FT_NETPV() Calculate net present value
FT_RAND1() Generate a random number
FT_ROUND() Rounds a number to a specific place
════════════════
Menus/Prompts
────────────────
@...PROMPT Define a menu item for use with MENU TO
FT_ACH2TB() Replace ACHOICE() with a Tbrowse object
FT_ADDER() Pop up a simple calculator
FT_BLINK() Display a blinking message on the screen
FT_BRWSWHL() Browse an indexed database limited to a while condition
FT_CLRSEL() User Selectable Colour Routine
FT_DISPMSG() Display a message and optionally waits for a keypress
FT_FILL() Declare menu options for FT_MENU1()
FT_MENU1() Pulldown menu system
FT_MENU2() Vertical lightbar menu
FT_MENUTO() Execute light bar menu using prompts created with FT_PROMPT(
FT_PENDING() Display same-line pending messages after a wait.
FT_PICKDAY() Picklist of days of week
FT_PROMPT() Define a menu item for use with FT_MENUTO()
FT_XBOX() Display a self-sizing message box and message
MENU TO Execute light bar menu using prompts created with @...PROMPT
════════════════
NetWare
────────────────
FT_ENDCAP() Cancel a specific NetWare print queue capture
FT_LOGOUT() Logout from all currently connected NetWare file servers
FT_NOVDMP2() Determine Novell server's dynamic memory area 2 availability
FT_NOVPURGE() Purge all deleted files on a Novell server
FT_NWLSTAT() Return the current Novell NetWare logical station number
FT_NWSEMCLOSE() Close a NetWare semaphore
FT_NWSEMEX() Examine a NetWare semaphore's value and open count
FT_NWSEMLOCK() Perform a semaphore "lock"
FT_NWSEMOPEN() Open or create a NetWare semaphore
FT_NWSEMSIG() Signal a NetWare semaphore (increment)
FT_NWSEMWAIT() Wait on a NetWare semaphore (decrement)
FT_NWUID() Return the current Novell NetWare User ID
FT_PFLUSH() Flush a NetWare capture buffer
FT_TTSABORT() Abort explicit and implicit NetWare TTS transactions
FT_TTSAVAIL() Check whether default Novell file server supports TTS
FT_TTSBEGIN() Begin explicit transaction under NetWare's TTS
FT_TTSEND() End explicit or implicit transaction under NetWare's TTS
FT_TTSSTAT() Verify if TTS transaction has been written to disk
════════════════
String
────────────────
FT_AT2() Find position of the nth occurrence of a substring
FT_BITCLR() Clear (reset) selected bit in a byte
FT_BITSET() Set selected bit in a byte
FT_BYTEAND() Perform bit-wise AND on two ASCII characters (bytes)
FT_BYTENEG() Perform bit-wise negation on an ASCII character
FT_BYTENOT() Perform bit-wise NOT on an ASCII character (byte)
FT_BYTEOR() Perform bit-wise OR on two ASCII characters (bytes)
FT_BYTEXOR() Perform bit-wise XOR on two ASCII characters (bytes)
FT_FINDITH() Find the "ith" occurrence of a substring within a string
FT_ISBIT() Test the status of an individual bit
FT_ISBITON() Determine the state of individual bits in a number
FT_METAPH() Convert a character string to MetaPhone format
FT_NOOCCUR() Find the number of times one string occurs in another
FT_PCHR() Convert printer control codes
FT_PROPER() Convert a string to proper-name case
════════════════
Video
────────────────
FT_ADAPTER() Report the type of video adapter installed
FT_CLS() Clear screen
FT_GETMODE() Get the video mode
FT_GETVCUR() Return info about the cursor on a specified video page
FT_GETVPG() Get the currently selected video page
FT_RESTATT() Restore the attribute bytes of a specified screen region.
FT_REVATTR() Reverse colors of specified screen coordinates
FT_REVCHR() Reverse the color of a single character on the screen
FT_RGNSTACK() Push or pop a saved screen region on or off the stack
FT_RSTRGN() Restore region of the screen saved with FT_SAVRGN()
FT_SAVEATT() Save the attribute bytes of a specified screen region.
FT_SAVRGN() Save a screen region for later display
FT_SETATTR() Change color attributes of screen region
FT_SETMODE() Set the video mode
FT_SETVCUR() Set the cursor position on a specified video page
FT_SETVPG() Set the current video page
FT_SHADOW() Draw a non-destructive shadow on the screen
FT_VIDSTR() Display string on screen in specified attribute
FT_WRTCHR() Display character on screen
════════════════
clipper.153hercog,
Meni uglavnom blokira kod release promenljive u koju
je snimljen ekran.
NPR:
save screen to ekran
................
...........
............
restore screen from ekran
release ekran <- ovde blokira
pozdrav Hercog
clipper.154hercog,
A sto je jos veci stos , glavnu datoteku ne izbrise uvek
vec samo ponekad, sto znaci da nekolko puta sve uradi ok,
a sledeci put je zezne.
pozdrav Hercog
clipper.155hercog,
Koja je najbolja biblioteka za Clipper 5.01 koja mu daje
naredbe za grafiku, gde se moze nabaviti i po kojoj ceni.
pozdrav Hercog
clipper.156bulaja,
│save screen to ekran
│................
│...........
│............
│restore screen from ekran
│release ekran <- ovde blokira
└───
A kako je deklarisana promenjljiva [ekran] (public, local, static,...)?
Ako je slucajno static onda nije ni cudo sto se zaglavljuje, a ako je
local (ili private) onda ti release i ovako nicemu ne sluzi.
clipper.157ppekovic,
>> A sto je jos veci stos , glavnu datoteku ne izbrise uvek
>> vec samo ponekad, sto znaci da nekolko puta sve uradi ok,
>> a sledeci put je zezne.
U BGD-u znam puno ljudi koji rade sa novim clipper-om, pratio sam i clipper
conf. na BIX-u, i cuo sa jos mnogo strana, a i sam naisao na neke bug-ove
clipper-a 5.01, ali niko se nije zalio na ono sto se ti zalis. Probaj da nadjes
neku logiku kada se to desava pa da vidimo zbog cega se desava, jer kvarovi
tipa, zeza po nekad, su znas i sam, najgori. S druge strane, uzrok problema
moze biti i cache program npr., ili slicni rezidentni programi.
Paya
clipper.158vkrstonosic,
>> save screen to ekran
>> ................
>> ...........
>> ............
>> restore screen from ekran
>> release ekran <- ovde blokira
Koristi ekran=savescreen(1,1,23,79)
.......
restscreen(1,1,23,79, ekran)
Ovo radi provereno i ne pravi nikakve probleme, a i moguće je
snimiti samo deo ekrana.
clipper.159ndragan,
/ Postoje najmanje dva resenja. Prvo, da nadjes neku Clipper biblioteku
FoxPro sam od sebe radi sa mišem, ako je učitan drajver. No frx.
clipper.160bulaja,
│ekran=savescreen(1,1,23,79)
└─── ^ ^ ^^
(0,0,24,79)
clipper.161vili,
>
> Postoje najmanje dva resenja. Prvo, da nadjes neku Clipper
> biblioteku koja to omogucava (na primer, Flipper, DGE,...).
Gde da nadjem Flipper, DGE,... . Jel to radi sa 5.01?
> Drugi nacin je da sam pravis funkcije za
> komunikaciju.
To ne bih. Nemam vremena da radim nesto sto je neko vec uradio.
_
O
/|\
/ \
clipper.162vili,
Imam UI. Koristio sam ga neko vreme, ali sam shvatio da mi
ne pomaze mnogo. Kasnije sam ga koristio samo za pravljenje
maski za unos. Sad je zipovan i cami na disketi.
Mozda su neki drugi razvojni sistemi bolji, ali ako su kao
UI onda slaba vajda od njih (mislim da je QuickSilver neki
takav sistem za Clipper,a mozda i nije?).
(UIF.zip = 294Kbyte)
_
O
/|\
/ \
clipper.163vkrstonosic,
>> (0,0,24,79)
Oops, navika ;) uglavnom ne koristim ceo ekran.
clipper.164makas,
> A sto je jos veci stos , glavnu datoteku ne izbrise uvek
> vec samo ponekad, sto znaci da nekolko puta sve uradi ok,
> a sledeci put je zezne.
Da ne koristiš slučajno DOS 4.00 i FASTOPEN? Kod njega je
pravio slične brljotine i Clipper '87. Ako je to u pitanju izbaci
FASTOPEN i sve će biti u redu.
Pozdrav
█▀▀▀▀▀▄ ▄▀▀▀█ █▄▀▀ ▄▀▀▀█ ▄▀▀
█ █ █ ▀▄▄ █ █▀▄▄ ▀▄▄ █ ▀▄▄▀▀▄
▄▄▄ ▄▄▄ ▄▄ ▄▄ ▄▄ ▄ ▄ ▄JILL▄▄▄▄▀
clipper.165sveta,
││ ekran=savescreen(1,1,23,79)
│ └─── ^ ^ ^^
│ (0,0,24,79)
└─────
A sta se desava sa 0,60 ; 0,61 ; 0,62 ? Meni ih izbrise
kod prvog GET-a :(.
clipper.166nbatocanin,
> Koristi ekran=savescreen(1,1,23,79)
Pogodi kako se pretprocesira SAVE SCREEN TO Ekran!
clipper.167nbatocanin,
> Probaj da nadjes neku logiku kada se to desava pa
> da vidimo zbog cega se desava, ...
U tome imas nasu nepodeljenu podrsku!
clipper.168nbatocanin,
> Koja je najbolja biblioteka za Clipper 5.01 koja mu daje
> naredbe za grafiku, gde se moze nabaviti i po kojoj ceni.
Ne znam koja je najbolja, ja koristim DGE (bice tekst u novim
"Racunarima"). Cena je VRLO priblizno oko 200-300$, nabavljena je
preko firme u SAD. Na sajmu u Novom Sadu ovu biblioteku je nudila
firma SoftWell (021/51-999).
Gledao sam papire za biblioteku Flipper i mislim da je vredi
pogledati.
clipper.169nbatocanin,
> Gde da nadjem Flipper, DGE,... . Jel to radi sa 5.01?
021/51-999 SoftWell, Da.
clipper.170vkrstonosic,
>>> Koristi ekran=savescreen(1,1,23,79)
>>
>> Pogodi kako se pretprocesira SAVE SCREEN TO Ekran!
Pretpostavljam :)
Jako često koristim savescreen i nikada do sada nisam imao
nikakvih problema.
clipper.171dvidovic,
Ima li ŰOneko iskustva sa "Siserom" (ili kako vec bese)
razv_.ůÚ]ojnim sistemom za Clipper? Ovo pitam u ime
drugara, koji bi da proba to cudo, ali o njemu nista
ne zna. Vredi li truda, para, etc.
Hvala unapred!
Pozdrav Dule
clipper.172nbatocanin,
> A sta se desava sa 0,60 ; 0,61 ; 0,62 ? Meni ih izbrise
> kod prvog GET-a :(.
Postavi na pocetak programa SET SCOREBOARD OFF. Time iskljucujes da
ti se ispisuje status Insert/Overtype.
clipper.173nbatocanin,
> Znam da to tako sada radi, ali sam rekao da bi bilo bolje
> drugacije, tj. onako kako je radio clipper '87 (?).
Jesi li bas siguran? Ja upravo probao i - neces verovati - i Summer
'87 radi isto ovako! Eto neotkrivenog gremlinija u vasim starim
programima!
Pozdrav, Nenad
clipper.174hercog,
Nikako ne mogu da provalim kada se to desi (i zbog cega).
Jedino me program pozdravi sa necim kao CORUPTION DBF SPISAK.DBF.
A sto je najsmesnije clipper me zevzeci sa samo 2 datoteke,mada
se u tom delu programa indeksira jos jedno 6-7 datoteka, a cli-
pper uvek zajebe datoteku SPISAK.DBF ili SPPR.DBF. Vise mi
nista nije jasno.
pozdrav Hercog
clipper.175zkrstic,
Aloooooooo,
Skidajte onaj TS.ZIP iz DEMO direktorijuma
da neko ne vidi, slučajno. Postoji opasnost:
1. Da vidi neki stranac, pa da pomisli kako
ovde niko Clipper vido' nije
2. Da neko, ko želi da uči Clipper odustane od
istog, jer su mu mogućnosti vrlo skromne
3. Neko može slučajno da vidi program pa da umre
od smeha.
Pozdrav, čeljko
P.S.
Tako mi i treba kad sam hteo da špijuniram konkurentske programe
P.P.S.
Umesto da leeepoo chatujem 20 minuta, ja skidam kojekakve kara-
kondžule.
clipper.176lazo,
**> Drugi parametar u funkciji koju poziva DBEDIT je redni
**> broj KOLONE koja je trenutno aktivna, pa ce FIELD
**> korektno raditi samo ako su u DBEDIT-u navedena REDOM
**> polja datoteke. Najjednostavnije resenje je
Ono što meni treba i jeste broj trenutno aktivne kolone
(dobro to ne isključuje silne if-ove koji će onda ukazivati
na određeno polje). Meni je problem što sam rješavanjem
problema sa uvećavanjem I+1 na pritisak kursorske strlice
dobijao trenutno aktivnu kolonu. Problem je kada se drži
konstantno kurs. strelica pa kursor ode polje više nego što
je u stvari uvećana vrijednost promjenljive I. Tako umjesto
da dobijem masku za ispravku tekuće, ja dobijem masku
prethodne kolone na mjestu aktivne (trebalo bi da je
aktivna, ali nije). E moj je problem što ja ne znam kako da
dođem do vrijednosti tog drugog parametra uopšte.
**> Sada, ako su ti parametri funkcije MODE i INDEX, izraz
**> Fields[Index] oznacava tekuce polje, a Column[Index]
**> "sliku" polja na ekranu.
Vjerovatno bi dosad napravio nešto slično što si mi
predložio kad bih ja znao kako uopšte da dođem do
odgovarajućeg parametra, tj. do njegove vrijednosti. Zato
bih te molio da mi ili detaljnije objasniš kako se preuzima
vrijednost iz tog drugog parametra uopšte ili da pošalješ uz
poruku kratak prg (kompletan bez ...) iz koga bi ja onda
shvatio kako se to radi.
Mickey.
clipper.177dpaun,
Clipper braco i sestre!
Da li je neko probao u 5.01 da funkcijom ASORT()
sredi fajlove u direktorijumu, ali prema extenziji?
dPaun
clipper.178nbatocanin,
Nisam mogao da nadjem neki jednostavan primer zato sto dosta dugo ne
koristim DBEDIT funkciju. Ipak, saljem ti nesto i nadam se da ce ti
pomoci. Pogledaj jos jednom u uputstvu.
Pozdrav, Nenad
dbed.prgclipper.179nbatocanin,
PROC Main
d := Directory ("*.*")
aSort (d,,, { |x, y| Ext(x[1]) > Ext(y[1]) } )
// ...
RETURN
FUNC Ext (n)
RETURN IF ( (i := At (".", n)) <> 0, SubStr (n, i+1), "")
Moze ?
clipper.180mandrejevic,
> Nanforum Toolkit v2.0
> ═════════════════════
^^^^
Nece da radi sa Clipperom 5.0 Rev.1.03 ? Ili bar nece od prve.
.RTLink prijavljuje :
UNDEFINED SYMBOL(S) AFTER LIBRARY SEARCH:
SYMBOL FIRST REFERENCE
------ ---------------
'CLIPPER501' NANFOR.LIB
Pozdrav milan (mandrejevic)
clipper.181hercog,
Jos jedna problem sa Clipperom 5.01:
Program sam razbio na 6 datoteka, kako bi se lakse
snalazio. U prvom programu se nalazi lista naredbi:
set procedure to pr1
set procedure to pr2
set procedure to pr3
set procedure to pr4
set procedure to pr5
Ali clipper prevede samo do pr4.
Ako zamenim mesta npr :
set procedure to pr5
set procedure to pr4
onda se kompajler zablokira.
Probao sam sve moguce kombinacije i u svakom slucaju mi
se desavalo isto.
pozdrav Hercog
clipper.182vkrstonosic,
>> Program sam razbio na 6 datoteka, kako bi se lakse
>> snalazio. U prvom programu se nalazi lista naredbi:
>>
>> set procedure to pr1
>> set procedure to pr2
>> set procedure to pr3
>> set procedure to pr4
>> set procedure to pr5
Zašto uopšte tako radiš? Ako je program podeljen u više datoteka,
dovoljno je da u glavnoj (koju prvu kompajliraš), staviš:
do pr1
do pr2
...
Ako ne postoje procedure pod tim imenima, kompajliraće ih sve
redom. Ovo redovno koristim i programi su mi razbijeni na dosta
delova.
clipper.183ndragan,
/ set procedure to pr4
/ onda se kompajler zablokira.
Da nema on neka ograničenja - koliko imena (i to baška lokalna, baška
globalna) ti se dotle nakupi? Koliko ti je duži pr4 od pr5 ili obratno? Nisam
poterao kliper već 4 godine, ali...
clipper.184bulaja,
│set procedure to pr1
│...
└───
A cemu ti sluzi #include ? Ili sto ne koristis make?
clipper.185nbatocanin,
Interesuje me zašto ne koristite neki MAKE? Da li znate koliko to
štedi vreme i olakšava stvari?
clipper.186vkrstonosic,
>> Interesuje me zašto ne koristite neki MAKE? Da li znate koliko to
>> štedi vreme i olakšava stvari?
Razlog je vrlo jednostavan, spremam se da to počnem već godinu
dana, problem je u tome što je uvek danas, sutra nikako ne dolazi ;)
clipper.187dpaun,
Clipper braćo i sestre!
Evo malog primera šta mogu kad se dvoje spoje,
tj. GET i WHEN.
dPaun
get.zipclipper.188lazo,
**> Nisam mogao da nadjem neki jednostavan primer zato sto
**> dosta dugo ne koristim DBEDIT funkciju. Ipak, saljem ti
**> nesto i nadam se da ce ti pomoci. Pogledaj jos jednom u
**> uputstvu.
Thanks, pomoglo je.
clipper.189dnikolic,
Zna li ko po kom algoritmu rade indexi u Cliperu i Dbase-u?
dn
clipper.190dejanr,
>> Zna li ko po kom algoritmu rade indexi u Cliperu i Dbase-u?
Imaš strukturu NTX datoteka u poruci 5.46, ako to nešto pomaže.
Više podataka o tome u knjizi "Clipper Programming Guide",
verovatno ima i na drugim mestima.
Koriste se B-stabla, koliko se sećam.
clipper.191dejanr,
Imao sam jednu bazu sa jako puno polja, čije sam sadržaje unosio sa
@ pozic1 GET polje1 VALID ff (polje1, parametri)
@ pozic2 GET polje2 VALID ff (polje2, parametri)
@ pozic3 GET polje3 VALID ff (polje3, parametri)
itd
ff je nekakva funkcija koja određuje da li uneta vrednost zadovoljava
uslove da se prihvati, u zavisnosti od parametara.
Bilo je, kako rekoh, mnogo polja sa dugačkim imenima, pa nije bilo baš
slatko stalno kucati ono ff (poljeNN) tj. još jednom prepisivati ime
polja koje je svega nekoliko znakova levo. Najzad sam napravio makro
u editoru koji to kao uradi. Zanima me ima li neko "regularno" rešenje
u Clipperu, da se kaže nešto kao VALID ff (ovo_polje, parametri) i da
se to onda odnosi na polje koje je u toj liniji unošeno?
clipper.192kanda,
>> Bilo je, kako rekoh, mnogo polja sa dugačkim imenima, pa nije bilo
>> baš slatko stalno kucati ono ff (poljeNN) tj. još jednom prepisivati
>> ime polja koje je svega nekoliko znakova levo. Najzad sam napravio
>> makro
Pa, ako je problem u imenu, funkcija sama moze da zakljuci koje
polje se upravo unosi. pozove se readvar() i ona vrati ime polja koje se
unosi. evo naprimer, ovde VALID funkcija centrira tekst u polju :
a := b := space(12)
@ 2,5 get a valid pera()
@ 4,5 get b valid pera()
read
function pera
local r := readvar()
&r := padc(alltrim(&r), 12)
return .t.
clipper.193majkl,
TRHelp za READVAR() kaže:
Determines the name of the curent GET or MENU variable.
Returns the variable name as a character string.
Ovo rešava tvoj prblem, mada se sve ponovo svodi na jedan
makro :))
Pozdrav, Majkl
clipper.194nbatocanin,
Možeš i sa:
FOR i := 1 TO n
Tmp := "polje" + AllTrim (Str (i,2,0))
@ i,0 GET &Tmp VALID ff ()
NEXT
Naravno, ako se polja zovu polje1, polje2, ...
clipper.196erol,
Pitanje za sve Clipper gurue.
Koristim Clipper : S87 verziju i ne mogu da rijesim sljedeci problem:
Prilikom formiranja i otvaranja novog indexa (nove ind. datoteke) na
tekucoj DBF datoteci, zatvore se indexi koji su tu vec bili jer ne mogu
dobiti informaciju kako se zovu vec otvvorene NTX datoteke..
Dakle pitanje je : Kako saznati ime indexne datoteke koja je aktivna
(otvorena ) uz tekucu DBF datoteku ?
Ili : Kako dodati jos jedan NTX file u listu vec otvorenih NTX-ova,
a da se ovi prethodni ne zatvore ?
HHitno je !!!!!
..
clipper.197dpaun,
Pogledaj detaljno naredbu SET ORDER TO.
dPaun
clipper.198radunovic,
Imam problema u radu sa dbeditom. Stavio sam ga u program i
ponasa se vrlo cudno(bar za mene:). Kada prvo udjem u mod za
unosenje podataka (gomila SAY i GET naredbi) i izadjem na bilo
koji nacin, bilo da unesem nesto, bilo samo ESC i udjem u dbedit
on radi. A ako ne udjem u mod za unosenje(u kome inicijalizujem
neke interne promenjive i nista vise) kod dbedita program se
prekine i javi:
Error BASE/1005 No exported variable SKIPBLOCK
Called from _skipblock(0)
Called from dbedit(0)
Called from ... <- Ovde idu moje procedure
U cemu je stvar? Hitno mi je!
I jos jedno pitanje u vezi dbedita. Mogu li da kao zaglavlje,
umesto imena polja napisem proizvoljne stringove(eventualno u 2
reda). I koji su ulazni parametri procedure koju poziva dbedit?
Boki
PS. Jos jedno pitanje, koliko naplacujete pisanje programa?
clipper.199radunovic,
Odustao sam od rada sa DBEditom i presao na TBrowse. Koje su sve funkcije
koje mogu da upotrebljavam i kako da dobijem da mi se oboji ceo record a ne
samo jedno polje. Kako da iskljucim kursor ?
Unapred zahvalan Boki
clipper.200nkbog,
U Nanforum Alatima postoji program koji računa dan u godini za uskrs
po gregorijanskom kalendaru. Evo jednog programčića koji to isto radi,
samo za julijanski kalendar., t.j. za pravoslavni uskrs. Program je
napisao tandem TiBerije (T=algoritam, B=kodiranje, tol'ko je bilo teško ;)),
a baziran je na sličnom BASIC programu iz knjige Srpski Kalendar (ili
nešto slično).
NB.
uskrs.prgclipper.201erol,
Hvala na paznji, ali mislim da nisi bas najbolje shvatio.
Set order mogu koristiti ako je doticna indexna datoteka vec u listi
otvorenih indexa. Ali ako sam je tek kreirao sa INEX ON ...TO ind.ntx,
tada set order ne pomaze (bar ja tako mislim) .
Pitanje ostaje otvoreno , a ja pocinjem da se snalazim na neki nacin !!!
Hvala. [7m [5m Erol [0m
clipper.202banex,
>> Dakle pitanje je : Kako saznati ime indexne datoteke koja je
>> aktivna (otvorena ) uz tekucu DBF datoteku ?
Ako imaš podatak kako se zovu indexi uz koju datoteku, tada si na
konju. Postoji mogućnost da naredba SET INDEX TO koristi i mem
promenjljive.
Dakle nešto u ovom fazonu...
index1 = "prvi_ntx"
index2 = "drugi_ntx"
SELE 1
USE baza prvi_ntx, drugi_ntx
INDEX ON <expresion> TO <novi_ntx>
SET INDEX TO (index1), (index2), novi_ntx
Nisam našao funkciju koja može da vrati ime indexa ako je on
odranije nepoznat.
CU! -BANE-
clipper.203nbatocanin,
Što se tiče TBrowsa, ima previše stvari za ispričati. Pogledaj tekst u
"Računarima" o objektima, a imaš sve što ti treba i u NG-u za Clipper.
Ceo slog možeš obojiti sa ColorRect - pogledaj NG za objekte.
clipper.204pedjad,
HPPozdrav svim Clipper-asima.
Tek sam od nedavno poceo da se aktivno bavim sa Clipperom,
ali ima tu jos nekih stvarcica koje mi nisu jasne.
Npr. zasto mi javlja kod naredbe REPLACE - Type mismatch. To mi
se desava kada sam mu stavio 22 polja za replace , dok mi je sa tri
radio OK, pa me zanima kako da to resim i kako bih mogao da ako imam recimo 30
polja za unos podataka to da izvedem. Inace se nemojte smejati ako sam nesto
'lupio' :).
Eto toliko za pocetak, a kasnije ce biti sve vise i vise i vise... pitanja
od mene.:)
clipper.205nbatocanin,
čali mi se drug da ima problema sa Clipper-om S'87 u mreži: mada je,
kako kaže, preduzeo sve potrebne mere, vrlo često mu program iskače
sa "Index File corrupted". Ima li neko slična iskustva?
clipper.206dejanr,
>> mada je, kako kaže, preduzeo sve potrebne mere, vrlo često mu
>> program iskače sa "Index File corrupted". Ima li neko slična iskustva?
Imam, do neba! Na Novell-u 2.12 bilo mnogo, na Novell-u 2.15 jako malo.
Nikad se nije dešavalo ako je korišćeno USE...EXCLUSIVE.
clipper.207draganf,
Najvjerovatnije si pokušao u nimeričko polje upisati
karakter string ili obratno. A što se tiče toga da li nešto
"lupio" svi smo mi imali svojih bisera, prema tome samo napred
sa problemima
Dragan
clipper.208dpaun,
// program iskače sa "Index File corrupted"
Clipper braćo i sestre,
Nemam iskustva sa mrežom, ali nekome će, možda, koristiti
sledeće (mene je prosto izluđivalo dok sam bio u Clipper
pelenama): navedenu poruku dobijao sam zbog toga što sam
otvarao više DOS fajlova (baza + indeksi) nego što je sa
FILES u CONFIG.SYS bilo određeno, a sa "set clipper" u
AUTOEXEC.BAT preneto aplikaciji. Prevideo sam da su i
indexi DOS fajlovi, kao i svaki drugi.
I tako, krene program, otvori koliko mu je dopušteno,
dođe na red sledeći fajl (obično index), programu se
smrkne i crkne, a zadnje reči su mu upravo one citirane.
dPaun
clipper.209nbatocanin,
> Npr. zasto mi javlja kod naredbe REPLACE - Type mismatch.
Ne verujem da ima veze sa brojem polja - verovatno pokušavaš da upišeš
broj u polje definisano kao CHARACTER ili nešto slično.
clipper.210pedjad,
>> Najvjerovatnije si pokusao u nimericko polje upisati
>> karakter string ili obratno.
Nije do toga jer mi i ako nista ne upisem javlja isto, a i takodje sam pokusao
da stavim da mi sve bude CHAR duzine 10 i opet isto.:(
Pedja
clipper.211draganf,
Šta musliš da pošalješ taj prg pa da vidimo.
Dragan
clipper.212vaca,
>> Npr. zasto mi javlja kod naredbe REPLACE - Type mismatch.
>> To mi se desava kada sam mu stavio 22 polja za replace ,
>> dok mi je sa tri
Pravo da ti kažem, ja clipper nekoristim ali sam imao sličan problem
u foxbase+-u.Pošto je su u pitanju bili novi podaci koji treba da se upišu u
.DBF datoteku ispred REPLACE... sam dodao append blank, probaj možda je u
tome problem.
Vaca
clipper.213hercog,
Nešto mi nije jasno , dosta često mi se desi da se neka datoteka
sama od sebe izbriše, tj da nestane njen sadržaj i struktura, a
ostane samo ime na hardu. Dešavalo mi se to i sa datotekama
koje se indeksiraju, a i sa onim drugim. Clipper tada prijavljuje
CORUPTION DETECTED : DATOTEKA.DBF i gotovo. Da li je neko
imao sličnih problema?
Hercog
clipper.214hercog,
Uh zaboravih u prethodnoj mojoj poruci da kažem:
u pitanju je clipper 5.01
Hercog
clipper.215radunovic,
Opet ja za TBrowse. ColorRect mi oboji ceo slog ali samo polja pa mi ostane
iseckano. Kako bi mogao da dobijem kontinualnu liniju preko celog ekrana(posto
mi konkretno ne treba pojedino polje vec ceo slog). Probao sam da muckam sa
bojama i da promenim boje kolona kad pri stabilize dodjem do odgovarajuce
reda ali on mi oboji ceo TBrowse u tu boju. Sta da radim?
clipper.216gvuckovic,
> Nešto mi nije jasno , dosta često mi se desi da se neka datot
> sama od sebe izbriše, tj da nestane njen sadržaj i struktura,
> ostane samo ime na hardu. Dešavalo mi se to i sa datotekama
> koje se indeksiraju, a i sa onim drugim. Clipper tada prijavl
> CORUPTION DETECTED : DATOTEKA.DBF i gotovo. Da li je neko
> imao sličnih problema?
Onak usput, kad si zadnji put skanirao disk od virusa.
Goran..
clipper.217pjankovic,
> Nesto mi nije jasno , dosta cesto mi se desi da se neka
> datoteka sama od sebe izbrise, tj da nestane njen sadrzaj
> i struktura, a ostane samo ime na hardu. Desavalo mi se to
> i sa datotekama koje se indeksiraju, a i sa onim drugim.
> Clipper tada prijavljuje CORUPTION DETECTED : DATOTEKA.DBF
> i gotovo. Da li je neko imao slicnih problema?
Desilo mi se nesto slicno sa verzijom Summer '87. Radi se o
slijedecem:
Operater je htio da obrise jedan slog iz baze (DELETE pa PACK).
Po izvrsenoj operaciji vratio se u masku za unos podataka gdje je stajalo
"UNOSITE SLOG BROJ 1". Naravno, nastala je panika i odmah su me zvali.
Pregledom pomocu programa "Norton utillites" dosao sam do zakljucka da
su svi slogovi i dalje prisutni na disku, ali da u zaglavlju baze stoji
da je broj slogova 0. Na svu srecu, redovno su radili COMPRESS pa sam
uspio da povratim oko 80% slogova, a ostali su naravno bili razbacani svud
po disku.
Odmah sam posumnjao da je operater greskom ukljucio brisanje svih
slogova (ZAP), pa i ako on to porice ja sam jos uvijek tog ubjedjenja.
Ne mogu da povjerujem da bi u CLIPPER-u mogla da se desi jedna tako
katastrofalna stvar.
Pedja
clipper.218bulaja,
│Nesto mi nije jasno , dosta cesto mi se desi da se neka datoteka
│sama od sebe izbrise, tj da nestane njen sadrzaj i struktura, a
│ostane samo ime na hardu.
└───
Meni su se desavale neke slicne misteriozne gluposti i na kraju sam
shvatio kada iz zasto (sto ne mora znaciti da je i kod tebe isti slucaj)
- posle nekih ERASE trebalo je uraditi odmah COMMIT inace bi nastale
nekakve haos brljotine i u obrisanoj (posle bi je povratio sa undelete
pa gledao) a i u drugim bazama. Ovo mi se sve desavalo na S87, na 5.01
nisam probao (a i poceo sam da stavljam COMMIT i iza svakog REPLACE ;).
clipper.219hercog,
**> Onak usput, kad si zadnji put skanirao disk od virusa.
14.02.1992
Hercog
clipper.220vkrstonosic,
>> Operater je htio da obrise jedan slog iz baze (DELETE pa PACK).
1. zašto posle delete koristiš odmah pack ? Pack je dovoljno
uraditi samo jednom u toku rada, ja ga obično radim na samom početku.
Da li si probao pack na malo većoj bazi, to može i da poootraje.
>> Odmah sam posumnjao da je operater greskom ukljucio brisanje svih
>> slogova (ZAP), pa i ako on to porice ja sam jos uvijek tog ubjedjenja.
2. Kako i zašto si dozvolio operatoru da koristi naredbu Zap ???
3. Moj savet ti je da vodiš lepo Log svega što se radi, pa onda
lepo odeš u firmu i kažeš: Dana 11.02.1992, u 10:56:43 je neko (i to
neko može da se proverava) je uradio to i to i tako obrisao podatak.
clipper.221pjankovic,
>>> Operater je htio da obrise jedan slog iz baze (DELETE pa
> PACK).
>
> 1. zasto posle delete koristis odmah pack ? Pack je
> dovoljno uraditi samo jednom u toku rada, ja ga obicno
> radim na samom pocetku. Da li si probao pack na malo vecoj
> bazi, to moze i da poootraje.
>
Slazem se.
>>> Odmah sam posumnjao da je operater greskom ukljucio
>>> brisanje svih slogova (ZAP), pa i ako on to porice ja
> sam jos uvijek tog ubjedjenja.
>
> 2. Kako i zasto si dozvolio operatoru da koristi naredbu
> Zap ???
>
Pa radilo se o jednokorisnickom programu sa kojim je i bukvalno
radio samo jedan covjek (mozda izraz operater nije najpogodniji).
Mislim da je kontrolno pitanje i/ili lozinka razumna zastita od nezeljenog
brisanja svih podataka.
Pedja
clipper.222pjankovic,
Zanima me na koji nacin se u bazi mogu naci slogovi koji kroz program
nikako nisu mogli biti uneseni. Naime, evo o cemu se radi:
Svojevremeno sam u jednoj manjoj opstini radio program za stampanje
birackih spiskova. Posto nisu imali mrezu, a zbog kratkoce vremena, podaci
su unoseni na nekoliko racunara, da bi po zavrsetku posla sve baze bile spojene
u jednu. Tada sam na desetak mjesta primijetio slogove sa besmislenim
sadrzajem. Numericka polja su imala vrijednost 0, a karakter polja neki
sasvim slucajan sadrzaj. Ovakav sadrzaj se nije mogao unijeti normalno
kroz program. Redni broj, npr, je automatski postavljan na prvi sljedeci,
a vrijednosti su mogle biti samo >0. Ovakvi slogovi nisu bili grupisani
vec sasvim slucajno razbacani. Otpada mogucnost da je neko usao u DBU i
tamo vrsljao.
Nije, naravno, bilo tesko obrisati ove slogove, ali me zanima da
li neko mozda ima ideju kako se ovo desilo. Mozda hard disk, mozda
virusi, mozda...
Pedja
clipper.223nbatocanin,
Pošto kontrolišeš celu situaciju, možeš da radiš šta ti padne na
pamet. U principu treba samo da vratiš stanje posle skaniranja
tastature. Evo primera:
WHILE .T.
Ch := 0
// Ispisivanje
WHILE !TB:stabilize() .AND. ((Ch := Inkey()) == 0) ; END DO
// Ekran je ispisan i nista nije pritisnuto
IF Ch == 0 .AND. TB:stable
// Osvetljavanje tekuce linije (MARK)
X := TB:RowPos
Y := TB:ColPos
ACur := {X, 1, X, TB:colCount}
ACurC := {X, Y, X, Y}
TB:colorRect (ACur, {5,1})
TB:colorRect (ACurC, {2,1})
// Cekaj taster
Ch := InKey(0)
// Ugasi kursor (UNMARK)
TB:colorRect (ACur, {1,2})
END IF
DO CASE
// Analiza komandi
// ...
END CASE
Dakle, umesto delova označenih sa MARK i UNMARK mogu se staviti BILO
KOJE dve (suprotne) operacije pomoću kojih označavaš tekući slog.
clipper.224nbatocanin,
Skoro da bi se mogao zakleti da je problem u nečemu drugom, a ne u
Clipper-u. Jesi li probao isti program na drugom računaru?
Voleo bi da vidim skraćenu verziju tog programa.
clipper.225radunovic,
Problem je u tome sto mi ColorRect oboji samo deo linije na kome su
ispisana polja, a ostanu crne rupe izmedju dva polja. Meni je potrebna neka
procedura koja bi bila mesto MARK i koja bi obojila celu tekucu liniju.
clipper.226nbatocanin,
> Problem je u tome sto mi ColorRect oboji samo deo linije
> na kome su ispisana polja, a ostanu crne rupe izmedju dva
> polja.
Što ne probaš sa sledećim MARK-om:
SetColor (Invert)
@ Row(), Col() SAY Polje1 + " " + Polje1 + ...
ili nešto slično.
clipper.227dejanr,
>> ps. ovo sve zbog jednog fenomenalnog editora koji se zove bingo. jedna
>> od mogućnosti je da učitava fajlove do 240Mb (ne 'k', nego 'M').
>> ima oko 150k, pisan u Turbo C-u, sličan QEdit-u, može da se
>> konfiguriše, sve što se radi radi se iz editora (nema config
>> datoteke), iako je rađen za pisanje C programa, dobar je i za
>> druge datoteke, itd. jednom rečju strava.
Šalji i to čudo, da ga oprobamo. Mnogo volim editore koji primaju velike
fajlove.
Naravno, ako je PD/SW.
clipper.228radunovic,
Odustao sam i od TBrowsera i napravio svoju funkciju. Tako ispade najbolje.
:) Zahvaljujem se na pomoci.
Boki
clipper.229hercog,
**> Voleo bi da vidim skraćenu verziju tog programa.
Poslaću deo sorsa ovde, pa probajte. Inače , taj problem
se dešava kod mene i jos dvojce ljudi koji koriste taj pro-
gram. Da nije možda problem u hyperu, jer na sva tri ra-
cučunara je instaliran?
Hercog
clipper.230ndragan,
/ Nije, naravno, bilo tesko obrisati ove slogove, ali me zanima da
/ li neko mozda ima ideju kako se ovo desilo. Mozda hard disk, mozda
To se događa i u foksu, kad okine makina, dbf se ne zatvori i dosu se ne
prijavi da treba u direktoriju da se ažurira dužina; tada u hederu DUFa
piše tačno stanje (broj slogova kakav je bio kod poslednjeg zatvaranja
ili Flush / Commit naredbe), a u FAT ne piše da je fajl dugačak toliko i
toliko. Kod sledećeg startovanja foks (a verovatno i kliper) primeti da
se tu nešto ne slaže pa poveća dužinu fajla, tj zatraži odsečene
klastere od DOSa. Dos mu, naravno, da prve slobodne klastere koje ima,
ali to skoro nikad nisu isti oni u koje je pisano pre reseta. U ovima
koji su dodati ostaje đubre koje su na ta mesta na disku ostavili neki
drugi programi; novi slogovi se dodaju iza svega toga. Verovatno si
primetio da su takvi slogovi grupisani - otvori datoteku bez indeksa pa
ćeš videti.
Fokspro takve datoteke neće ni da otvori; Mfoxplus ih ladno otvara pa se
ponekad ispomažemo njim. Verovatno i kliper radi tako, čim si zatekao
male kineze u datoteci. Za svaki slučaj napisali smo jedno programče
koje ažurura heder prema prostoru koji je javljen dosu - odseca višak
DBF iza onog mesta koje je upisano u heder; izgubi se poslednjih
nekoliko slogova, a izgubi se i navika da operateri svoje greške brišu
resetom :)
Bue_ NDragan
clipper.231pjankovic,
> male kineze u datoteci. Za svaki slucaj napisali smo jedno
> programce koje azurura heder prema prostoru koji je
> javljen dosu - odseca visak DBF iza onog mesta koje je
> upisano u heder; izgubi se poslednjih nekoliko slogova, a
> izgubi se i navika da operateri svoje greske brisu resetom
> :)
Hvala na odgovoru.
Kada budem imao vise vremena, pokusacu i ja da
napravim nesto slicno.
Pedja
clipper.232hercog,
Šta mislite : koliko maraka vredi program (pisan u kliperu)
koji u sebi sadrži : obradu proizvodnje, kretanje robe u
trgovini, obradu magacina, računa, popunjavanje i štampanje
uplatnica, celokupne rashode jedne pekare (11 rashoda),obra-
zac TM1,kalkulaciju cene proizvoda prema cenama sastojaka,
proračune : dnevni promet, poslovni rezultati, bilans itd.
Molim vas da hitno odgovorite.
Hercog
clipper.233bulaja,
Moze li se sa Clipper 5.01 koristiti neki drugi linker osim RTLink-a?
Probao sam TLink i ne radi.
clipper.234dejanr,
>> Moze li se sa Clipper 5.01 koristiti neki drugi linker osim RTLink-a?
>> Probao sam TLink i ne radi.
Radi, ali ti treba novi Turbo Link a ne onaj stari od Turbo C-a 1.1.
Inače, može i MS linker. Ako ti treba CLIP.BAT, kaži da šaljem.
clipper.235bulaja,
││ Moze li se sa Clipper 5.01 koristiti neki drugi linker osim RTLink-a?
││ Probao sam TLink i ne radi.
│└───
│Radi, ali ti treba novi Turbo Link a ne onaj stari od Turbo C-a 1.1.
│Inace, moze i MS linker. Ako ti treba CLIP.BAT, kazi da saljem.
└───
Meni ne radi ;), tj. probao sam sa TLINK 4.01 (BC++2.0) i nije mi
uspelo. Posto preferiram TLINK umesto MSLINKA ;), dobro bi mi dosao
CL.BAT za njega, a moze i za bilo sta drugo brze od RTLjinka.
clipper.236ndragan,
/ koji u sebi sadrži : obradu proizvodnje, kretanje robe u
Zavisi od pekara :)... ovako odokativno, oko 2 Mdin, što bi izašlo oko 1800
DEM, mada opet - sve zavisi od mušterije, i da li je to po sistemu plati pa
nosi i da se više ne vidimo, ili sa muzičkim željama (razlika između ove dve
varijante ume da ide do 1:2)
Bue_ NDragan
clipper.237hercog,
**> nosi i da se više ne vidimo, ili sa muzičkim željama
**> (razlika između ove dve varijante ume da ide do 1:2)
Sa muzičkim željama.
Hercog
clipper.238nbatocanin,
> Posto preferiram TLINK umesto MSLINKA ;), dobro bi
> mi dosao CL.BAT za njega, a moze i za bilo sta drugo brze
> od RTLjinka.
Budi oprezan: nećeš imati dinamičke overleje i ponestaće ti memorije
kod malo većeg programa. Jesi li probao RTlink /PLL?
clipper.239radunovic,
Jas sam radio sa TLINK-om iz BC++ 2.0 i nisam imao problema. Mozda nisi
stavio sve biblioteke.
clipper.240ndragan,
/ Zavisi od pekara :)... ovako odokativno, oko 2 Mdin, što bi izašlo oko
Izeš brzog čoveka. Hteo sam reći 200 Mdin, tj dvesta kila. Sorry.
clipper.241alexa,
> Izeš brzog čoveka. Hteo sam reći 200 Mdin, tj dvesta kila. Sorry.
Dobro, koliko je sad to para?????
clipper.242ndragan,
/ Sa muzičkim željama.
Najebo si. Ponesi suvu ranu za tri dana (mesuštine itd - valjda će biti
leba...). Onda, šta ga ja znam da kažemo 280 mega... ili, ako hoćeš,
tezgaroši uzimaju po 90 za jedan LD ili analitiku _bez_ muzike. Rekoh da
zavisi od pekara, a zavisi i u čemu pišeš. Ako imaš brz alat, na konju si.
Bue_ NDragan
clipper.243ndragan,
>* Dobro, koliko je sad to para?????
200.000,00 dinara važećih, ali sa ovom inflacijom se nikad ne
zna :)
clipper.244lazo,
Prvo pitanje:
Ljudi gdje nabaviste Clipper 5.1?
Drugo pitanje:
Kako se zadaje ime radnoj stanici tako da mogu koristiti
funkciju NETNAME(), a da mi ova ne vrati prazan string?
Treće pitanje:
Nemam više pitanja :)))))))))!!!
Mickey
clipper.245vilic,
Hi,
Par pitanja clipper guru-ima, pošto sam totalni početnik.
1.- Koje mi knjige preporučuju za učenje i prve korake ovog
prg. jezika. Služim se c-om i fortranom.
2.- U dodatku računara piše o povezivanju radnih odlasti (datoteka)
sa naredbom SET RELATION, pa me interesuje sa koliko se maksimalno
radnih oblasti istovremeno može povezati jedna radna oblast (datoteka).
bye
clipper.246bulaja,
│1.- Koje mi knjige preporucuju za ucenje i prve korake ovog
│ prg. jezika. Sluzim se c-om i fortranom.
└───
Bila je o tome dosta obimna diskusija u ovoj konferenciji, bas sam pre
nek dan brisao te poruke iz SOR-a ;), al sam sad opet potrazio,
pogledaj diskusiju od poruke 5.93.
clipper.247hercog,
**> zavisi od pekara, a zavisi i u čemu pišeš. Ako imaš brz
**> alat, na konju si.
Paz sad ovo. Napisali smo program njemu pre par meseci i
uzeli neke pare... Sad smo mu dodali neke opcije nove i
tražili 300dm za njih. Kad je tip čuo on je rekao da smo
ludi i da je to mnooooooooogooooooo. On uopšte ne može
da skopča kakve su cene. Pitam ja njega pa koliko je po
tebi normalna cena, a on kaže 100dm , po zvaničnom kursu
- 65 din :))))). Sve mi se čini da ću da mu uzmem te pare
i da mu dam program koji će da radi još 1 mes i onda go-
tovo.
Hercog
clipper.248hercog,
Kako očitati status kurora (da li je islkjučen ili uključen)
Hercog
clipper.249hercog,
**> Ljudi gdje nabaviste Clipper 5.1?
Clipper 5.1 ili 5.01?
Hercog
clipper.250dzakic,
>> Kako očitati status kurora (da li je islkjučen ili uključen)
U asembleru pozoveš int 10, fja 3 čini mi se (get cursor status),
pa ako je donja linija iznad gornje, znači da je kursor nevidljiv.
clipper.251dusanp,
=>> Kako očitati status kurora (da li je islkjučen ili
=>> uključen)
=>
=> U asembleru pozoveš int 10, fja 3 čini mi se (get cursor
=> status), pa ako je donja linija iznad gornje, znači da je
=> kursor nevidljiv.
žak i ako dobiješ /uz pomoć ove f-je/ da je kursor vidljiv,
to još uvek ne znači da je na ekranu. U svojim ranijim progra-
mima sam stavljao kursor u 26u liniju na ekranu /sada koristim
_setcursortype()/ i on bi time bio nevidljiv.
Znači, da bi bio siguran moraš da kombinuješ oba sistema -
pozoveš funkciju i proveriš koordinate kursora.
By the way - kako se na EGA/VGA u višim text modovima gasi
kursor ? Da li može stavljanjem kursora u 44/51 liniju ?
clipper.252bulaja,
│Kad je tip cuo on je rekao da smo ludi i da je to mnooooooooogooooooo.
│On uopste ne moze da skopca kakve su cene.
└───
A kakve su? O;> Cena ne zavisi od toga "ej gledaj kako su neki tamo tipovi
uvalili slican prg za $$$" vec mnogo vise od toga koliko ti vredis (sto je
glavni faktor i iz cega slede i funkcionalnost programa, rok izrade i sl.)
i koliko si se mucio da uradis program. Ima kreepova koji neke bangave ;)
programe valjaju po ogromnoj lovi i misle da su genijalci i prave sjajan
posao (doduse, takve stvari se nakratko mogu dosta i isplatiti). Imas i
one koji nemaju mnogo veze o programiranju, ali opet misle da mogu da za
male pare rade neke programe, za koje se posle ispostavi da ne vrede ni
toliko, a onda odjednom pomisle kako mogu da uzimaju i vecu lovu. Takvi ti
sigurno ne mogu biti orijentir za odredjivanje cene, a ni slucajno uzor.
A programi ne bi smeli da ti javljaju "DBF Corrupted" ;).
│Sve mi se cini da cu da mu uzmem te pare i da mu dam program koji ce da
│radi jos 1 mes i onda gotovo.
└───
Sjana ideja, a imas li mozda nameru da se ovim poslom bavis duze od mesec
dana?
clipper.253bulaja,
│Kako ocitati status kurora (da li je islkjucen ili ukljucen)
└───
SETCURSOR()
Vraca broj [0..4], 0 je iskljucen kurzor, 1 ukljucen normalni (trepcuci
underline, a 2, 3 i 4 trepcuci ▄, █ i ▀.
clipper.254ndragan,
/ - 65 din :))))). Sve mi se čini da ću da mu uzmem te pare
/ i da mu dam program koji će da radi još 1 mes i onda go-
Ostavi ti njemu lepo sve što je tražio i to tačno onako kako je tražio.
Kroz mesec dana će da ukapira da ti nije sve dobro objasnio šta u
stvari hoće, pa će sam da traži nadogradnju. A onda opet još 100 DEM, i
tako malo po malo. Samo nek njemu aplikacija počne da radi posao i da se
on na nju lepo navikne.
Pazi - na nju, a ne na tebe.
Posle pola godine upotrebe, aplikacija je droga. Pokušaj sledećih mesec
dana da živiš bez SORa :)
A inače, ne prodaješ ti njemu samo aplikaciju, nego mnogo više
informatičke škole koju svaki korisnik mora da popije - koliko ko može.
A to je već ono što stvara naviku. Saberi koliko si mu objašnjavao razne
stvari dok si radio. Pitanja koja si mu postavljao, i on tebi. Sve je to
tvoj rad koji treba naplatiti. Ako on to još ne shvata - *š ga,
mušterija je uvek u pravu, čak i kad je konj. Samo strpljivo, doće maca
na vratanca.
Bue_ NDragan
clipper.255ndragan,
/ one koji nemaju mnogo veze o programiranju, ali opet misle da mogu da
/ za male pare rade neke programe, za koje se posle ispostavi da ne
I profesionalci moraju od nečega da žive! Nekoliko dooobrih mušterija
smo uhvatili tamo gde su pre nas bili neki tipovi koji drže stil "uzmi
pare i beži". Podsetio bih na diskusiju od pre mesec dana o zaštitama.
Najprljavije tehnike zaštite seju baš takvi - ono malo što znaju čini im
se teškim blagom, koje treba zaštititi makar i po cenu korisnikovog
diska ;(.
Što reče na kraju, slažem se: imam nezgodnu naviku da jedem svakog dana,
a mislim da ću je imati i dogodine :)
Bue_ NDragan
clipper.256vkrstonosic,
>> I profesionalci moraju od nečega da žive! Nekoliko dooobrih mušterija
>> smo uhvatili tamo gde su pre nas bili neki tipovi koji drže stil "uzmi
>> pare i beži". Podsetio bih na diskusiju od pre mesec dana o zaštitama.
>> Najprljavije tehnike zaštite seju baš takvi - ono malo što znaju čini im
>> se teškim blagom, koje treba zaštititi makar i po cenu korisnikovog
>> diska ;(.
Xa, i ja sam se nekada nervirao zbog raznih amatera i njihovih
bangavih programa (pre neki dan naidjem na knjigovodstvo, robno i
finansijsko, za celih 100 (sto) dem), ali sam prestao. Pa ti ljudi nam
čine uslugu, oni nam u stvari dižu cene. Pre nekog vremena, u jednoj
firmi je prošla naša ponuda koja je bila 5 (pet) puta skuplja od
konkurencije - ljudi su imali neka loša iskustva ranije.
Samo neka se prodaju bangavi programi, ja najviše volim kad dodjem
u firmu koja je kupila takav program, pa posle 2 meseca ne pitaju više
da li je jeftino.
clipper.257lazo,
**> Clipper 5.1 ili 5.01?
Ma 5.01 bilo mi mrsko stavljati onu nulu.
clipper.258hercog,
**> A programi ne bi smeli da ti javljaju "DBF Corrupted"
**> ;).
Više ne prijavljuje dbfd corupted... Greška je bila kod
sort naredbe...
**> Sjana ideja, a imas li mozda nameru da se ovim poslom
**> bavis duze od mesec dana?
Imam nameru da se bavim tim poslom i preko mesec dana.
Inače što se programa tiče veoma je dobro urađen i lep ;)
Hercog
clipper.259hercog,
**> tako malo po malo. Samo nek njemu aplikacija počne da
**> radi posao i da se on na nju lepo navikne.
Aplikacija kod čoeka radi preko 6 mes bez problema (ako izuzmemo
dbf corupted koji je ispravljen), a on još ne zna sve opcije
da koristi (razlog : nije ih ni probao...)
**> A to je već ono što stvara naviku. Saberi koliko si mu
**> objašnjavao razne stvari dok si radio. Pitanja koja si
**> mu postavljao, i on tebi. Sve je to tvoj rad koji treba
**> naplatiti. Ako on to još ne shvata - *š ga,
Kukuuuuuuuuu. Mi smo više njemu pričali o programu, objašnjavali
razne stvari nego što je trajalo pisanje programa. A to mu nismo
naplatili... :((
Hercog
clipper.260janko,
> i koliko si se mucio da uradis program. Ima kreepova koji
> neke bangave ;) programe valjaju po ogromnoj lovi i misle
> da su genijalci i prave sjajan posao (doduse, takve stvari
> se nakratko mogu dosta i isplatiti). Imas i
Biser br. 1:
Par firmi je kupilo neke programe (koji su trebali da obrađuju
podatke o više stotina ljudi, firme nisu male) od nekog tipa,
(piše mu Dipl. Ing. u posetnici, ali ne znam šta je to
diplomirao, možda šumarstvo) koji je odmah posle prodaje
prestao da sarađuje. To i nije bilo čudno, jer su programi bili
na Turbo Basicu. Uuuuužas! To se ne može ni zamisliti kako
radi.
Biser br. 2:
Svojevremeno je JNA kupla od IVASIM-a neki softver, i to za
puno kasarni, isto sa inteznivnom obradom velikih količina
podataka, pisan na PASCAL INTERPRETERU (*eb*t*!). (Naravno bez
sorsa).
(Znam još bisera -- silnim video klubovima isto su utopljeni
silni BASIC programi itd itd...)
U oba programa nešto je bilo i zajedničko -- pošto su radili
unos preko nekih ekvivalenata INPUT naredbi, po pravilu nisu
radili sa promenom podataka unazad na ekranu -- pritisni enter
i pomoli se. Ako pogrešiš, radi sve iz početka.
Tako se to radi kod nas. Zbog tipova koji tako useravaju stvari
i ne postoje kriterijumi i predstava kod nas da i za dobar
program treba da se dobro plati.
Drugi problem je što ljudi čuju: ovo radi kompjuter, ono radi
kompjuter, pa kad kupe kompjuter misle da se u njemu krije i
sve za njihovu pekaru. I misle da ne treba da dalje plaćaju, i
programere gledaju ko lopove (izgleda, zbog nekih i zasluženo).
Za tebe: PRE NO ŠTO POžNEŠ da radiš nekome, PRVO utvrdi TAžNO
sa njim šta si dužan da mu napraviš. Onda se pogodi za cenu, pa
tek onda radi. Naravno, time se obavežeš da ćeš ispuniti SVE
njegove zahteve za koje ti je platio, ili će ti platiti. Tu treba
da preciziraš i koliko si obavezan da održavaš program.
Nemoj da brukaš profesiju (makar si i samo u prolazu u njoj,
izgleda) ni sa kakvim podvalama! Programi će ionako, ako se ne
održavaju, brzo zastareti, pogotovu kod nas gde kad prespavaš
jedan dan već ima novih zakona, suprotnih od prošlih. Takođe,
ko god koristi program, siguro će primetiti neke nedostatke
(niko ne piše bezgrešne programe). Ako sa tobom nije izmirio
račune, neće biti otklonjeni.
clipper.261dpaun,
>> │Kako ocitati status kurora (da li je islkjucen ili ukljucen)
>> └───
>> SETCURSOR()
>> Vraca broj Š0..4Ć, 0 je iskljucen kurzor, 1 ukljucen normalni
>> (trepcuci underline, a 2, 3 i 4 trepcuci ▄, █ i ▀.
Ima situacija kada će niže rešenje dobro doći:
1) Zapamti trenutno stanje, napr:
LOCAL sCursor := SETCURSOR()
2) Postavi novu vrednost:
SETCURSOR(nCursor)
// Deo programa
3) Vrati staro stanje:
SETCURSOR(sCursor)
// Kraj procedure i povratak
Ovo se MORA primeniti, napr. kada smo u MEMOEDIT(), želimo
da kod inserta povećamo veličinu kursora, a sve vreme da
nam se ispisuju podaci o njegovoj trenutnoj poziciji. Prikaz
pozicije kursora (Lin i Col) vršićemo sa "ugašenim" kursorom
pa je pamćenje njegovog prethodnog stanja neophodno.
P.S. Uzgred, neka braća i sestre koja pišu (i izgovaraju,
pretpostavljam) "kurzor" - objasne otkud ovaj manir, orto-
epski sasvim stran našem jeziku?
dPaun
clipper.262hercog,
**> kompjuter, pa kad kupe kompjuter misle da se u njemu
**> krije i sve za njihovu pekaru. I misle da ne treba da
**> dalje plaćaju, i programere gledaju ko lopove (izgleda,
**> zbog nekih i zasluženo).
A još ako je vlasnik pekare glup ko noć, dobiješ
neverovatno kombinaciju
**> Za tebe: PRE NO ŠTO POžNEŠ da radiš nekome, PRVO utvrdi
**> TAžNO sa njim šta si dužan da mu napraviš. Onda se
**> pogodi za cenu, pa tek onda radi. Naravno, time se
**> obavežeš da ćeš ispuniti SVE njegove zahteve za koje ti
**> je platio, ili će ti platiti. Tu treba da preciziraš i
**> koliko si obavezan da održavaš program.
Ma mi smo tako i uradili , al je problem bio
kod nekih kasnijih dodataka.
**> Nemoj da brukaš profesiju (makar si i samo u prolazu u
**> njoj, izgleda) ni sa kakvim podvalama! Programi će
**> ionako, ako se ne održavaju, brzo zastareti, pogotovu
**> kod nas gde kad prespavaš
Niko nije obrukao profesiju od nas ovde, niti je
samo u prolazu. Ja se npr već 6 meseci šetam od
kuće do čoeka, jer mu stalno nešto novo sine u glavi.
A TO NISMO NAPLATILI, što bi se reklo da je dobio
sve to za džabe...:( I kao što rekoh program za
pekare koji smo napisali ja i moj ortak je
napisan po svim željama čoeka (vlasnika pekare) i
održavamo ga čak i više nego što treba..
Hercog
clipper.263ndragan,
/ tek onda radi. Naravno, time se obavežeš da ćeš ispuniti SVE
/ njegove zahteve za koje ti je platio, ili će ti platiti. Tu treba
To se lepo kaže: ništa bez ugovora. A kad praviš ugovor, pamet u glavu -
obezbedi se od više sile (strujni udar, virus, krađa), njegove
reorganizacije, izmene zakona; obaveži ga da mora da ima bekap, a onda navedi
90% spiska muzičkih želja; časti ga posle i onih 10%, tek tolko da ti je uvek
nešto dužan. Uradi mu sve što traži, ali prvo pogodi dinamiku plaćanja.
I ne kloni duhom.
Bue_ NDragan
clipper.264ndragan,
/ A još ako je vlasnik pekare glup ko noć, dobiješ
/ neverovatno kombinaciju
Ne može da bude glup ako te već pola godine preveslava za lovu ;>>
/ kuće do čoeka, jer mu stalno nešto novo sine u glavi.
/ A TO NISMO NAPLATILI, što bi se reklo da je dobio
Ipak je on pametan...
Bue_ NDragan
clipper.265hercog,
**> Ne može da bude glup ako te već pola godine preveslava
**> za lovu ;>>
Ma uzeli mu mi ono što je trebalo, al nikako da mu uzmemo
za ove nove opcije...
Hercog
clipper.266dpaun,
Clipper braćo i sestre!
Iz službenih razloga (etnološka istraživanja) posebno
sam zainteresovan za tekstualne baze podataka. To me
je odvuklo u Clipper, jer je (pre par godina) on bio
jedini alat za kakav-takav komfor u tom pogledu. Te-
žište je, dakle, na memo-tipu podataka. Deset godina
zamajavanja sa metodologijom tekstualnih kartica ili
fiša, sa registratorima i sl. "pešačkim" pomagalima,
i dve-tri godine intenzivnog Clipperovanja, rezulti-
ralo je i određenim iskustvom koje bih rado podelio
sa ostalima. Naravno, u tom iskustvu pretežu ona ve-
zana za metodološko-etnološki aspekt, ali ni ona iz
samog clipperovanja nisu za bacanje. Pogotovu što su
stečena u situacijama kroz koje će, verovatno, morati
da prođu sva braća i sestre(?) sa zanimanjem za memo.
Ima li, dakle, još koga ovde kome je memo u prvom planu,
odnosno kakva su iskustva sa Clipperom kao "školjkom"
za upravljanje tekstualnom bazom podataka?
dPaun
clipper.267hercog,
Ovo pita jedan moj ortak : Kako naterati štampač da pre početka
štampe ne provlači prvi list pa tek onda štampa?
Hercog
clipper.268kanda,
Da li postoje greske koje kliper ne moze da uhvati ? Konkretno,
imam svoju ERRORBLOCK funkciju. Naravno, najvazniji deo je
detekcija gresaka pri radu sa fajlovima. E sad, greske tipa
'ne mogu da otvorim datoteku a:\pera.txt', kao i ostale
hvata bez izuzetka (tj. tako sam mislio :). Ali, jutros sam
startovao program sa diskete (zasticene) i kad je naleteo na
naredbu PRO->(DBCOMMIT()), umesto da izleti u rutinu za
hvatanje gresaka, on prijavi nesto kao 'Unrecoverable error :
DBCOMMIT(0)', i naravno pravo u DOS. I sta sad da radim ?
Zasto je ovakva greska 'unrecoverable' ?
clipper.269vkrstonosic,
>> Ovo pita jedan moj ortak : Kako naterati štampač da pre početka
>> štampe ne provlači prvi list pa tek onda štampa?
A kakve to veze ima sa Clipperom ?????
clipper.270mmihajlovic,
Da li neko zna gde je bio .PRG za ispisivanje brojnih vrednosti
slovima. kao da sam to negde video (na SEZAM-u ili u RACUNARIMA).
Unapred zahvalan.
MM
clipper.271hercog,
**> A kakve to veze ima sa Clipperom ?????
Pa zato što čovek piše prg u clipperu i nikako da
natera štampač da mu ne provlači prvi list kad
nešto štampa pomoću tog prg-a što je napisao
Hercog
clipper.272vkrstonosic,
>> Pa zato što čovek piše prg u clipperu i nikako da
>> natera štampač da mu ne provlači prvi list kad
>> nešto štampa pomoću tog prg-a što je napisao
Uh bre, sa kakvim ti misterijama ovde dolaziš ;))
Rešenje slično kao i ranije, pošalji ovde deo tog misterioznog
source-a, imam par ideja zašto bi to moglo da se dešava, ali su sve
toliko glupe, da ne želim da vas omalovažavam :)
clipper.273dejanr,
>> Da li neko zna gde je bio .PRG za ispisivanje brojnih vrednosti
>> slovima. kao da sam to negde video (na SEZAM-u ili u RACUNARIMA).
Bio je u Bajtovima lične prirode, mislim u decembarskim "Računarima".
A imaš ga i na Sezamu uz poruku 5.5 u konferenciji PC.PROG
clipper.274mmihajlovic,
Hvala !
clipper.275hercog,
Ovo je deo sorsa iz prg-a
set device to printer
č 1,0 say "tralala"
...
...
...
Pre nego što odštampa "tralala" on izuče jedan papir.
Hercog
clipper.276vkrstonosic,
>> Ovo je deo sorsa iz prg-a
>>
>> set device to printer
>> č 1,0 say "tralala"
>>
>> Pre nego što odštampa "tralala" on izuče jedan papir.
Tja, očigledno ima još nešto, upravo sam ovo probao (Clipper 5.01
i Epson LQ 550) i ne izvlači papir. Proveri da li pre ovoga ima još
nekog štampanja, jer može i u tome da bude problem. Clipper, ako
recimo prvo staviš č 1,0 say "", pa onda č 0,0 say "", smatra da je
ono 0,0 na sledećem papiru. Odnosno, ako je broj reda manji nego
prethodni, izbacuje papir i štampa na sledećem. Ovo može da bude vrlo
zgodno za neke stvari, ali ne za sve.
clipper.277kanda,
:))) znas u cemu gresi tvoj drug? JednostavÚno, kad radis sa printerom,
koristi ? i ?? komandeÚ jer vidi sta se ovde desava : prvo, komanda
@ 4,1 say 'pera' -> printer izbaci 4 prazna reda i ispise 'pera'
@ 2,1 say 'zika' -> printer naravno ne moze da se vrati dva reda
unazad, nego izbacuje stranu i na novoj strani, izbaci dva prazna reda i
tek onda pise. Dakle, ako vec koristi @ ... SAY, neka pise strogo liniju
za linijom, bez vracanja unazad.
clipper.278vili,
> set device to printer
> Z 1,0 say "tralala"
------------------------------------------------------------------------
SET DEVICE TO SCREEN | printer
Description
( . . .)
When sending @...SAYs to the printer, Clipper performs an automatic
ELECT whenever the current printhead row position is less than the last
print row position. An EJECT resets PCOL() and PROW() values to zero.
To reset PCOL() and PROW() to new values, use the SETPRC() function.
------------------------------------------------------------------------
SETPRC(<nRow>,<nCol>) --> NIL
Description
( . . .)
SETPRC() can also be used to suppress page ejects when printing with
@...SAY. This is important when the next row position is smaller than
the current row and an EJECT has not been issued. In this situation,
Clipper issues an automatic page eject if the next row print position
is less than the current PROW() value. Using SETPRC(), you can set
PROW() to a number less than the current row, thus suppressing the
automatic EJECT.
------------------------------------------------------------------------
PS. Ja licno koristim:
SET PRINTER ON
SET CONSOLE OFF
Vili
clipper.279hercog,
Pošto ja nemam štampač i nikad nisam pisao ništa u vezi istog, poslao
sam vam taj deo sorsa da rešimo čoveku problem
Hercog
clipper.280dpaun,
>> Ima li, dakle, još koga ovde kome je memo u prvom planu,
Postavio sam ovo pitanje pre neki dan. Ćutanje me je
gotovo ohladilo: nije, valjda, da sam se "zaleteo" i
izabrao pogrešan alat za tekstualnu bazu? Hajde da
promenim pitanje:
Ima li koga ovde kome je memo u srednjem planu?
dPaun
clipper.281zkrstic,
> Pošto ja nemam štampač i nikad nisam pisao ništa u vezi
> istog, poslao sam vam taj deo sorsa da rešimo čoveku
> problem
Ala se raspričasteeeeeee :))))
Da nije neko na virus posumnjaoooo :))
Elem :( Imam isti problem koji sam rešio na mnoooogo bezobrazan način:
1. Štampanje, za rad brzine programa, vršim u fajl
2. Pre nego što ga sa RUN PRINT poteram, pustim funkcijicu koja
leeeeepošacne, ima li taj fajl na početku jedan maaali CTRL L
znakić i ako ima pošalje ga u večna lovišta, ako ne nikom ništa.
Rešenje je tako trivijalno i bezobrazno da sam se dva dana sebi samome
divio :))))
Pozdrav, zkr
no_eject.zipclipper.282ndragan,
/ Ima li koga ovde kome je memo u srednjem planu?
Bio sam u frkoj pa se nisam javio. Nije mi u srednjem planu, ali ga
često koristim. Napravio sam nekoliko stvari koje bez memo polja mogu da
se naprave samo pomoću trikova, a i program onda ispada pet puta duži i
nezgodniji za upotrebu. Napravio sam recimo generalnu rutinu za ispis
teksta sa makro zamenama iz bilo koje datotetke - recimo generator
ugovora, dopisa, čega bilo a o čemu postoje nekakvi podaci u nekakvim
DBF. Razne konverzije teksta... recimo ženi sam pravio program koji iz
teksta (rada za specijalizaciju) izdvaja literaturu, ubacuje redne
brojeve iz popisa literature i usput izdvoji taj popis literature u
zaseban tekst, sve naravno sređeno za Venturu.
Možda to nije ono što si mislio, ali ako nema drugih zainteresovanih, da
ne davimo u konferenciji, šalji mi mail. Uzgred, ne znam kako kliper
barata sa memo poljima, ja radim u foksprou i kako mi se čini dosta je
moćan po tom pitanju.
Bue_ NDragan
clipper.283ndragan,
/ Rešenje je tako trivijalno i bezobrazno da sam se dva dana sebi samome
Ali zvuči kao krpež, pošto nisi rešio uzrok. Ali, ideja svakako može da
posluži - ko zna za šta će još trebati.
clipper.284bingo,
dali neko zna kako se u clipgrafu brise uvodna spica
clipper.285kzoran,
Hi!
Ima li neko DOBRU knjigu o Clipper-u 5.01? Ako je moguće, pozajmio bih je na
par dana da je fotokopiram. Dolazi u obzir i kupovina.
Pozdrav,
Zoran.
clipper.286draganf,
Probao i nisam uspio, jedino je možeš pretvoriti u
svoju reklamu
Dragan
clipper.287terza,
Danas sam pokusao da otvorim grupu Clarion, ali Sezam kaze da ta
grupa vec postoji. Dakle, ako vlasnik grupe ovo procita i ima mjesta
tu sam:)).
Terza
clipper.288ilotina,
HI!
Da li bi neko od vas cliperasa (posto je neznam cliper) mogao da prebaci
ovaj txt fajl u DB3 format. Struktura datoteke izgleda otprilike ovako:
Ime : pa sad neko ime
Prezime : ---| |---
..........
Unapred zahvalan Ivan!
P.S. Ja sam ipak pokusao nesto da uradim u TP-u sa nekim dbase.tpu, ali posto
tamo nisam razumeo jos jednom vas molim da mi pomognete. Hvala
flis.arjclipper.289nbatocanin,
> Danas sam pokusao da otvorim grupu Clarion, ali Sezam kaze
> da ta grupa vec postoji.
Zašto "privatno" razgovarate o tako opšte interesantnim stvarima?
Mislim da bi dosta ljudi htelo da čuje nešto o Clarionu, ja prvi.
clipper.290pedjad,
Zdravo,
drugar me je zamolio da pitam gde moze da se nadje onaj program iz Racunara 75
za PREVIEW U CLIPPERU. Ja sam ga trazio u RSOFT-u, ali nije tamo, pa ako neko
zna gde je ili ako ga ima molio bih ga da mi ostavi poruku.
Pozdrav Pedja.
clipper.291dpaun,
>> Da li bi neko od vas cliperasa (posto je neznam cliper)
>> mogao da prebaci ovaj txt fajl u DB3 format.
Radio sam to više puta. Tvoj tekst ne mogu da raspakujem
jer imam samo PKUNZIP.EXE. Možeš li da ga spakuješ sa
PKZIP-om? Uzgred, da bi se posao uradio najbrže što može,
tekst treba da bude:
- čist ASCII kod;
- uređen u formi tabele ili preciznog spiska.
1. Janković Marko pekar 1982
99. Ilić Jevrosima dadilja 28
100. Nikiforović Jon 178999
itd
Pošalji na MAIL.
dPaun
clipper.292vilic,
hi,
ovo je PD program za kreiranje objektno-orjentisanih programa
na kliperu. Dok nestigne Nant. OO Clipper 6.0 evo malo uvoda
u budučnost programiranja (kliper verzija).
A evo i izvoda iz oclip.doc
LEGAL NOTICE:
o:Clip, an object oriented extension to Clipper, is FREEWARE. It may be
freely distributed and used by individuals and corporations without
charge. It may not, however, be sold or distributed for a price (other
than user group diskette duplication and distribution fees.) At all
times, the copyright and title for o:Clip remain with CyberSoft, Box
718, Milton, WA 98354. It must be distributed as a whole, including
this accompanying documentation.
This software is provided on an as-is basis. If you choose to use
it, you do so at your own risk. Neither the author nor CyberSoft offers
any warranty or guarantee of any kind, nor do they (individually or
together) accept any liability for any consequences of the use of this
software.
REQUIREMENTS:
o:Clip requires Clipper 5.01.
o:Clip is composed of two files: OCLIP.LIB and OCLIP.CH
OCLIP.LIB contains functions to create classes, add methods and variables
to classes, and to access self.
OCLIP.CH contains UDC's to allow class definitions. The UDC's are
extremely minimal, and make the function definition behind the
definition of a class transparent. The best way to get an idea of how
they do this is to compile the examples with /p and examine the
preprocessed output files.
DESCRIPTION:
o:Clip is an extension to Clipper 5.01 to allow user defined objects and
classes.
Clipper 5.01 is probably one of the most significant advances in X-Base
programming since the invention of the .DBF file. One of the least
documented and most understood new features is that of objects. Perhaps
the reason for this is that unlike the rest of the language, Clipper
classes and objects are inflexible - you can't change them, and you
can't create your own. Without these abilities, it is not truly an
object-oriented programming (OOP) language, and yields none of the
benefits of OOP such as polymorphism, reusability, or inheritance.
o:Clip fills in this small but glaring hole in the OOP ability of
Clipper 5.01 by providing the ability to create your own classes and
objects. You can work with these objects just as you can the ones
provided by Nantucket, with the added benefit of inheritance. Objects
created with o:Clip return VALTYPE() of "O", and are recognized
internally as objects to Clipper itself.
bye
ps. pitanje za SysOp-ove. Zašto imamo temu Basic, CCCC, Paskal,
Asembler... a nema ni pomena niti jedne temice za Objektno
orjentisane jezike. Koliko primecujem oni u svetu nisu samo hit
već i veoma ozbiljan alat sa kojim se radi, Borland i Microsoft
već uveliko napuštaju klasične jezike (da pomenem samo njih) a
na Sezamu mogu eventualno da "zalutaju" u PC.PROG--->razno.
pps. Svaki reply predlažem u temi razno.
bye
clipper.293draganf,
Dobiješ to za par sati sređeno, bar tako mislim pošto
ću tek sad da to prebacim kod sebe. Radio sam već
takve stvari pa nebi trebalo biti problema
Dragan
clipper.294draganf,
Evo je sređena kako se moglo, iako je pisana da što više
zapetlja prenos u dbf format.
Dragan
flis.zipclipper.295nbatocanin,
Izvinjavam se što programa nema u RSOFT-u. Kad je tekst objavljen,
nisam bio na Sezamu. Poslao sam Bulaji program i uskoro će se naći na
svom mestu.
Pozdrav, Nenad
clipper.296bulaja,
\RSOFT\r075clpr.zip
clipper.297dpaun,
>> Evo je sređena kako se moglo, iako je pisana da što više
>> zapetlja prenos u dbf format.
Možda će još nekom da zatreba rešenje za ovakav problem.
Prilažem svoju Clp improvizaciju na temu iLotina & Co.
dPaun
fli.zipclipper.298pedjad,
Thanks.
Pozdrav Pedja.
clipper.300nbatocanin,
Desilo mi se neëto üudno. Imao sam proceduru sa nekoliko otvorenih
datoteka. Na jednu od tih datoteka bilo je "usmereno" vise relacija.
Neëto ovako:
USE d1 INDEX d1 NEW
USE d2 NEW
SET RELATION TO xx INTO d1
USE d3 NEW
SET RELATION TO xx INTO d1
...
Znaüi, na D1 su postavljene dve relacije: iz D2 i D3. Kada se na
kraju zatvore sve datoteke, zatvarao sam ih ovako:
CLOSE d1
CLOSE d2
CLOSE d3
Znaüi da (posle zatvaranja D1) D2 i D3 ostaju sa relacijama na praznu
zonu. E, onda su poüele da se deëavaju üudne stvari. Kada sam
redosled promenio tako da se prvo zatvaraju D2 i D3, pa tek onda D1,
sve je bilo OK. Ima li neko slična iskustva?
clipper.301drakce,
│ Desilo mi se neëto čudno. Imao sam proceduru sa nekoliko
└─────
Nevezano za tvoj problem, svako š(išarka) u tvom tekstu je e sa dve tačke
iznad. U tekstu se od naših slova nalazi još samo č(ičak) i ono je prikazano
OK. Hoću da kažem, da ti nešto nije u redu sa kodnim rasporedom.
Pozdrav od Dragana
clipper.302nbatocanin,
Pregledao sam i mislim da se radi o izuzetno interesantnoj stvari.
Nešto što nisam znao, a piše u dokumentaciji, je da Clipper 5.01 ima
nedokumentovane pozive za rad sa objektima, što sigurno znači da će
Clipper 6.0 podržavati puno OOP. Bilo bi dobro da se ovaj
interesantan prilog premesti u neki dir.
clipper.303ndragan,
/ Zna<129>i, na D1 su postavljene dve relacije: iz D2 i D3. Kada se na
Ne znam za kliper; foks bi ti ladno izbacio poruku 'Target already engaged in
relation'. Mada... ne znam zašto ne bi moglo da se napravi da može. Jedini
dobar razlog su ambivalentne situacije (iz a imaš relaciju na b i c, iz b u d
i iz c opet u d - i kad čitaš kroz a, po kojoj relaciji pristupaš do d: vezom
a-b-d ili a-c-d). Zato se prvo čudim što ti je uopšte radio, a tek onda što
se buni zavisno od redosleda zatvaranja.
Bue_ NDragan
clipper.304sasa.m,
Profesor informatike me zamolio za postavim neka pitanjca i vezi
Clippera 5.01,a tiču se dodatka o clipperu 5.01 iz prošlih "računara":
1. U tom dodatku bilo je reči o kodnim blokovima.Kako se radi sa njima?
2. Kako se koristi TBrowse (to je valjda funkcija koja zamenuje DBedit) i
ako može neki konkretan primer za nju u vidu sourca...
Hvala unapred,SašA
clipper.305vbole,
Ne znam da li sam potrefio temu, al' mislim da jesam.
Imam jedno pitanje:
1) Da li je kaznjivo pisati nekom program za duplo knjigovodstvo ?
Mislim, lova je dobra, ali hoce jednu 'hidden' i jednu 'open' bazu.
Kako je to definisano u zakonu (ako je uopste) ?
Ajd' pomagajte, lomim se izmedju love i -kako se ono zvase..., ma znam da
imam i to... - aha, savest.
bye... vbole
clipper.306nbatocanin,
> Nevezano za tvoj problem, svako š(išarka) u tvom tekstu je
> e sa dve tačke iznad.
Eh, greška u koracima! Izvinte.
clipper.307rcojba,
> Ajd' pomagajte, lomim se izmedju love i -kako se ono
> zvase..., ma znam da imam i to... - aha, savest.
uzmi lovu ionako on moze da vodi dve knjige !!!!!!
clipper.308bulaja,
│ovo je PD program za kreiranje objektno-orjentisanih programa na kliperu.
└───
Prebaceno u \ibmpc\program, thanks na prilogu.
clipper.309vbole,
> uzmi lovu ionako on moze da vodi dve knjige !!!!!!
Ma, nisam bas siguran u to - raspitacu se - ali mi je rekao da se sada
komp priznaje kao knjiga, znaci ako dodju poreznici, traze stanje i iz
kompjutera.
Program bi morao da frizira stvarno stanje u zavisnosti od toga ko trazi
podatke i da ih 15-to dnevno uskladjuje - e, sad, da li je to dozvoljeno,
moralno... ?
clipper.310banex,
>> 1) Da li je kaznjivo pisati nekom program za duplo knjigovodstvo ?
Hm, ovo je jedan od čestih zahteva korisnika. Koliko sam ja upoznat
nije u pitanju da li program to omogućava ili ne. Završni račun
potpisuje neko i taj je odgovaran za njegovu ispravnost. A i kad\ako
dođe kontrola (revizor :) ) on uvek traži originalne dokumente a ne
listinge ili kartice. No, za svaki slučaj, ja bih ti preporučio da
tražiš da ti potpiše neku listu zahteva koje program mora da ispunjava
i da tamo explicitno stoji takva želja. To je u slučaju da bude ono
"nemam ja pojma kako je taj program napravljen i kako radi, ja to
nisam tražio" :)
clipper.311dejanr,
>> Program bi morao da frizira stvarno stanje u zavisnosti od toga ko trazi
>> podatke i da ih 15-to dnevno uskladjuje - e, sad, da li je to dozvoljeno,
>> moralno... ?
Pa, u stvari, čovek to ne traži da bi lagao državu (gde bi on!) nego zbog
crnog fonda koji skriva od žene. A lagati ženu možda nije moralno, ali teško
da može biti zakonom zabranjeno ;))
Sve to zavisi kako se gleda na stvari, traži da ti napišu i potpišu projektni
zahtev pa slobodno radi.
clipper.312nbatocanin,
> Zato se prvo čudim što ti je uopšte radio, a tek onda što se buni
> zavisno od redosleda zatvaranja.
Ako relacije u bazi podataka modeliraju realne relacije, ova
situacija je besmislena, ali u praksi se često javi situacija da je
tako najlakše. Primera radi, imaš datoteku artikala i datoteku ulaza
i izlaza artikala. Ako se radi neki zbirni izveštaj, zgodno je
postaviti relacije na artikle i iz ulaza i iz izlaza - bez obzira što
se ove dve relacije nikad ne koriste istovremeno. Jednostavno, kad se kaže
SET RELATION TO x INTO Zona
Clipper treba da izvrši
Zona->(dbSeek(x))
pri svakom pomeranju pokazivača sloga u primarnoj zoni. I tu nema neke
mudrosti. Ako mu ja zadam cikličnu relaciju, ima da se zaglavi, ako
mu zadam bezmislenu vezu, radiće bezveze. Zato mislim da je neki bug.
Ispitaću stvar čim budem našao vremena.
Uzgred, pošto vidim da radiš na Fox-u, imaš li neka iskustva sa
verzijom 2.0. Izgleda dosta interesantno.
Pozdrav, Nenad
clipper.313nbatocanin,
> 1. U tom dodatku bilo je reči o kodnim blokovima.Kako se
> radi sa njima?
Kodni blokovi su bezimene funkcije koje se mogu tretirati i kao
podaci. Ima previše stvari da bi sve ovde napisao. Pitaj određenije
ili pogledaj u "Računarima".
> 2. Kako se koristi TBrowse (to je valjda funkcija koja
> zamenuje DBedit) i ako može neki konkretan primer za nju u
> vidu sourca...
tBrowse nije funkcija, to je klasa objekata koji (izuzetno uspešno)
zamenjuju dbEdit. Važi ista napomena kao gore: pitaj preciznije pa
ćeš dobiti odgovor.
Pozdrav, Nenad
clipper.314vbole,
> Pa, u stvari, covek to ne trazi da bi lagao drzavu (gde bi on!) nego
> zbog crnog fonda koji skriva od zene. A lagati zenu mozda nije moralno,
> ali tesko da moze biti zakonom zabranjeno ;))
To je to !!!
Kako meni ne pade na pamet ??
clipper.315vbole,
> Hm, ovo je jedan od cestih zahteva korisnika. Koliko sam ja upoznat
> nije u pitanju da li program to omogucava ili ne. Zavrsni racun
> potpisuje neko i taj je odgovaran za njegovu ispravnost. A i kad\ako
> dode kontrola (revizor :) ) on uvek trazi originalne dokumente a ne
> listinge ili kartice. No, za svaki slucaj, ja bih ti preporucio da
Ok, da ne tupim i ja vise o tome - ubacicu mu opciju da stanje moze da
azurira samo onaj ko ima lozinku.
Prodavci unose robu kao prodatu/primljenu - ide u privremenu bazu dok se
pomocu tih podataka ne azurira stanje u glavnoj bazi - onda se brise.
Posto su svi prodavci malo priglupi ;), gazda mora uvece ( ili jednom
nedeljno, nije bitno ) da prekontrolise sta je od toga stvarno prodato
odn. primljeno, i tek ti podaci se unose u glavnu bazu.
Tako bi trebalo da bude OK ??
clipper.316ndragan,
/ Uzgred, pošto vidim da radiš na Fox-u, imaš li neka iskustva sa
/ verzijom 2.0. Izgleda dosta interesantno.
žuj, iskustva. Leži mi na disku žuta verzija za po kući još od decembra i
nikako da stignem da pogledam šta sve ima.
Ima moćnih stvari, rad sa pendžerima (njegovim, ne windows) je
poboljšan, neke stvari su nešto logičnije postavljene, ali dve-tri
stvari bih izdvojio kao ključne: editori za maske, izveštaje i menije -
sa sve generatorima sorsa. Parametri svega toga se drže u nekim .DBF
fajlovima (sa nastavcima .SCX, .MNX i .FRX), sa brdom memo i
jednobajtnih polja; urađeno je dosta gazdački.
Drugo je što može da se iskoristi mnogo više tipova unosa u masci:
popap meniji, radio dugmići itd - pljunuti GEM u tekst načinu sa još
nekim proširenjima; sad ima i tzv Foundation Read, što je READ bez GET,
nego ima procedure koje se izvršavaju kod aktiviranja i deaktiviranja;
on može da poziva svoje READ maske i tako do 5 nivoa. Još malo pa kao
event-driven, mada kažu da je to pogrešna koncepcija za DBF
programiranje, a ako neko počne baš to da radi onda nije shvatio šta su
hteli.
Treća stvar je Rašmor (njihov proizvoljan naziv, nastao navodno posle
gledanja nekog Hičkokovog filma, mislim '39 stepenika') indeksiranje
koje mi liči na ono što radi vaksov RMS kod Prolog3 fajlova - svaki novi
indeks sadrži samo ofset bajta od kojeg se razlikuje od prethodnog, i
naravno samu razliku; na taj način se dobijaju dosta sitni .CDX indeksi
čak i kad je indeksni pojam dugačak. Pretrage se u nekim slučajevima
poprilično optimizuju, a konačno je ubačena i SQL sintaksa, sa dijalog
boksom za generisanje pretrage, koja može da se zapamti u nekoliko
formata, uključujući i čisti sors.
At last, but not at least, tu je i generator projekata, koji može da
popakuje sve fajlove nužne za rad aplikacije u jedan .APP (ko je reko
GEM :) ili .EXE; model za EXE verziju može da bude od spartanskog do
male ale koja jede XMS i ima nekakvo interno keširanje/baferisanje itd.
Zaista zvuči moćno; to što mi leži tri meseca na disku nije mi čudno. I
za 1.02 nam je trebalo pola godine dok smo počeli da mislimo drugačije
i da koristimo njegove trikove i zavlačimo ih sve dublje u programe.
Zato sad imamo problema sa XENIX instalacijama gde sve to treba vratiti
u kameno doba (Foxplus 2.1 ;( ).
Zasad na njemu držim svoj tekući račun :).
Bue_ NDragan
clipper.317ndragan,
/ Mislim, lova je dobra, ali hoce jednu 'hidden' i jednu 'open' bazu.
If you want to do something wrong, do it right, or don't do it.
Sve po redu i zakonu, a koga uhvate, sam je kriv. U načelu: program je tvoj,
podaci su njegovi. žuo sam za slučaj noćne more zvane "a šta ako ja otkucam
pogrešnu šifru kad mi dođu pa ispadne pogrešan izveštaj?".
Bue_ NDragan
clipper.318kzoran,
Hi, narode!
Kako da u Clipperu 5.01 izbegnem pojavljivanje sistemskih upozorenja tipa
Invalid date, Range 100-999 i sl. u gornjem desnom uglu ekrana?
Usput ponovo pitam ima li neko neku dobru knjizicu za Clipper 5.01 na par dana
dok je ne fotokopiram, ili na prodaju?
Pozdrav,
Zoran
clipper.319dpaun,
>> Kako da u Clipperu 5.01 izbegnem pojavljivanje sistemskih
>> upozorenja tipa Invalid date, Range 100-999 i sl. u
>> gornjem desnom uglu ekrana?
Probaj sa SET SCOREBOARD OFF. Ovo isključuje prikazivanje
poruka u nultom delu ekrana, u toku izvršavanja naredbe
READ i funkcije MEMOEDIT(). Vraćanje prikaza poruka je sa
SET SCOREBOARD ON.
dPaun
clipper.320andrejl,
Pozdrav svima,
Pa da odmah nešto i pitam. (ovo sam glupo sročio :))
Nedavno sam eksperimentišući sa Clipperom 5.01 pravio neku proceduru
i prosleđivao joj niz kao parametar. E, u proceduru nije stizao niz
nego NIL-ovi, a jednom i đubre.
Da li to znači da niz ne može da ide kao parametar?
Retko koritim nizove u Clipperu, a i ovo sam rešio bez njih ali
me i dalje kopka ko je kriv, ja ili Clipper ?
bye, andrejl
clipper.321dpaun,
Clipper braćo i sestre, 5.01!
Verujem da je svako prokukao majčino mleko dok se
dovijao kako najefikasnije da napiše help za svoje
Clipper programe. Prilažem ovde fajl Pomoc.Zip koji
je nasta(ja)o tokom mog rvanja sa Clipperom. Pošto
"programiram" na uvce, bez neke unapred određene
koncepcije, to se help stalno menja. Kako se koji
zahtev postavljao, tako sam frizirao svoje help
procedure. Uveren da više nema nijednog zahteva
koji ovaj help paketić ne može da reši - stavljam
ga Clipper rođacima na slobodno korišćenje. Ovaj
help koncept podrazumeva prevođenje .prg programa
sa uključenim linijama. U osnovi, korišćenje su
Strelijeve procedure i dopune iz najnovijeg paketa
5.01, uz neke sitne šminke ličnog karaktera.
Pa, javite kako služi!
dPaun
pomoc.zipclipper.322hercog,
Ima nešto što me živo interesuje :
Zašto dosta ljudi kad im se pomene clipper i programiranje
na njemu počnu da se smeju i upiru prstom na onog ko radi
sa clipperom, drugim rečima šta mnogo njih ima protiv cli
ppera?
Hercog
clipper.323dnikolic,
>> Zasto dosta ljudi kad im se pomene clipper i programiranje
>> na njemu pocnu da se smeju i upiru prstom na onog ko radi
>> sa clipperom, drugim recima sta mnogo njih ima protiv cli
>> ppera?
Stvarno ne znam ko bi to radio! Pa ako neko dize lovu, to su Kliperasi.
dn
clipper.324andrejl,
Zanimljivo,
Kada linkujem sa .RTLinkom sa /PLL opcijom, prilikom startovanja
programa javi mi Illegal format in loadable file.
Problem nestaje kada startujem NG ?!?
bye, andrejl
clipper.325andrejl,
>│ Da li to znači da niz ne može da ide kao parametar?
žini mi se da sam izvalio glupost. U Achoice() ide niz, zar ne?
Mada ja Achoice() ne koristim, ali i dalje mi nije jasno zašto mi
procedura nije radila.
bye, andrejl
clipper.326dejanr,
>> Zašto dosta ljudi kad im se pomene clipper i programiranje
>> na njemu počnu da se smeju i upiru prstom na onog ko radi
>> sa clipperom, drugim rečima šta mnogo njih ima protiv cli
>> ppera?
Možda zato što zavide onima koji pišu programe na Clipperu i
sasvim pristojno žive od toga, što bi i oni radili da su u
stanju?
Istina je da Clipper u nekim apsolutnim merilima nije "neki"
jezik (naročito mu zameram što ne kontroliše tipove pri dodeljivanju,
fuj clipper ;), ali svoj posao (bar po meni) izvanredno obavlja.
clipper.327sasa.m,
=> Zašto dosta ljudi kad im se pomene clipper i programiranje
=> na njemu počnu da se smeju i upiru prstom na onog ko radi
=> sa clipperom, drugim rečima šta mnogo njih ima protiv cli
=> ppera?
Mislim da je ovo pitanje više za temu Misterije ;)))
clipper.328bulaja,
│Zasto dosta ljudi kad im se pomene clipper i programiranje na njemu
│pocnu da se smeju i upiru prstom na onog ko radi sa clipperom, drugim
│recima sta mnogo njih ima protiv clippera?
└───
Mogu ih razumeti u velikoj meri (a sam se uglavnom i bavim Clipper-om).
Ovakvo misljenje je uglavnom rasprostranjeno jer je cinjenica da se
Clipper-om bavi najveci broj kretena, sharlatana i slicnih kreatura,
koji misle da njihovo "iskustvo", steceno na dvonedeljnom i.ak kursu ili
neki slican nacin, vredi mnogo $$$ i da su oni sad neki "profesionalni"
programeri. Programi (?) koje pisu su obicno trash.
A i ja, iako radim u Clipper-u godinama, imam mnogo toga protiv njega,
i jedva cekam da ga se konacno otarasim ;).
clipper.329vili,
> Da li to znaci da niz ne moze da ide kao parametar?
Moze:
a:={1,"a",date(),.F.}
fun(a)
quit
function fun(b)
? b[1], b[2], b[3], b[4]
return
Vili
clipper.330vili,
Evo jos jednog DEMO programa za vodjenje evidencije o cekovima!
Znam da su vam ovakvi programi na vr' *****, ali voleo bih da
cujem nekoliko razlicitih misljenja o programu. Sta je dobro, a
sta je lose u njemu. Ovo je prvi program koji sam radio u Clipperu.
Bio bih zahvalan za bilo kakvo misljenje!
Vili
cekdemo.zipclipper.331hercog,
**> Stvarno ne znam ko bi to radio! Pa ako neko dize lovu,
**> to su Kliperasi.
Jeste to tačno, al pre neki dan mi se desilo sledeće :
Pričam ja sa par ortaka (svi programiraju) i jedan re-
če da programira neku bazu na clipperu za jednu firmu.
Ostali umalo da umru od smeha - clipper :))))))))))))))))))).
A i na drugim mestima srećem podsmehe kad se pomene cli-
pper, ima toga i na sezamu
Hercog
clipper.332hercog,
**> A i ja, iako radim u Clipper-u godinama, imam mnogo toga
**> protiv njega, i jedva cekam da ga se konacno otarasim
**> ;).
Na šta ćeš da pređeš?
Hercog
P.S. force, clarion, sql
clipper.333bulaja,
│Na sta ces da predes? P.S. force, clarion, sql
└───
It's a mystery to me. O;>
Clarion - NE
Force - najradje bi na njega, kad bi se pojavila neka novija verzija
CodeBase - suvise spor, ali maybe
Paradox - mrzi me da se petljam drugim standardima sem .DBF, ali maybe ;)
SQL - do ya know what d hell is SQL??? O;>
clipper.334dejanr,
>> > A i ja, iako radim u Clipper-u godinama, imam mnogo toga
>> > protiv njega, i jedva cekam da ga se konacno otarasim
>> > ;).
>>
>> Na šta ćeš da pređeš?
Nije meni upućeno al da kažem mišljenje - ni na šta. Clipper je
sjajan za to za šta je (baze podataka), i ništa ne valja za druge
stvari. Zato i imam nameru da ga koristim za to što mu je namena
dok se ne pojavi nešto bolje, a to teško da je force ili clarion,
pa čak i fox (mada fox ima svojih prednosti, a valjda i ovi ostali)
Voleo bih neki Clipper 6.0 koji bi ličio na 5.01 i samo imao kao
dodatak deklarisanje tipova promenljivih i kontrolu tipova pri
dodeljivanju vrednosti, naravno uz prijavljivanje greški tokom
kompilacije. Jes da bi morao da izmenjam sve sorsove, ali bi mi
programi bili znatno pouzdaniji što mi je veoma bitno.
clipper.335slom,
Drug mi radi sa Clipperom 5.0 pa ima nekih problema.
Kaze ovako:
Ima programce koje radi sa nekih 20-30 datoteka na Clipper-u i
sve je to radilo ko zmaj sa DOS-om 3.30. E sad na novom racunaru
386 i DOS-u 5.0 isti taj program nece da radi..
U Config-u ima:
buffers=20
files=200
a u autoexec-u SET CLIPPER = f 150 ili tako nekako..
Program pocne da radi i posle jedno 14,15 datoteka javi otprilike
nesto kao:
DBF ntx Open Error Dos error 4
(culi smo se telefonom pa ne znam dal je bas takva poruka, al tu je negde..)
Jel zna neko o cemu se radi??
SM
clipper.336ztuke,
> SQL - do ya know what d hell is SQL??? O;>
Nije mi jasno što se ovde na sezamu svi
toliko smeju i čude kada neko nešto pita pa u
neznanju ili mahinalno pogreši? :((
Ako je omanuo ti mu se "MALKICE" nasmej
ovako ;)), ne više, i u nastavku mu objasni! To
bar nije teško! Ovo nije upušeno samo tebi već
svima na sezamu!
SQL nije database već je to neka vrsta
jezika kojom se upravlja database-om na mreži
(programom koji se upravlja pomoću datebase-a)
ili tako nečim! Nisam stručnjak al' ovoliko
znam! Dakle reč je o mogućnosti koju poseduju
neke datebase (ne znam tačno šta) a ne o samom
datebase-u kao programu!
Sorry, nije bilo stručno al' je bilo
opisno! ;))
ZT
clipper.337andrejl,
>│ Stvarno ne znam ko bi to radio! Pa ako neko dize lovu, to
>│ su Kliperasi.
To je ono. on dize lovu, a ja ne pa ajde da ga blatim pa
sledi clipper ovo clipper ono ...
bye, andrejl
clipper.338andrejl,
Ma primetio sam i ja da može, ali ona procedura i dalje ne radi pa sam
je "ubio" i namestio lepšu :)
bye, andrejl
clipper.339hercog,
**> Evo jos jednog DEMO programa za vodjenje evidencije o
**> cekovima!
Zamerke :
1. Zašto korisnici : boca, bole i boban nisu dozvoljeni?
2. Pri unosu čekova brojevi čekova ne moraju da idu jedan za
drugim (npr. 41958510, 41958529...)
3. Ukoliko se unese negativna uplata više nije moguće unositi
uplatu
4. Uvod predugo traje
5. User interface nije baš prijateljski
Pohvale :
1. Mogućnost vođenja računa za više korisnika
2. Evidencija namene čekova
Hercog
P.S. ovo su prijateljske zamerke
clipper.340janko,
> Voleo bih neki Clipper 6.0 koji bi ličio na 5.01 i samo
> imao kao dodatak deklarisanje tipova promenljivih i
> kontrolu tipova pri dodeljivanju vrednosti, naravno uz
> prijavljivanje greški tokom kompilacije. Jes da bi morao
> da izmenjam sve sorsove, ali bi mi
E da. Ja sam se čak zanosio da napišem takav prekompaljer, koji
bi zahtevao i da su imena polja u bazi poznata pri
prekompajliranju i da svaka promenljiva mora biti deklarisana,
ali avaj, pojavio se Clipper 5.0, koji sada dozvoljava toliko
igranja sa sintaksom, da mi se realizacija moje ideje učinila
nemogućom?
clipper.341ndragan,
/ Zašto dosta ljudi kad im se pomene clipper i programiranje
Pa znaš, ima nekih šmekera koji su pravo sa spektruma prešli na kliper, i
imaju dosta rupa u programerskom obrazovanju, misle da sve znaju, prave lepo
našminkane aplikacije u kojima takođe ima mnogo rupa, više vode računa o
zaštiti svog autorskog prava nego korisnikovih podataka, tu i tamo neke
stvari napišu prljavo, i uglavnom posluju po principu "uzmi pare i beži".
Mislim da ih ima malo koji imaju _sve_ ove osobine, ali ih mnogi imaju po
nekoliko. Bilo je priče o takvima poslednjih meseci, mislim u temi "zastita"
ili čak i u novi.racunari. Znak raspoznavanja je da uglavnom nisu napisali
ništa ozbiljno u nekom drugom jeziku osim klipera. Među njima svakako ima i
dobrih, ali većini nedostaje iskustvo. Oni moraju postojati - treba odnekud
da se regrutuju budući dobri programeri.
Ja se, recimo, ne naježim čim čujem da je neko "kliper programer", ali me
vata strava kad vidim rezultate nekih od njih - brdo loše organizovanih
datoteka, izveštaji koji rade sporo (zamisli dve sekunde pauze između
štampanja dve stavke na fakturi), zavarivanje kojekakvih konstanti u program
i tako dalje. Šteta je za takve ljude da nemaju stručnu pomoć - daj mi bilo
koga od njih da ga malo pročešljamo u firmi, napravićemo od njega valjanog
programera.
Bue_ NDragan
clipper.342nbatocanin,
> Da li to znači da niz ne može da ide kao parametar?
proc main
x := {1, 2, 3}
pp (x)
return
proc pp (x)
? x[1], x[2], x[3]
return
Ne znam u čemu je štos, ali možeš poslati program pa da vidimo.
clipper.343bulaja,
│Voleo bih neki Clipper 6.0 koji bi licio na 5.01 i samo imao kao dodatak
│deklarisanje tipova promenljivih i kontrolu tipova pri dodeljivanju
│vrednosti, naravno uz prijavljivanje greski tokom kompilacije.
└───
I dugaaaacke nazive procedura (mrzim ogranicenje na 10 char :( ), pa nek
bude sporo samo da mogu da im dajem razumljive nazive ;). Force inace
lici na to sto tebi treba, al da je u Clipperu lakse raditi - jeste, i
to dosta.
clipper.344bulaja,
││SQL - do ya know what d hell is SQL??? O;>
│└───
│Nije mi jasno sto se ovde na sezamu svi toliko smeju i cude kada neko
│nesto pita pa u neznanju ili mahinalno pogresi? :((
└──
Come on, nisam mislio nista lose, jednostavno mi dosla inspiracija jer
se hell-sqL lepo rimuju ;). Evo sad cu se osmehnuti samo ;)) i ukratko
objasniti sta je SQL.
SQL (Structured Query Language) je standardni (ANSI) upitni jezik za
relacione baze podataka. Znaci da definise kakve treba da budu naredbe
za osnovne operacije sa bazom podataka - kreiranje, unosenje podataka,
pretrazivanje, etc. Kao standard je nastao jos pocetkom 70.-ih godina, i
prakticno je (sa manje ili vise izmena) implementiran u vecini danasnjih
database sistema, izmedju ostalog i u dBaseIII+ (tj. i u ranijim
verzijama), sto znaci i u svim programima nastalim na osnovama dB (a to
opet znaci npr. i Clipper).
clipper.345jpiri,
>> DBF ntx Open Error....
Da li je stavio SET CLIPPER = f 150 (kako si napisao)
ili SET CLIPPER=f150 (bez razmaka!) kako treba da bude?
Verovatno je to uzrok problema. Pozdrav.
clipper.346alexa,
Koliko znam, u dBaseIII+ nema ni pomena od SQL-a.
clipper.347gstojkovic,
// problemi sa clipperom//
Ne ulazim u to koji je jezik za prave programere. Cinjenica je ta da clipper
sasvim dobro radi ono za sta je namenjen, a to je rad sa bazama. Ja sam frisak
u radu sa clipperom a najvise imam problema sa uredjivanjem stampe. Ne mogu
najbolje da uredim izvestaj koji se sastoji iz mase podataka koje zadovoljavaju
neki uslov. Zato molim sve one koji imaju po neki primer napisan u clipperu
koji se bavi stampanjem izvestaja ili tako nesto slicno sto mi moze pomoci. U
unapred zahvalan Gstojkovic.
clipper.348vili,
> 1. Zasto korisnici : boca, bole i boban nisu dozvoljeni?
"Bug" zaostao iz prethodne verzije (svako ime koje pocinje sa "b"
nije bilo dozvoljeno iz odredjenih razloga).
> 2. Pri unosu cekova brojevi cekova ne moraju da idu jedan za
> drugim (npr. 41958510, 41958529...)
Mislim da ovo ne necu menjati! Meni su uvek cekovi isli jedan
za drugim pa pretpostavljam da je to uobicajeno stanje stvari kada
uzimas cekove iz banke. Ako ti banka da cekove koji nisu jedan za
drugim treba ih uneti jedan po jedan.
> 3. Ukoliko se unese negativna uplata vise nije moguce unositi
> uplatu
Ako je uplata negativna znaci da si pogresio pa zato treba tu uplatu
ispraviti u pozitivnu pa ce moci da se unosi i druga uplata!
Pretpostavljam da uplata moze biti samo pozitivna :).
P.S. Hvala na utiscima.
Vili
clipper.349nbatocanin,
> programa javi mi Illegal format in loadable file.
Imaš li DOS=HIGH? Izbaci i rešio si problem.
clipper.350nbatocanin,
čao mi je što me svi smatraju nekim zaštitnikom Clipper-a, pa će
neko možda ovo protumačiti pogrešno. Ipak, da napomenem da sam
najmanje svojih programa napisao u Clipper-u.
Ljudi su u suštini veoma podložni šablonima. Većina onih koji
kritikuje Clipper nikada i nije radila na njemu. Obično se on vezuje
sa antipatičnim poslovima koji se njime rade: to je isto kao kad
čistača ulice poistovetite sa poslom koji obavlja. Sasvim lično,
Clipper se sjajno bori sa svojim problemima.
Nezanemarljiva grupa (koju je neko nazvao računarskim snobovima)
programera svrstava u neku grupu po jeziku koji koristi, baš kao što
pravi snobovi ljude grupišu po odelu. Taj "programerski elitizam" je
do skora (?) one koji nisu znali Prolog dovodio u opasnost da budu
označeni kao neznalice. U istim krugovima se "tezgarenjem" nazivaju
svi poslovi gde se čovek bavi "prizemnim" i "nedostojnim" poslovima.
Sa krajem komunističkih navika valjda ćemo se osloboditi i ovih
krugova (obruča).
Napisi o performansama u stilu "Clipper 2 dana, Modula 2 minuta"
su blago rečeno netačni i nemaju osnova. Ali, kao po logici da bolji
vozač ima bolja kola, tako su i oni koji programiraju na mašincu
bolji programeri od onih drugih. Iskreno, obično svi potenciraju kao
najvažniju karakteristiku jezika performanse prevoda. Meni je daleko
važnija udobnost, moć i elegancija jezika: briga me što će korisnik
da čeka na obradu 10 sec manje, ako držim nos zapušen dok pišem
program. A i korisnika, koliko sam ustanovio.
Moram da napomenem i da sujeta vlada našim programerima u upravo
neverovatnim količinama: da li ste sreli nekog programera, da mu
kažete da nešto ne zna ili nije dobro, a da se ne naljuti? Iskreno,
veoma retko! A ovih drugih, koliko oćeš. Kad bi se po nadutosti
pojedinaca merila naša softversko-hardverska moć, bili bi bez premca.
Na žalost, delovi rasprava na Sezamu govore ovo isto.
clipper.351nbatocanin,
Bio je skoro u BYTE-u uporedni prikaz nekoliko DBMS paketa. U
tekstovima se uglavnom govori o performansama. U tome je ubedljivo
najjači FoxPro, sledi ga Clipper, a ostali su prilično udaljeni.
žesto čujem priču o raznim sistemima (ZIM, Oracle, ...) kao nečemu
daleko moćnijem od Clipper-a. Zvanično se ti ljudi malo oglašavaju:
stiče se utisak da svi rade na Clipper-u. Voleo bih da čujem
korisnike tih paketa u čemu je njihova prednost, po njima. Primera
radi, meni performanse nikako nisu odlučujuće. Dakle, zašto koristiti
baš DBMS taj i taj? I samo napred, pitanje nije zlonamerno!
clipper.352nbatocanin,
Meni stroga tipizacija nikada nije nedostajala, a mislim da bi u
Clipper-u više smetala nego koristila. Jer, priznaćete da je teško
deklarisati ovakav niz:
{1, "ABC", {1, 2, 3}, { |x| x++ }}
u jeziku koji traži strogu tipizaciju, a još teže kreirati ga po
potrebi, za vreme izvršavanja programa. Tipizacija podataka u
Clipper-u bi izazvala pravu lavinu izmena, i mislim da nikad neće
biti uvedena u punoj meri. O nekoj slaboj tipizaciji bi moglo da se
porazgovara.
žini mi se da ako je programer dosledan, ne bira jednoslovne
nazive promenljivih, pravi dovoljno kratke module, neće mu previše
zasmetati ova osobina. Meni lično ova osobina odgovara - Clipper mi,
između ostalog, služi za "brzo" pisanje programa (oni koji ovo rade,
razumeće), a deklaracije pri tome, uprkos svim pravilima ovog sveta,
SMETAJU!
Interesantno rešenje je notacija koju zagovara Nantucket (mislim
da se zove "mađarska"): nazivi svih promenljivih počinju prefiksom
koji označava tip i značenje promenljive. Na primer, nCount je
brojač, acTmp je niz stringova, itd.
clipper.354janko,
> Ne ulazim u to koji je jezik za prave programere.
> Cinjenica je ta da clipper sasvim dobro radi ono za sta je
> namenjen, a to je rad sa bazama. Ja sam frisak u radu sa
> clipperom a najvise imam problema sa uredjivanjem stampe.
> Ne mogu
Rad sa bazama uključuje i prikaz njihovog sadržaja. I sam vidiš
da to NE 'radi sasvim dobro.' :)
clipper.355janko,
EJ, LJUDI! JAKO JE VAčNO DA PRE NEGO ŠTO ODGOVORITE NA OVU
PORUKU, PROžITAJTE JOŠ JEDNU MOJU KOJU DANAS PIŠEM, U OVOJ
ISTOJ TEMI! U suprotnom, bojim se, počeće opet još jedno
nadjačavanje na Sezamu, što uopšte ne volim.
> Clipper-u više smetala nego koristila. Jer, priznaćete da
> je teško deklarisati ovakav niz:
>
> š1, "ABC", š1, 2, 3ć, š đxđ x++ ćć
(Zgroz!) (trnci mi prođoše kroz kičmu)
> žini mi se da ako je programer dosledan, ne bira
> jednoslovne nazive promenljivih, pravi dovoljno kratke
> module, neće mu previše zasmetati ova osobina.
Pa da, što bi mu smetala. Lepo napiše svoje programersko
remek-delo, koje radi neku iole složeniju obradu (čitaj:
dovoljno da program ima if-ove). Prevede program. Kompajler
kaže sve je u redu. Proda program. Program fino radi. Ali jedna
grana nekog if-a nikada se ne izvrši tokom testiranja i sledeća
2-3 meseca. A onda: kupac vidi magičnu poruku (parafraziram):
Variable not found at module LOVA, line 123
Tako se pišu remek dela, zar ne? :)
clipper.356janko,
> žesto čujem priču o raznim sistemima (ZIM, Oracle, ...)
> kao nečemu daleko moćnijem od Clipper-a. Zvanično se ti
> ljudi malo oglašavaju: stiče se utisak da svi rade na
> Clipper-u. Voleo bih da čujem korisnike tih paketa u čemu
> je njihova prednost, po njima. Primera radi, meni
> performanse nikako nisu odlučujuće. Dakle, zašto koristiti
> baš DBMS taj i taj? I samo napred, pitanje nije
> zlonamerno!
Da ne dužim. :)
Daleko moćniji sistemi baza podataka, (a Clipper čak ni to
nije, subjektivno) obično, verovali ili ne, imaju daleko
slabije perfomanse. Ali, upravo su moćniji zato što ti je 'nos
daleko zapušeniji' dok pišeš aplikacije. Ideja i jeste da se
čovek-programer što manje bavi trivijalnim stvarima. Po pravilu
su takvi sistemi interpreteri. Po pravilu, za izveštaj koji
možeš da generišeš sa dva-tri reda u SQL-u, naprimer, morao bi
da se oznojiš, i pišeš satima na Clipperu. SQL iskazi se,
inače, po pravilu ugrađuju u C, FORTRAN, pa i COBOL, kada se
pišu aplikacije. Problem je što takve aplikacije nisu
nezavisne: svaki korisnik MORA da kupi DBMS - database
management system, koji je, u suštini, neki superjak rantajm
modul, odnosno, nadgradnja operativnog sisteme, napr. Oracle.
Pa što svi ne pređu na SQL i slična čuda? Vrlo prosto: kod nas
se programeri za PC angažuju sa 'Je li, mali, ti si onaj što
zna sa kompjuteri, deder, napiši mi to i to.' Naručiocima je
prilično teško objasniti da pre nego što počnete da im pišete
program treba da dokupe još neki MB memorije, i, da biste im
napisali program, moraju prvo da kupe neki drugi program, koji
NE RADI njihov problem a košta dve hiljade dolara.
Sve se ovo odnosi, naravno, na programiranje na PC-jima. Na
jačim mašinama je sasvim druga priča. I na njima su sistemi za
baze izuzetno spori. Ako hoćete brrrz program, morate da pišete
na COBOL-u. (!) (Baš mi je žao što taj jezik (još) ne znam.
Karakteristično je da ga i kod nas i u svetu uglavnom predaju
samo na višim školama, i na nekim levim mestima, pa ga malo
jakih programera zna, što apsolutno nije u redu). Ali, opet,
često je brzina izvršavanja nebitna. Bitno je brzo podesiti
program prema zahtevima koji se značajno promene, a da se ne
unosi nova nestabilnost u sistem.
Hvala bogu, moji omiljeni računari, tipa SUN microsystems
i klonovi, sve su jeftiniji. Nažalost, kod nas ima sve manje
para, inače bi i mi već sada osećali ono širenje kakvo je PC
imao svojevremeno, ali sa SUN klonovima, na kojima bismo,
naravno, pisali ljudski.
Šta je bottom line ove priče? Pa možda to da sam ovaj računar
na kome radim zaradio pišući aplikacije na Clipper-u, i da još
nisam bio u prilici da mi neko plati da pišem na nečem drugom.
A kad budem bio, drage volje ću pisati na tim divotama.
Ima li ponuda? mail send janko
:>
Hvala na pažnji.
clipper.357dejanr,
>> Koliko znam, u dBaseIII+ nema ni pomena od SQL-a.
Verovatno je mislio na dBASE IV koji ima SQL (kakav - takav). Mada
tim dBASE-om IV ne da nisam oduševljen nego sam ga i sa disketa
obrisao ;)
clipper.358dejanr,
>> Meni stroga tipizacija nikada nije nedostajala, a mislim da bi u
>> Clipper-u više smetala nego koristila. Jer, priznaćete da je teško
>> deklarisati ovakav niz:
>>
>> {1, "ABC", {1, 2, 3}, { |x| x++ }}
Tačno, ali moram reći da meni takav niz nije potreban, il ajd' da kažem
"jako mi je retko potreban". A kontrola dodeljivanja (tj. njen nedostatak)
prave svakodnevne (ili bar svakonedeljne) probleme.
clipper.359ppekovic,
>> Rad sa bazama uključuje i prikaz njihovog sadržaja. I sam vidiš
>> da to NE 'radi sasvim dobro.' :)
Lepo je čovek rekao da je početnik i da se zbog toga ne snalazi
najbolje sa načinima za pripremu i slanje izveštaja na štampač. Dakle,
to što neko nešto nezna, neznači da određeni kompajler tu mogućnost
nema. S obzirom da si izjavio da si radio u Clipper-u, onda bi trebao
da znaš da clipper pruža sasvim solidne mogućnosti za generisanje
izveštaja za štampu, pa pored "čisto programerskog" č say ... sistema,
tu je i mogućnost štampe uz pomoć .frm i .lbl fajlova.
Paya
clipper.360ppekovic,
>> 2-3 meseca. A onda: kupac vidi magičnu poruku (parafraziram):
>>
>> Variable not found at module LOVA, line 123
Viđao sam programe na "ozbiljnim" jezicima koji su me pozdravljali
sa RUN-TIME EROOR ili čak blokiranjem računara. Dakle, sve to zavisi
od znanja i umeća programera. Clipper ima odličan error sistem koji ti
pruža mogućnost da u ovakvim slučajevima program prepusti kontrolu
tvom sistemu za obradu greški koji će se pobrinuti da podaci budu
bezbedni, upisati u LOG fajl šta se desilo, i ostaviti odgovarajuću
poruku korisniku da se javi autoru programa.
>> Tako se pišu remek dela, zar ne? :)
Kao što sam već napisao, slažem se sa tobom, tako se ne pišu remek
dela. Zato hvala clipper-u na onako divnom eroor sistemu!
Paya
clipper.361hercog,
Pre neki dan uvatim ja i napišem sledeće :
procedure pro(pass)
pass2=""
for i:=1 to len(pass)
pass2=pass2+chr(asc(substr(pass,i,1))+10)
next i
pass=pass2
return
I sadržaj promenljive pass ostane nepromenjen. Zašto?
Hercog
clipper.362hercog,
**> Voleo bih neki Clipper 6.0 koji bi ličio na 5.01 i samo
**> imao kao
clipper.363andrejl,
Da pitam za nečije mišljenje :
Neko ko se bavi Clipper-om treba odjednom (bez prethodnih
iskustava) da uradi software u Foxbase (po mogućstvu) koji
će da radi pod Unix-om. Elem taj neko u životu pre nije
radio ništa po Unixom i sad paf.:)
Kakve su mu šanse ?
bye, andrejl
P.S. dajte ljudi ohrabrite me
clipper.364janko,
> Viđao sam programe na "ozbiljnim" jezicima koji su me
> pozdravljali sa RUN-TIME EROOR ili čak blokiranjem
> računara. Dakle, sve to zavisi
Ali ne zbog greške u kucanju programa, već zbog konceptualnih
greški ugrađenih u program.
> Kao što sam već napisao, slažem se sa tobom, tako se ne
> pišu remek dela. Zato hvala clipper-u na onako divnom
> eroor sistemu!
>
Ma ni 'eroor' i error sistem ne obezbeđuju te od toga da rad
može bezbedno da se NASTAVI, već samo da se malo bezbednije
PREKINE. A imaj u vidu da se rad prekida najverovatnije zbog
obične greške u kucanju imena promenljive! Tako nešto u
jezicima u kojima se deklarišu promenljive je potpuno nemoguće.
clipper.365janko,
> nema. S obzirom da si izjavio da si radio u Clipper-u,
> onda bi trebao da znaš da clipper pruža sasvim solidne
> mogućnosti za generisanje izveštaja za štampu, pa pored
> "čisto programerskog" č say ... sistema, tu je i mogućnost
> štampe uz pomoć .frm i .lbl fajlova.
Znam. Znam i ograničenja tih koncepata koje pruža. I baš su
svojska. Hajde pomoću .FRM ili .LBL fajlova probaj da generišeš
izveštaj koji nije potpuno nalik onome što su tvorci dBase-a
zamislili. I jedni i drugi su pogodni, po meni, samo za kućnu
upotrebu (kada interaktivno, za sebe, i samo jedanput, želim da
prikažem neke podatke). Teško da se mogu ugraditi u neku
aplikaciju, iole sofisticiraniju.
No, nije potrebno da pričamo o tome, bolje da se raspravljamo
oko toga koji su koncepti generisanja izveštaja najbolji, i ko
kakve primenjuje, kako bismo svi pisali bolje programe. Napr.
ja izveštaje generišem obavezno u datoteku, koja obično pre
slanja na štampač 'prođe' i kroz tekst formater koji sam sam
napisao, naravno ne u Clipperu. To je vrlo zahvalan koncept. U
Oraklu, naprimer, postoje čak dva nivoa reformatera sirovih
izveštaja. Takođe, mislim da je prilično neisplativo, sa
stanovišta prelaska na nove verzije, pisati dodatne funkcije za
Clipper u mašincu, osim piscima FUNCKY i sličnih paketa koji od
toga žive. Ipak, mislim da se SAMO korišćenjem Clipper-a ne
može napraviti elegantna aplikacija. Itd, itd. Možda vam je
sad jasnije zašto sam rekao to što sam rekao. Verujte,
sve što sam napisao
ima neki smisao (B.Đ). :)
clipper.366nbatocanin,
> Kao standard je nastao jos pocetkom 70.-ih godina, i prakticno je (sa
> manje ili vise izmena) implementiran u vecini danasnjih database
> sistema, izmedju ostalog i u dBaseIII+ (tj. i u ranijim verzijama),
> sto znaci i u svim programima nastalim na osnovama dB (a to opet
> znaci npr. i Clipper).
dBASE jezici ne podržavaju SQL, jedino nisam siguran za dBASE IV.
Primera radi, za Clipper se mogu dokupiti programi koji omogućavaju
SQL naredbe.
clipper.367andrejl,
>│ Ne znam u čemu je štos, ali možeš poslati program pa da
>│ vidimo.
Kasno je. Uništio sam ga :)
clipper.368andrejl,
>│ I sadržaj promenljive pass ostane nepromenjen. Zašto?
Ja probao i kod mene se menja pass pre i posle petlje.
Ne znam šta je problem
bye, andrejl
clipper.369vkrstonosic,
>> Ma ni 'eroor' i error sistem ne obezbeđuju te od toga da rad
>> može bezbedno da se NASTAVI, već samo da se malo bezbednije
>> PREKINE. A imaj u vidu da se rad prekida najverovatnije zbog
>> obične greške u kucanju imena promenljive! Tako nešto u
Pa postoji i nešto što se zove testiranje programa. Svaki program,
pre nego što se pusti u rad, prvo se dobro istestira u samoj firmi,
posle se jedno vreme radi kod kupca i to sa unošenjem nebitnih
podataka, pa se tek onda počinje stvarno korišćenje programa. Ja svaki
program probam mnogo puta i prolazim kroz sve moguće kombinacije. Kako
si to istestirao program (i prodao), ako uopšte nisi stigao do
odredjene grane u programu ??? To opet dolazi do priče o "raznim"
programerima, a oni ovde nisu ni bitni.
clipper.370hercog,
**> Mislim da ovo ne necu menjati! Meni su uvek cekovi isli
**> jedan za drugim pa pretpostavljam da je to uobicajeno
**> stanje stvari kada
Bogme kod pošte nije takav slučaj. Ja dobijam čekove koji ne idu
jedan za druim po brojevima...
Hercog
clipper.371bulaja,
│Verovatno je mislio na dBASE IV koji ima SQL (kakav - takav). Mada tim
│dBASE-om IV ne da nisam odusevljen nego sam ga i sa disketa obrisao ;)
└───
Malo sam gledao po literaturi koju imam, i sad sam malo zbinjen sta je
zvanicno definisan SQL. Kao jedan se spominje onaj koji je nastao jos
70.-ih i za koji se kaze da je izmedju ostalog ugradjen cak i u dB II
(izvor neka knjiga o Oracle-u), dok sam naisao i na ANSI standard za SQL
koji je zvanicno izdat tek '86 (sto znaci da nema sanse da je bio pre dB
IV). A inace i ja se secam da je dB IV bio uzas ...
clipper.372bulaja,
│clipper pruza sasvim solidne mogucnosti za generisanje izvestaja za
│stampu, pa pored "cisto programerskog" Z say ... sistema, tu je i
│mogucnost stampe uz pomoc .frm i .lbl fajlova.
└───
Ma ti .frm i .lbl su blagi uzas, jos do ksam se patio samo sa dBase (tj.
FoxBase) trudio sam se da ih izbegavam koliko god je to bilo moguce. Cak
i obicno list ... to print mi je bilo bolje. A "programerski" @ .. say
sistem je vise nego dovoljan i sasvim solidno uradjen, ne vidim sta mu
fali?
clipper.373bulaja,
│procedure pro(pass)
│ pass2=""
│ for i:=1 to len(pass)
│ pass2=pass2+chr(asc(substr(pass,i,1))+10)
│ next i
│ pass=pass2
│return
│
│I sadrzaj promenljive pass ostane nepromenjen. Zasto?
└───
Kakva misterija! O;>
Posto imam resign na extra:misterije, evo ipak odgovora ovde ;).
Resenje: izbaci pass kao parametar, posto ga vec koristis kao public
promenljivu nema svrhe da ga tako deklarises, zato ti i vraca staru
vrednost. Konstruktivna kritika: konstrukcija procedure je uzasna -
napisi bre normalnu funkciju sa parametrom a:=pass koja vraca
b:=novi_pass. Konstruktivni savet: nauci se da deklarises kao local/
private promenljive poput "i" i "pass2" (to kad naucis ono prvo ;).
Kriticko opazanje ;) : sigurnost zastite ti je DJ O;>.
clipper.374nbatocanin,
Ako se program prevodi sa /W biće prijavljene sve nedeklarisane
promenljive. Pri interpretiranju izraza (makroi) jedini način za
kontrolu su "statički simulatori izvršavanja", što ne sadrže u sebi
ni jezici sa veoma strogom tipizacijom, pa sledi da ovo tvoje nije
baš tačno.
A i pričaj malo tiše.
Pozdrav, Nenad
clipper.375nbatocanin,
Mislim da bi se statističkom analizom utvrdilo da neki ljudi više
prave sintaksne (pogreše pri kucanju imena promenljive) a drugi
logičke greške (program je sintaksno ispravan, ali ne radi). Sad je
samo pitanje kojoj grupi ljudi prilagoditi jezik.
Nešto se setih, a da li koristite opciju /W pri prevođenju? Ona
javlja sve nedeklarisane promenljive, čime se jako smanjuje
verovatnoća greške. Jer, da bi onda naredba
Pera := Mika + 1
proizvela sintaksnu grešku, pri pogrešnom kucanju se mora "potrefiti"
neka već deklarisana promenljiva ili sabrati broj sa stringom, što je
manje verovatno.
Voleo bih da neko pošalje svoj primer iz prakse gde je ova osobina
zaslužna za grešku, da malo proanaliziramo.
clipper.376nbatocanin,
> Daleko moćniji sistemi baza podataka, (a Clipper čak ni to
> nije, subjektivno)
Zašto? žini mi se da se Clipper sasvim solidno uklapa u školske
definicije DBMS-a.
> Po pravilu, za izveštaj koji možeš da generišeš sa dva-tri reda u
> SQL-u, naprimer, morao bi da se oznojiš, i pišeš satima na Clipperu.
Ja solidno poznajem SQL i ne čini mi se da ja baš ovako.
> Ako hoćete brrrz program, morate da pišete na COBOL-u. (!) (Baš mi je
> žao što taj jezik (još) ne znam.
Da ne ispadne da se hvalim, ali ja znam COBOL i ovo mi zaista nije ni
poznato ni logično.
Ostatak poruke govori o tvom odnosu prema poslu i nije odgovor na
moje pitanje. Dakle, pitanje i dalje ostaje otvoreno. Može li neko
ukratko reći bar za FoxPro? NDragane?
clipper.377nbatocanin,
Zato što se PASS mora prenositi po adresi, da bi izmena bila
prihvaćena. Tada se f-ja poziva sa F(@PASS). Ali, nemoj bre tako da
programiraš! Funkcije služe da vrate neku vrednost, pa smisli nešto.
Kad ćeš da pošalješ parče onog tvog programa sa SORT-om što je
brljalo po disku? Ovo bi i druge interesovalo.
Pozdrav, Nenad
clipper.378dejanr,
>> Pa postoji i nešto što se zove testiranje programa. Svaki program,
>> pre nego što se pusti u rad, prvo se dobro istestira u samoj firmi,
>> posle se jedno vreme radi kod kupca i to sa unošenjem nebitnih
>> podataka, pa se tek onda počinje stvarno korišćenje programa.
Tačno, ali je bolje da pri samom prevođenju kompjuter pronađe što više
grešaka i potencijalnih grešaka! Rad računara je mnogo jeftiniji od
rada čoveka.
clipper.379draganf,
>
> Da pitam za nečije mišljenje :
> Neko ko se bavi Clipper-om treba odjednom (bez prethodnih
> iskustava) da uradi software u Foxbase (po mogućstvu) koji
> će da radi pod Unix-om. Elem taj neko u životu pre nije
> radio ništa po Unixom i sad paf.:)
> Kakve su mu šanse ?
>
Otprilike dobre ako imaš barem spisak maredbi koje postoje samo
u jednom od ta dva jezika (npr. ACHOICE ni u kom slučaju ne postoji
u Foxbase - u). Editorom možeš automatski promjeniti
naredbe koje rade isti posao ali imaju drugačiji naziv (npr.
COMMIT u FLUSH). žini mi se da su naredbe za menije nešto
drugačije. Sve u svemu nije neki problem izuzev toga što
nisi prije koristio Foxbase. Mogu ti pomoći u nekum stvarima
pošto koristim Clipper i Fox istovremeno.
što se tiče Unix -a tu neznam šta da ti savjetujem, ali imaš
priliku da upadneš u to i nešto naučiš. Tu je sad stvar koliko imaš
vremena da to uradiš.
Dragan
clipper.380vbole,
>> š1, "ABC", š1, 2, 3ć, š đxđ x++ ćć
>
> (Zgroz!) (trnci mi prođoše kroz kičmu)
Šta mu fali ?
Tako ( slično ) možeš da deklarišes ček, rešio si problem sa korisnikom,
sumom, uplatom u tri rate itd. Dodeli imena poljima i pristup je logičan
i shvatljiv.Ako dodaš i komentar...
> kaže sve je u redu. Proda program. Program fino radi. Ali jedna
> grana nekog if-a nikada se ne izvrši tokom testiranja i sledeća
> 2-3 meseca. A onda: kupac vidi magičnu poruku (parafraziram):
A bez ove deklaracije to ne može da se desi ?
To je greška koja se obično pojavljuje kod krpljenih programa, koji nemaju
logičan tok programa, nego se dodaje opcija na opciju, a ne na glavni
program.
bye... vbole
clipper.381vkrstonosic,
>> Tačno, ali je bolje da pri samom prevođenju kompjuter pronađe što više
>> grešaka i potencijalnih grešaka! Rad računara je mnogo jeftiniji od
>> rada čoveka.
Slažem se, ali ipak u testiranju programa treba probati sve opcije
i sve slučajeve, jer sintaksne greške su najmanji problem (najlakše se
nalaze), mnogo veći problem može da nastane zbog logike.
Uostalom, Clipper 5.01 dozvoljava da se sve promenljive deklarišu.
Posle treba kompajlirati sa opcijom /w i kompajler će naći sve
pogrešno napisane promenljive, jer nisu definisane.
clipper.382janko,
> podataka, pa se tek onda počinje stvarno korišćenje
> programa. Ja svaki program probam mnogo puta i prolazim
> kroz sve moguće kombinacije. Kako si to istestirao program
> (i prodao), ako uopšte nisi stigao do odredjene grane u
> programu ??? To opet dolazi do priče o "raznim"
> programerima, a oni ovde nisu ni bitni.
Prolaz kroz sve moguće kombinacije je nešto što u teoriji
testiranja spada u tzv. metode bele kutije. Da bi testirao neku
proceduru, moraš ispred sebe imati njen sors i napisati test
primere za njega i stabove ili drajvere, zavisi od toga kojim
redom testiraš delove programa. Recimo da procedura ima 10
if-else-va, jedan iza drugog. Ukupno postoji 2**10=1024 putanja
kroz tu proceduru.
Ti ih, naravno, po svom iskazu, prođeš sve? :) To znači da
program od sedam hiljada linija (nije to puno za program na
Clipper-u, to i sam, valjda, znaš) testiraš koliko godina, pre
nego što ga daš kupcu? Ili priznaješ da spadaš u "razne"
programere, po sopstvenoj definiciji?
Uostalom, prvo pisanje programa nikad nije kritično koliko
kasnije izmene. Ti, naravno, i posle svake izmene, smisliš nove
test primere, pa opet istestiraš ceo program?
> pre nego što se pusti u rad, prvo se dobro istestira u
> samoj firmi, posle se jedno vreme radi kod kupca i to sa
> unošenjem nebitnih podataka, pa se tek onda počinje
> stvarno korišćenje programa. Ja svaki
Testiranje unošenjem NEBITNIH podataka je izuzetno slabo
testiranje.
- * -
Nantucket je svestan problema koji nastaju zbog toga što
kompajler ne može da uoči greške o kojima sam pričao. Oni pričaju
o leksičkoj i dinamičkoj vidljivosti (lexical and dinamical
visibility), uvode Local definiciju, savetuju da se svaka
promenljiva mora deklarisati pre upotrebe, i da 'lexical scoping'
daje 'greater degree of protection.' Ipak, Clipper pri prevođenju
ne zna koje su promenljive prave, koje su polja iz baza, a koje
niodakle.
Znaš, davne '86. kada sam razmišljao o svom pozivu, a poznajući
teorijske domete u računarskim naukama, brinuo sam se da li će za
nekoliko godina, možda, softverski stručnjaci postati skoro
nepotrebni. Onda, kada sam video šta se događa u svetu sa ovim
igračkama PC-jima, postalo mi je jasno da gnjusni proizvođači svi
proizvode tako, da se to ne dogodi. To je za nas koji zarađujemo
u toj struci dobro. Tako gledano, čak i to što je Clipper takav
kakav jeste je dobro -- ne daj bože da je savršeniji, pa tako,
razumem i neke tvoje stavove, a na neki način se i slažem sa
njima, više haosa u računarstvu, više posla! :) Što opet ne
znači da pravi stručnjak treba da slepo veruje da je takav haos
najbolji način i privatno. Stručnjak od spoljnjeg haosa pravi
svoj interni mir, i po tome se razlikuje od onih drugih :)
A koliko ja ozbiljno pristupam poslu, možda bi upravo trebalo
moje ostale poruke u ovoj temi da ti govore, pa ih pročitaj, ako
nisi.
Za kraj, divna konstatacija NBatoćanina.
> Moram da napomenem i da sujeta vlada našim programerima u
> upravo neverovatnim količinama: da li ste sreli nekog
> programera, da mu kažete da nešto ne zna ili nije dobro, a
> da se ne naljuti? Iskreno, veoma retko! A ovih drugih,
> koliko oćeš. Kad bi se po nadutosti pojedinaca merila naša
> softversko-hardverska moć, bili bi bez premca. Na žalost,
> delovi rasprava na Sezamu govore ovo isto.
T-T-T-Thats all falks!
clipper.383ivans,
* Testiranje unosenjem NEBITNIH podataka je izuzetno slabo
* testiranje.
Da, zato se i uvodi paralelna obrada podataka, svaki put kada dode do izmena u
programu (u novoj verziji softvera :)...
Pozdrav,
Ivans.
clipper.384vkrstonosic,
>> redom testiraš delove programa. Recimo da procedura ima 10
>> if-else-va, jedan iza drugog. Ukupno postoji 2**10=1024 putanja
Da, redovno mi dešava da u programima imam 10 if-ova jedan u
drugom.
>> nego što ga daš kupcu? Ili priznaješ da spadaš u "razne"
>> programere, po sopstvenoj definiciji?
Tja, klasičan metod diskusije na Sezamu, sve mora da bude lično.
Kakav sam ja programer je moj problem, ako te posebno zanima, nema
problema, reci i vrlo radu ću ti demonstrirati neke svoje programe,
objasniti ti šta sve rade i kako rade.
>> Testiranje unošenjem NEBITNIH podataka je izuzetno slabo
>> testiranje.
Pod nebitnim podacima, podrazumevam realne podatke i realno
korišćenje programa, uz razne ograde, kao čest backup, vodjenje
podataka onako kako je vodjeno ranije, sve dok se ne ustanovi da je
program pouzdan i da se na njega može osloniti. Dužina ovog perioda
zavisi od mnogo faktora. Ovo naravno važi u slučaju kada se pravi
karakterističan program za odredjenu firmu i primenu. U slučaju
"štanc" programa, stvar je drukčija.
clipper.385nimi,
/da ne duzim. :)
Povodom toga da u sql covek moze da napise izvestaj u dva reda.
moze ali samo trivijalan takav se u Clipper-u moze dobiti sa naredbom list
a sql-ov join se moze prevazici u vecini slucajeva ili jednostavnim set
relation ili prostijom funkcijom koja pretrazuje tabelu(datoteka tipa .dbf u
clipper-u)
Neznam da li si pokusao da u sql prebacis da ti jedna kolona ide u
zaglavlje tabele za to bi morao da napises program u Pro*C-ju ili Pro*Cobol-u
Da je sql mocan kao sto mislis ljudi iz oracla ne bi ubacili PL/SQL koji u
svojoj strukturi predstavlja proceduralni jezik, jos uvek ne snabdeven
nizovima(najavljeno za verziju 1.1).
Na tvojoj omiljenoj masini (Sun SPARC ) ja trenutno radim na ORACLU V6.0
i nisam prezadovoljan brzinom iako imamo dva servera jedan ocenjen sa
28 mips-a a jedan sa 18. Jer ORACLE pojede onako divnu masinu, pa sem
RDBMS-a je sve ostalo maltene besmisleno koristiti i ako su ustede u
programiranju velike narocito ako si sklon maltretiranju korisnika
da pritiskaju funkcionalne Ú]tipke.
Ne kazem da je lose raditi na ORACLU narocito za one koji pocinju
jer se sa malo rada mogu postici neke stvari za koje je bilo ranije
potrebno puno vremena narocito na velikim masinama.
Sto se Clipper koncepcije tice vise mi odgovara da na jednom mestu
saspem sve sto znam nego da kroz par prozora ispisem ono sto zelim.
Sa 6 i nije tako lose raditi ali sa 5.1.xx je cist mazohizam .
pozdrav MNikolic.
clipper.386hercog,
**> Resenje: izbaci pass kao parametar, posto ga vec
**> koristis kao public
Otkud ti ideja da je pass public promenljiva?
**> Kriticko opazanje ;) : sigurnost zastite ti je DJ O;>.
Nije mi ni trebalo nešto bolje, ovo je samo da se zamažu oči
neznalicama ;)
**> vrednost. Konstruktivna kritika: konstrukcija procedure
**> je uzasna -
Šta fali proceduri?
Hercog
clipper.387nbatocanin,
Otkrio sam grešku u programu za generisanje izveštaja
R075CLPR.ZIP. Evo ispravljene verzije. Izvinjavam se ako sam vam
ovim napravio neke neprilike.
Pozdrav, Nenad
clp.zipclipper.388nbatocanin,
Kada se Clipperov sistem za upravljanje datotekama približi
granici od 20 otvorenih datoteka, mogu se desiti vrlo čudni efekti: u
dibageru nestaje deo teksta, prijavljuju se neke čudne i nepostojeće
greške i sl. Tada treba izvršiti DOS komandu
SET CLIPPER = FXX ( XX > 20 )
i stvar će se srediti. Može se i program startovati sa:
PROG //FXX
clipper.389dpaun,
Clipper braćo i drugovi,
čeleo sam ozbiljnu razmenu iskustava sa memo podacima. Sve
diskusije za i protiv Clp - bez ovog njegovog dela - su
falične. Avaj. Stavio sam svima na raspolaganje kompletnu
help radionicu (vidi poruku 5.321 i fajlić POMOC.ZIP uz
njega). Avaj.
====> O sî va rugac vuoj đi minje!
Za uzdarje, molim za odgovor na sledeće pitanje:
1) čeleo bih da registrujem svoj program.
Šta sve treba pripremiti i gde odneti.
(Priča se da ima neka autorska agencija,
da treba odneti listinge i sl. Da li je
neko od vas to već radio? Molim za uput.)
dPaun
clipper.390bulaja,
│Otkud ti ideja da je pass public promenljiva?
└───
Pa bez obzira da li si je deklarisao kao private ili public, ona je za
proceduru koju pozivas vidljiva.
│Sta fali proceduri?
└───
Sto nije funkcija.
clipper.391andrejl,
>│ Kad ćeš da pošalješ parče onog tvog programa sa SORT-om
>│ što je brljalo po disku? Ovo bi i druge interesovalo.
SORT i brljanje na disku ?
Jedan moj programčić je sa sortom kod mene savršeno radio,
dok je na drugoj mašini kad bi se broj slogova nešto povećao
brljao i brljao.
Da nije u pitanju neka konfiguracija sistema ?
clipper.392andrejl,
>│ nisi prije koristio Foxbase. Mogu ti pomoći u nekum
>│ stvarima
fox sam koristio (istina kratko)
Hvala na utehama. Sad samo da stvorim vremena :)
P.S. prethodna iskustva se odnose na Unix O:)
clipper.393dpaun,
Evo još jedne osobine Clp5.01
Uključio sam u svoj program FILEMAN.PRG iz priručnog
.prg paketa (omgućava da se iz vaše aplikacije šet-
kate po direktorijumu i sl.). U početku je bili kam
sve u redu, ali kako mi se prog povećavao (a rastao
je ko kvasac!) - u pojedinim trenucima primećivao sam
u spisku dos fajlova neke "fantome" (kao: ABGHHUT i
slično), koji su se gubili po izlasku iz programa!
Poslao sam FILEMAN bratu nBatocaninu na pregled,
ali - ništa, veli on! I zaista ništa kad se FILEMAN
prevede i startuje sam za sebe. Oni fantomi pojavlju-
ju se samo kad je program pozamašan.
Posle dužeg eksperimentisanja - shvatih: ti fantomi
su nazivi internih overleja! Ovo sam zaključio po tome
što program "poludi" kad ih obrišem, a kad siđem u
DOS (ako u međevremenu ne dođe do blokade) i startam
ponovo - sve bude u redu.
Ne znam da li ima načina da se ovo spreči?
dPaun
clipper.394hercog,
Evo nečeg interesantnog :
use datoteka
go top
sort on polje to datoteka
close databases
Ovo je deo jednog programa koji je pravio probleme dok nismo primetili
da je sortiranje u istu datoteku. Naime ovaj programa će s vremena na
vreme da izbriše celokupnu datoteku (sve podatke i strukturu), da osta-
vi njeno ime na disku. Kad to uradi, sledeći put kad se pozove ta dato-
teka dobiće se poruka : CORUPTION DETECTED ON DATOTEKA....
Hercog
clipper.395hercog,
**> ====> O sî va rugac vuoj đi minje!
????
Hercog
clipper.396bulaja,
│Otkrio sam gresku u programu za generisanje izvestaja R075CLPR.ZIP.
│Evo ispravljene verzije.
└───
Eno je u \RSOFT\r075clpr.zip umesto stare.
clipper.397dejanr,
>> Ne znam da li ima načina da se ovo spreči?
Pa, naravno da nema, program ih kreira omogućavajući time da se
izvršava nešto što inače ne bi stalo u memoriju. I to se dešava
sasvim automatski, što je glavna prednost clipper-a 5 nad
slavnim prethodnikom.
clipper.398dpaun,
>> >> Ne znam da li ima načina da se ovo spreči?
>>
>> Pa, naravno da nema, program ih kreira omogućavajući time
>> da se izvršava nešto što inače ne bi stalo u memoriju.
Nisam mislio da se spreči kreiranje internih ovl, već da
se spreči prikazivanje njihovih imena u listi DOS fajlova
koju prikazuje FILEMAN, jer to unosi zabunu. Postoji li
neki Clipperov način, ili se mora pribeći triku.
Kom i kako, važno je jako.
dPaun
clipper.399dpaun,
>> **> ====> O sî va rugac vuoj đi minje!
>>
>> ????
A, to? To je jedan stari balkanski jezik.
Pogodi koji.
dPaun
clipper.400dpaun,
cLp Braćo.
Clp 5.01, kao ni ranije verzije, ne može da dođe do oznake
tekućeg drajva (ili uređaja, kako kaže prof. Darko V).
CURDIR() vraća ime(na) dir, ali bez drajva. Kod Strelija ima
jedan primer u C-u (čini mi se). Nisam ga isprobao jer nemam C.
Koristio sam dosetke preko RUN DIR > BrljBrlj, pa onda AT,
MEMOREAD() i slično. Nezgodno, prilično.
Ima li neko asemblersko rešenje?
=> Mjar fi drag sîn spunjec!
dPaun, uom bun.
clipper.401bulaja,
│use datoteka
│go top
│sort on polje to datoteka
│close databases
└───
Aaaaaaaahhhhh, da li je ovo resenje misterije oko BUG-a clipper-ovog SORT?
clipper.402hercog,
**> u spisku dos fajlova neke "fantome" (kao: ABGHHUT i
Slična stvar se dešavala i sa jednim programom koji smo pisali iako
nije imao fileman u sebi. Jednostavno na disku program ostavi neki
fajl kao "DDHAKSAA", a da niko ne zna zašto.
Hercog
clipper.403kole,
>> tekućeg drajva (ili uređaja, kako kaže prof. Darko V).
Slučajno je i meni trebalo nešto slično, pa evo gotovog rešenja,...
Poziva se sa _GETDRIVE() i vraća broj trenutnog drajva (0=A, 2=C, ...)
Radi za Clipper 5.01.
Pozdrav,
Kole
getd.objclipper.404hercog,
**> Aaaaaaaahhhhh, da li je ovo resenje misterije oko BUG-a
**> clipper-ovog SORT?
Nisam rekao da je bug u clipperovom sortu već samo da je bilo
problema u vezi njega
Hercog
clipper.405nbatocanin,
> SORT i brljanje na disku ?
Ja sam svedok, brljalo je. Doduše, ne znam čemu uopšte i koristiti
naredbu SORT. Za šta je vi koristite?
clipper.406nbatocanin,
> Ne znam da li ima načina da se ovo spreči?
Da li bi program mogao da razlikuje te interne overleje (u stvari, swap
datoteke) po nazivu i atributima?
clipper.407radunovic,
Da li bi neko mogao da mi posalje kratak primer povezivanja clipper i c
programa ukljucujuci i sviceve za kompajler i linker, pri cemu c program poziva
neku od biblioteckih funkcija, npr. printf, putch,.. (u MSC 6.0).
clipper.408nbatocanin,
> Aaaaaaaahhhhh, da li je ovo resenje misterije oko BUG-a
> clipper-ovog SORT?
Aha! :))))
clipper.409nbatocanin,
> Pogodi koji.
Staroslovenski?
clipper.410nbatocanin,
> Kom i kako, vaćno je jako.
Je li brother Paune, a ëta mislië da postavië SWAPPATH i TEMPPATH na
neki levi katalog? Koliko znam ovo se moće uraditi i pri startovanju
programa:
PROG //SWAPPATH:xxxxx
clipper.411nbatocanin,
Evo i mog priloga na ovu temu: ASM programüiä koji podrćava DISKNAME,
DISKCHANGE, DIRCHANGE, DIRMAKE, DIRREMOVE. Program je krajnje
jednostavan, samo poziva odgovarajuäe DOS funkcije. Zgodno da
"simulirate" CD, RD i MD.
dir.zipclipper.412sasa.m,
=->**> ====> O sî va rugac vuoj đi minje!
Vlaški?
clipper.413ppekovic,
>> Da li bi neko mogao da mi posalje kratak primer povezivanja clipper i c
>> programa ukljucujuci i sviceve za kompajler i linker, pri cemu c program
>> poziva neku od biblioteckih funkcija, npr. printf, putch,.. (u MSC 6.0).
O ovome se stvarno pričalo xxx puta i nijednom nismo došli do
rešenja. Neke stvari rade bez problema a neke neće ni da čuju. Loše u
svemu tome je što najkorisnije stvari ne rade a to su grafičke
funkcije, chart funkcije, ali i neke osnovnije kao što su sve iz
stdio.h hedera. Problem se javlja prilikom linkovanja kada te linker
zaspe gomilom upozorenja o duplo definisanim simbolima. Linker
generiše izvršni program, ali je on totalno nepouzdan.
Paya
clipper.414dpaun,
>> Da li bi program mogao da razlikuje te interne overleje
>> (u stvari, swap datoteke) po nazivu i atributima?
Koliko sam ja mogao da zaključim iz dosadašnje prakse:
a) njihovo se ime formira baš sa namerom da nema neke
ovozemaljske logike (verovatno da se ne bi preklo-
pile slučajno sa nekim fajlom);
b) nemaju prezime, verovatno iz razloga a);
c) veličina im varira, od 0 do 100 i više K.
Zaključak: nema neke pravilnosti na osnovu koje bi se
mogla napisati naredba za sprečavanje njihovog
uključenje u fajl listu.
dPaun
clipper.415dpaun,
>> Je li brother Paune, a ëta mislië da postavië SWAPPATH i
>> TEMPPATH na neki levi katalog? Koliko znam ovo se moće
>> uraditi i pri startovanju
Brate Nenade, ovo bi mogao biti dobar pravac traganja za
rešenjem. Proveriću čim dobijem malo (programerskog)
vremena.
dPaun
clipper.416dpaun,
>> Staroslovenski?
Malko stariji od staroslovenskog (što se Balkana tiče, bar).
Kare ljimbâ, vrej sîc spun?
Ći sarutâ,
dPaun
clipper.417dpaun,
>> ====> O sî va rugac vuoj đi minje!
>>
>> Vlaški?
Pun pogodak, dragi komšija.
Sezam je, dakle, progovorio i Vlaški.
Sî krjaskâ, sî trajaskâ,
la mulc anj ku sînataće.
-----------------------
(Na mnogaja ljeta, što bi se
reklo na bratskom staroslovenskom!)
P.S. Saša, je si li pročitao zadnji broj
"Borskih novosti"?
dPaun
clipper.418ilazarevic,
█ Malko stariji od staroslovenskog (što se Balkana tiče, bar).
Ilirski, tračanski, dačanski?
clipper.419hercog,
Evo nečeg što me malko ***ebava : lepo napišem set cursor off da isklju-
čim kurzor, al on se i dalje vidi na ekranu?!?!
Hercog
clipper.420sasa.m,
=-> P.S. Saša, je si li pročitao zadnji broj
=-> "Borskih novosti"?
Ovlaš (tj. prelistao).Što jel' ima nešto zanimljivo?
clipper.421dpaun,
>> Evo i mog priloga na ovu temu: ASM programüiä koji
>> podrćava DISKNAME,
Preuzeo, preveo, uvezao. Radi.
Hvala.
dPaun
clipper.422dpaun,
>> nije imao fileman u sebi. Jednostavno na disku program
>> ostavi neki fajl kao "DDHAKSAA", a da niko ne zna zašto.
Mislim da je reč o istoj pojavi, stim što je u mom slučaju,
zbog Fileman opcije, overlej vidljiv još u toku korišćenja
samog programa.
dPaun
clipper.423dpaun,
>> Ovlaš (tj. prelistao).Što jel' ima nešto zanimljivo?
Zbog feljtona "Slovo o Vlasima" koji pišu neidentifikovani
borski "etnogenetičari". U ovom zadnjem nastavku ("Vlasi
među srpskim stvaraocima", čini mi se) spomenuta je i moja
("etnološka i etnomuzikološka") malenkost, i to sa takvim
atributima da se već nekoliko dana osećam kao "istorijska
ličnost"!
Koji li će se sokak po meni zvati, da mi je znati?
d(Es)Paun.
P.S. Pošto sam malo uvrnuo Clp conf sa ovim lingivističkim
e(g)zoterijama, evo i jednog Clp pitanja za tebe: Koji ti se
to profa interesuje za Clipper?
clipper.424dpaun,
>> lepo napišem set cursor off da isključim kurzor,
>> al on se i dalje vidi na ekranu?!?!
Javljam se ne zato što mislim da znam koja je to ko tebe
misterija, već zato što sam imao sličan problem, a o(d)sedeo
sam dok sam shvatio u čemu je stvar.
Za početak: stanje kursora u Clp501 se može kontrolisati.
Kursor sakriješ sa SETCURSOR(0), a sa ? SETCURSOR()
proveravaš da li je to programu doprlo do mozga. Odgovor
treba da bude 0.
Za nastavak: kod mene je cela misterija bila u tome što je između
radnje koja se obavljala sa sakrivenim kursorom i sledeće
radnje (sa normalnim kursorom) prolazilo izvesno vreme pa je
kursor oživljavao, dabome, zatečen na poslednjoj poziciji!
Tako sam imao (lažan) utisak da se kursor ne sakriva, već
mi tera inat ...
*
Problem sam rešio na sledeći način:
(1) SETCURSOR(0) // Sakrij kursor
(2) č 2,65 Say to-i-to // Radnja sa skrivenim kursorom
(3) č 26,0 // Šaljem kursor van ekrana, pa nek
// mrda tamo koliko hoće
// rešenje!
(4) .................. // Normalan nastavak programa
Za kraj: jednom ranijom prilikom poslao sam bio kroki na temu
kursora, ali kako nisam siguran da je stigao do Bratstva,
podsetiću ponovo na korisnu mogućnost da se prethodno stanje
kursora zapamti, recimo: LOCAL sCurs := SETCURSOR() ... da
ne žljebim ponovo gde se (sve) ovo moćže (korisno) primeniti.
dPaun
clipper.425bulaja,
│kod mene je cela misterija bila u tome sto je izmedu radnje koja se
│obavljala sa sakrivenim kursorom i sledece radnje (sa normalnim
│kursorom) prolazilo izvesno vreme
└───
Ne uspevam bas da uhvatim smisao ovoga ;). Ako se vec isklucuje kurzor,
logicno je da iza toga ide neka pauza ili operacija koja dugo traje, tj.
posto je kurzor prakticno uvek iskljucen, onda se samo ukljucuje za
read-ove, sto opet ukljucuje prolazak izvesnog vremena.
Ja nisam primetio nikakvih problema kod kontrole kurzora. Doduse
koristim setcursor() funkciju, ali se i "set cursor to" valjda
pretprocesira u setcursor().
clipper.426dpaun,
>> Ne uspevam bas da uhvatim smisao ovoga ;).
Naravno, jer je teško objasniti bez primera, a još je teže
shvatiti ako nam ta vrsta misteriji nije pred očima.
Reč je konkretno o MEMOEDIT() i korisničkoj funkciji. Pre
poziva MEMOEDIT(memo_polje,koordinate,korisnička_funcija...),
sakrivenim kursorom markiram poziciju desne margine teksta,
stavljajući neki znak (npr: Đ). Onda se poziva MEMOEDIT() a
preko nje i korisnička funkcija. MEMOEDIT() pozivam sa para-
metrima o poziciji kursora unutar prozora, kao i o poziciji
unutar editovanog teksta. U korisničkoj funkciji na samom
početku je set instrukcija da kursor bude vidljiv. Poznato
je, inače, šta radi MEMOEDIT() kad naiđe na korisničku fun-
kciju: odmah joj prepusti dizgine! Tako imamo sledeću situ-
aciju:
1) nevidljivim kursorom ispisan je navedeni znak;
2) kursor je "ostao" na toj koordinati;
3) MEMOEDIT() aktivira KorFunkciju, ova izda naredbu
da kursor "oživi";
4) Kursor oživljava. Gde? Na onim poslednjim koordinatama!
Oči mi, dabogda, ispale ako nije tako! Pazi sad:
5) MEMOEDIT()-u tek sledi glavni posao: da sa diska "usisa"
odgovarajući memo-tekst. Tu je ta pauza, koja može biti
kraća ili duža, u zavisnosti od veličine teksta ...
6) Kada ga MEMOEDIT() "učita" i gurne na ekran, tek onda
šalje kursor na pozociju gde treba.
Između koraka 4 i 6 gospon kursor trepće li trepće tamo
gde mu mesto nije.
=> Rešenje je, kao što sam naveo, u isterivanju kursora van
ekrana, odmah posle koraka 1).
Javio sam se bratu Hercogu zato što znam kako može da
izluđuje ova vrsta problema. Jednom mi se gotovo desila
"Zona sumraka" zbog RMAKE-a, ali o tome drugi put.
P.S.1)
Izvinjavam se Clipper rođacima na nejasnim i nepreciznim
objašnjenjima, jer ja sam samo jedan običan programer-naivac.
P.S.2)
Što se ne bi uvelo jedno ovakvo zvanje, a?
Kad može u slikarstvu ...
(Ot)Pozdrav,
dPaun
clipper.427zkrstic,
Jel vido' neko library NETLIB za Clipper, naravno?
Ako je vido', nek našara malo, o čemu se radi i ima
li ikakve upotrebne vrednosti.
Pozdrav, zkr
PS. Podrazumeva se da je LIB za net-funkcije :))
clipper.428andrejl,
Nešto načuh o Clipper-u 6.0, pa da li neko zna nešto više ?
bye, andrejl
clipper.429bdm.,
Da li postoji nacin da se u Clipper-u ostvari veza izmedju SET FILTER i
DBEdit ?
clipper.430ppekovic,
>> Da li postoji nacin da se u Clipper-u ostvari veza izmedju SET FILTER i
>> DBEdit ?
? Kakve te konkretno veza zanima? DBedit poštuje trenutno aktivni
filter, tj. prikazuje samo one slogove koji zadovoljavaju uslov u
filteru.
Paya
clipper.431ndragan,
/ e(g)zoterijama, evo i jednog Clp pitanja za tebe: Koji ti se
Zar se ne kaže egzotermija?
clipper.432ndragan,
/ objašnjenjima, jer ja sam samo jedan običan programer-naivac.
/ Kad može u slikarstvu ...
Pogodi ga. Isto su u slikarstvu akademski slikari šizeli na naivce što dižu
lovu. Problem: kako ćeš posle moći bilo koga da ubediš da si, eventualno,
švorc?
Bue_ NDragan
clipper.433nbatocanin,
> Da li postoji nacin da se u Clipper-u ostvari veza izmedju
> SET FILTER i DBEdit ?
dbEdit uzima u obzir SET FILTER uslov. Budi malo određeniji. Na šta
tačno misliš?
clipper.434nbatocanin,
Nekoliko ljudi me je pitalo da li mogu moje programe sa Sezama da
ugrađuju u svoje aplikacije. U uputstvima za programe prilično
nespretno sam formulisao moj jedini zahtev: ne smete da moj program
*neizmenjen* skinete sa Sezama i prodate nekom. Mislim da je ovo samo
po sebi jasno. Znači, slobodno ugrađujte kalkulator i ostalo u svoje
programe koje prodajete - puno sreće pri tome! Neću vam zameriti i
ako nešto izmenite.
Ako negde napišete i poreklo ovog dela programa, biću zahvalan i
počastvovan, mada nije obavezno. A ako se neko obogati tako što se
bogatom arapskom maharadži svidi moj kalkulator, ima da plati piće
celom Sezamu!
Pozdrav svima, Nenad
clipper.435skoprivica,
>-> nespretno sam formulisao moj jedini zahtev: ne smete da moj
>->* program neizmenjen* skinete sa Sezama i prodate nekom. Mislim da
Ovo je vrlo skakljivo sa pravne strane, posto ti je program
objavljen u casopisu (tj. njegov listing) on je freeware po
mom misljenju...ORKA:zakoni, nastavak...
Aje... CTEBO.
clipper.436bdm.,
## filter, tj. prikazuje samo one slogove koji
## zadovoljavaju uslov u filteru.
Hvala to me je zanimalo nesto davno sam petljao ali sam dobijao
sve slogove sad cu ponovo da pokusam.
BDM.
clipper.437zkrstic,
> ## filter, tj. prikazuje samo one slogove koji
> ## zadovoljavaju uslov u filteru.
>
> Hvala to me je zanimalo nesto davno s
> am petljao ali sam dobijao
> sve slogove sad cu ponovo da pokusam.
Staviš filter, udariš GO TOP (obavezno) i to neizostavno radi.
SET FILTER je spor, ali radi, uvek.
Pozdrav, zkr.
clipper.438kzoran,
Hi!
Moze li mi neko pomoci?
Treba da linkujem jednu rutinu pisanu u C sa programom pisanim u Clipper-u
5.01.
Ima li nekih posebnih pravila za linkovanje? Ili - pošto nemam gotovu nikakvu
literaturu za Clipper 5.01 - kakva su uopšte pravila za povezivanje Clipper
programa sa C ili asemblerskim rutinama?
Unapred hvala na pomoći.
Pozdrav,
Zoran.
clipper.439dpaun,
>> Problem: kako ćeš posle moći bilo koga da ubediš da si,
>> eventualno, švorc?
Pogodi me i ti, brate!
Lično, nisam "naivac" samo u onom smislu da me nije
pokvarila neka "programerska" škola, već, možda i više,
zbog toga što ja sve to radim za badava! Meni bi,
dakle, odgovaralo zvanje "programer - naivčina"!
žak sam i za SPS napisao jedan (besplatni) program.
O, gde će mi duša?!
*
Ovo zvanje je u odnosu na slikarsku podelu. A kako bi bilo
ako za uzor uzmemo muzičare? Programer - sluhista! Lepo.
Ja sam ranije već rekao da programiram "na uvce"!
*
Da rezimiramo:
Sezamova programerska zvanja:
1) Programer naivac
2) Programer naivčina
3) Programer sluhista.
Od mene, braćo, dosta. Ajte i vi malo!
dPaun
clipper.440ppekovic,
>> Ima li nekih posebnih pravila za linkovanje? Ili - pošto nemam gotovu
nikakvu
>> literaturu za Clipper 5.01 - kakva su uopšte pravila za povezivanje Clipper
>> programa sa C ili asemblerskim rutinama?
Sa assemblerom nema nikakvih problema, a sa C-om ima. Da nebi po
xx-ti pun ponavljao istu priču, pogledaj malo stare poruke u ovoj
temi. Ukratko, linkovanje sa C-om može, ali samo neke osnovne stvari.
Npr. funkcije iz stdio i graph header-a, kao i chart funkcije,
zaboravi. Kako se linkuje sa assemblerom i C-om, naći ćeš u NG-u koji
si dobio uz Clipper 5.01. Nije teško!
Paya
clipper.441dpaun,
>> Zar se ne kaže egzotermija?
egzoteričan - a) namenjen onima koji ne pripadaju nekoj zajednici,
javni, opšti;
b) razumljiv, pristupačan svima, popularan;
ezoteričan - koji nije svakome pristupačan; unutarnji, skriven;
strogo naučan, stručan
egzotermičan - koji je propraćen razvijanjem toplote, pri kojemu se
oslobađa toplota ...
/Prema: REžNIK SRPSKOHRVATSKOG KNJIčEVNOG I NARODNOG
JEZIKA, Knj. V, SANU, Beograd, 1968, kod na-
vedenih reči/
Zato sam napisao e(g)zoterija, a da ne pređe u egzotermiju, ja ću
malo da o'ladim!
dPaun
clipper.442nbatocanin,
Nisam baš najbolje razumeo. žini mi se da je ono što ja tražim sasvim
normalno i da mi nisu rekli da napišem napomenu o ograničenjima pri
korišćenju, ne bi to ni pisao. Zar neko misli da je moj zahtev
preteran?
clipper.443skoprivica,
>-> Zar neko misli da je moj zahtev preteran?
Ne smatram da je preteran, nego se pitam da li bi mogao nesto da
dokazes kad bi neko iskoristio tvoj program ? Listing je objavljen
u casopisu koji se prodaje, pa samim tim taj (preprodavac) je kupio
i prava na tvoj listing...
Aje... CTEBO.
clipper.444dpaun,
Clipper rodbino!
Upravo mi je poštar doneo paketić, i u njemu:
Rick SPENCE, CLIPPER 5 - VODIž ZA PROGRAMERE, Mikro knjiga,
Beograd, 1991 (?)
Autor je saradnik na razvoju Clippera; knjiga ima 513 strana.
Isto je onako jasna i krasna kao i ona Strelijeva. Neko se
bio ovuda raspitivao za literaturu, pa bi mogao da krene od
ove knjige.
Šta misle ostala braća?
dPaun
clipper.445dpaun,
Clipper braćo, amo, amo!
Rešen problem fantoma iz poruka 5.393 (i passim), ili:
Kako je jedan programer-naivac ukrotio swap file!
I. Citat /starija braća mogu da ga preskoče/:
KORIŠĆENJE MEMORIJE
RTLink-ov program za upravljanje overlejima obezbeđuje da se neko-
rišćeni kod nalazi na disku dok ne zatreba, ali ne upravlja podacima
programa. Nantucket je uveo sistem prividne (engl. virtual) memorije
u verziju 5.0 koji ima sličnu ulogu za podatke.
Kada nema dovoljno memorije da zadovolji neki zahtev, Clipper pre-
bacuje podatke u proširenu memoriju, ako je to moguće i naznačeno sa
opcijom E u promenljivoj okruženja CLIPPER. U suprotnom, podaci se
smeštaju na disk u DATOTEKU ZA ZAMENU (engl. swap file). Za aplikaciju
je svejedno da li se podaci nalaze u memoriji ili na disku. (...)
Možete specificirati Clipper-u maksimalnu veličinu datoteke za za-
menu koju može da kreira definišući vrednost parametra SWAPK u promen-
ljivoj okruženja CLIPPER. Vrednost od 256K do 64MB su dozvoljene. Cli-
pper će koristiti 16MB ako ne navedete vrednost.
Podrazumeva se da će datoteka biti kreirana u trenutno aktivnom
direktorijumu, ali i to možete da promenite navođenjem parametara
SWAPPATH u Clipper-ovu promenljivu okruženja.
/Rick S p e n c e: CLIPPER 5 - vodič ..., p. 26-27/
II. Šta je Clipper-ova "promenljiva okruženja"?
/Mogu da preskoče i mlađa braća/
Zamislimo da je naše Clipper čedo, dika naša programerska, gluva
za ono što piše u CONFIG.SYS ili AUTOEXEC.BAT! Što god mi tamo napi-
sali, ne prima. Jogunac hoće svoje, pa svoje, a to je jedna linijica
u AUTOEXEC.BAT, koja počinje sa SET CLIPPER. To vam je to, braćo!
III. Kako se navode parametri "u Clipper-ovu promenljivu okruženja"?
/Može da preskoči svako ko ima Norton Guid/
Ako imamo samo jedan parametar, primer:
SET CLIPPER=f35
Ako imamo više parametara, dodajemo separator ; pa parametar:
SET CLIPPER=F35;E:120
IV. Kako ubiti fantoma, ili kako preusmeriti SWAP FILE?
/Obavezno čitanje za sve. Biće propitivanja!/
Formula glasi: SWAPPATH:'<putanja>'
a celo rešenje:
SET CLIPPER=F35;E:120;SWAPPATH:'C:Đ' itd
Važno: navodnici su obavezni! Naravno, umesto C:Đ možete napisati
vaše konkretne idejne smernice ...
V. Epilog
/Ne mora da čita niko/
Usporedbom poruke 5.393 i onog što je potom sledilo, može se
zaključiti ko ovde zna znanje.
Hvala braćo, drži tata!
dPaun
clipper.446bdm.,
## Rick SPENCE, CLIPPER 5 - VODIC ZA PROGRAMERE, Mikro knjiga,
## Beograd, 1991 (?)
Koliko si para dao postaru ?
BDM.
clipper.447vkrstonosic,
>> ## Rick SPENCE, CLIPPER 5 - VODIC ZA PROGRAMERE, Mikro knjiga,
>> ## Beograd, 1991 (?)
>>
>> Koliko si para dao postaru ?
1.200 dinara u knjižari kod PMF-a.
clipper.448janko,
> Rick SPENCE, CLIPPER 5 - VODIž ZA PROGRAMERE, Mikro
> knjiga, Beograd, 1991 (?)
>
> Autor je saradnik na razvoju Clippera; knjiga ima 513
> strana. Isto je onako jasna i krasna kao i ona Strelijeva.
==============
Strelijeva jasna i krasna? Jel' to ironija?
clipper.449ndragan,
/ malo da o'ladim!
Mogao bih i ja, da se ne ubacujem i gde treba i gde ne treba... ali
stvarno nisam verovao da _egzotermičan_ postoji u rečniku. Zvučao je
tako iskonstruisano.
clipper.451bulaja,
│Listing je objavljen u casopisu koji se prodaje, pa samim tim taj
│(preprodavac) je kupio i prava na tvoj listing...
└───
Nikako! Autor i dalje zadrzava svoja (autorska) prava i na programe
objavljene u casopisima, knjigama, etc. Cak i npr. ako si kupio (i skupo
platio ;) od nekoga program i dobio i source kode, opet nemas nikakvih
prava, sem naravno da koristis program. Drugacije je jedino ako je tako
eksplicitno navedeno u kopoprodajnom ugovoru ili tekstu u casopisu.
Analogno ovome je npr. i kod knjiga - kupovinom knjige naravno da nisi
stekao nikakva prava na piscev rad, sem da isti procitas.
clipper.452ppekovic,
>>>> ## Rick SPENCE, CLIPPER 5 - VODIC ZA PROGRAMERE, Mikro knjiga,
>>>> ## Beograd, 1991 (?)
>>>>
>>>> Koliko si para dao postaru ?
>>
>> 1.200 dinara u knjižari kod PMF-a.
Kamo sreće da je tolko. Knjiga je 7.200 din. Danas, kad smo Vkr i
ja bili tamo bile su tri knjige na polici i jedna u izlogu.
Paya
clipper.453bdm.,
## 1.200 dinara u knjizari kod PMF-a.
Kad to bejase. Danas je 7.200 dinara.
BDM.
clipper.454vkrstonosic,
>>>> 1.200 dinara u knjižari kod PMF-a.
>>
>> Kamo sreće da je tolko. Knjiga je 7.200 din. Danas, kad smo Vkr i
>> ja bili tamo bile su tri knjige na polici i jedna u izlogu.
Moje izvinjenje svima, nešto sam pogrešno video :(
clipper.455skoprivica,
-> Analogno ovome je npr. i kod knjiga - kupovinom knjige naravno da
-> nisi stekao nikakva prava na piscev rad, sem da isti procitas.
Pa smem li ja da ukucam taj njegov program? I kako ce on dokazati
da je to bas njegov program (ja ne dam source)...4
clipper.456dpaun,
>> Koliko si para dao postaru ?
U odnosu na trenutnu cenu (reče neko na Sezamu da je kod vas
u Bgd 1200) - dao sam samo 940 din, ali mnogo ranije kao pretplatu.
Ko li je bolje prošao, a?
dPaun
clipper.457dpaun,
>> Strelijeva jasna i krasna? Jel' to ironija?
Jok, asonanca.
A pitao bih te da si Clipper počeo da učiš
iz one "Cuciceve" knjige!
=> Streli mi je posle toga zvučao ko Tagora!
Mir s tobom, brate,
dPaun
clipper.458prerad,
Jedno pitanje :
Posto jos uvek imam Hercules karticu , zanima me da li u Clipper 5.01
mogu na mom monitoru da dobijem vise od te 3-4 razlicite nijanse.
Tj., da li su definisane neke "sare" (fill patterns) ,(na primer na
nacin kao sto Hercules simulira CGA grafiku) ili nesto slicno.
Pedja
clipper.459zkrstic,
>
> Pa smem li ja da ukucam taj njegov program? I kako ce on d
> da je to bas njegov program (ja ne dam source)...4
Veruj mi, vrrrrrlo lako :))
Samo šacne .exe i malko prekopa i naći će bar neke svoje definicije
(promenljive, funkcije...)
Posebna priča, je kako to zakonski dokazati
Pozdrav, zkr
clipper.460janko,
> Mir s tobom, brate,
Mir, mir brate mir...
(nije neka poruka, ali sam prosto morao).
PS. Ej, dPaune, voleo bih da objasniš zašto su ti svi braća (i
sestre, al' ih ovde ima malo).
PPS. Moderatore, molim ne briš, odgovor na pitanje u PS će
sigurno razjasniti misteriozne elemente konferencije...
clipper.461kzoran,
Zdravo!
Ima li neka dobra duša na SEZAM-u koja ima NG za Clipper, a spremna je da ga
ustupi (iskopira, unloadujeKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKploaduje i sl.)?
Pozdrav,
Zoran.
H
P.S. Prilično je hitno!
clipper.462nboskovic,
*> Ima li neka dobra duša na SEZAM-u koja ima NG za Clipper,
*> a spremna je da ga ustupi (iskopira,
*> unloadujeKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKploaduje i sl.)?
Ako imaš instalacionu verziju Clippera 5.01 u okviru paketa
imaš i kompletan NG sa datotekama za isti.
(c) klap
nikola
clipper.463ppekovic,
>> Ima li neka dobra duša na SEZAM-u koja ima NG za Clipper, a spremna je da ga
>> ustupi (iskopira, unloadujeKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKploaduje i sl.)?
Ako imaš clipper 5.01, onda mora da imaš i NG. Sam NG za clipper
nije ni PD ni SW.
Paya
clipper.464kzoran,
Hvala svima na pomići oko NG-a. Nisam imao instalacionu verziju (tad bih
instalirao i NG), ali sam je uz vašu pomoć nabavio.
Pozdrav,
Zoran.
clipper.465kzoran,
Hi!
I dalje ne uspevam da linkujem Clipper program sa MSC 6.0 rutinom.
U C rutini imam samo <dos.h>, i vrlo je jednostavna. Ne vraća vrednost u glavni
program, a ne ostavlja ni "trag" o svom radu koji bi eventualno glavni program
mogao koristiti.
Pokušao sam sve moguće perverzije - kada linkovanje nije išlo sa RTLink-om,
uzeo sam C linker, a zatim sve meni poznate i dostupne DOS linkere - i ništa.
RTLink mi javlja "Input parsing error" i to na mestu na kom u komandnoj liniji
kojom startujem linkovanje navodim ime C objektnog fajla.
Ima li neko ideju šte bi moglo da bude u pitanju?
Pozdrav,
Zoran.
clipper.466kanda,
>> RTLink mi javlja "Input parsing error" i to na mestu na kom u
>> komandnoj liniji kojom startujem linkovanje navodim ime C objektnog
>> fajla.
>>
>> Ima li neko ideju šte bi moglo da bude u pitanju?
Ova 'input parsing error' mi se javljala samo kad bih RTLINKu pogresno
prosledio parametre. Naprimer, kada umesto
RTLINK FI prvi,drugi
stavis
RTLINK FI prvi drugi
dobijes 'input parsing error'
clipper.467ppekovic,
>> I dalje ne uspevam da linkujem Clipper program sa MSC 6.0 rutinom.
Napisi C program koji izgleda otprilike ovako:
#include <extend.h> /* header koji dobijaš uz clipper */
... ostali include-ovi koji ti trebaju ...
CLIPPER ime_funkcije()
Š
...
...
...
Đ
iskompajliraj ovo sa CL /AL /c /Oalt /FPa /Gs ime.c
zatim napisi program u clipper-u koji koristi C funkciju.
iskompajliraj sa clipper ime.prg
linkuj sa MS Linkerom LINK /NOE /SE:1024 c_obj clipper_obj,,,
Ako ti linker prijavi gomilu grešaka tipa symbol defined more than
once, onda koristiš neke C funkcije koje baš ne "prijaju" clipper-u.
Već sam pomenuo da npr. graph i stdio funkcije ne idu uz clipper.
Paya
clipper.468kzoran,
EUREKA!!
To je to!!
Ppekovic-u, nikad ti ovo neće oprostiti!KKKKKKu oprostiti!
Pozdrav,
Zoran.
clipper.469janko,
> linkuj sa MS Linkerom LINK /NOE /SE:1024 c_obj
> clipper_obj,,,
A zar to ne pravi frku na Clipper-u 5.0x jer samo RTlink
obezbeđuje onu Virtelnu memoriju?
clipper.470ppekovic,
>>> linkuj sa MS Linkerom LINK /NOE /SE:1024 c_obj
>>> clipper_obj,,,
>>
>>A zar to ne pravi frku na Clipper-u 5.0x jer samo RTlink
>>obezbeđuje onu Virtelnu memoriju?
Sa kraćim programima ne pravi problem. Inače, nema problema i ako se
koristi RTLink. Onaj primer sam naveo samo kao kratak primer za prvo
povezivanje C-a i Clipper-a. Za detaljniji opis, tj. kad, šta, gde i sl. bi mi
trebalo malo više prostora od jedne poruke ;)
Paya
clipper.471dpaun,
>> Ej, dPaune, voleo bih da objasniš
Clipperfamilijorodbinosestrebraćoipolubraćo! Priznajem:
JasamčuveniClippernacionalistaseparatistaseceionistaišovinista
specijalnoobučenzaClipperdiverzijeujednomtajnomcentruuHomoljui
ubačennaSezamkaoagentjednevelikesileuokvirumeđunarodnezaveresa
zadatkomdasveClipperašeujediniujednovelikobratstvoisestrinstvo
dapodmetneidejuodirektnomporekluClipperjezikasaLepenskogvirate
daseodandeširioposredstvomvlaškogjezikaadajeulogahetitskogipak
bilaredundantaidatoobjašnjavaotkudtajanstvenaimisterioznapojava
dainanatpisimauLepenskomViruikodhomoljskihpastirakaoinasvimbelo
svetskimkompjuterskimtastaturamaodneolitadodanasatakođeiubuduće
dirkeEscCapsEnterPageAltitakotoimajuistoznačenjeiistoporeklo:
Vlaško!IkudbimibiokrajdameneotkrijedanJankoasvakiJankoradinaopa
komadaseuHomoljuJankorimujeisadrugimrečimatakojetouopštejednori
mujućeimedasedičišiponosišnjimeaokokosokosvevididuboko
Za Clipper i otadžbinu!
dPaun
clipper.472nbatocanin,
> Ako imaš clipper 5.01, onda mora da imaš i NG. Sam NG za
> clipper nije ni PD ni SW.
žini mi se da sam NG za Summer'87 video na Tricklu, što bi značilo da
može da se deli.
clipper.473bulaja,
│Cini mi se da sam NG za Summer'87 video na Tricklu, sto bi znacilo
│da moze da se deli.
└───
Problem je u readeru (ng.exe) koji nije PD :(. Taj NG za S87 Clipper
valjda ima i negde u pc.soft:clipper.
clipper.474ppekovic,
>> žini mi se da sam NG za Summer'87 video na Tricklu, što bi značilo da
>> može da se deli.
Za '87-icu postoji TR Help, koji je neuporedivo bolji od NG-a.
Paya
clipper.475dpaun,
Clipper familijo,
Verujem da nisam jedini koga interesuje odgovor na pitanje
zašto u zadnjem broju Računara nema Clipper savetovališta?
*
Molim nBatocanina da napiše neko slovo
kao odgovor na ovo.
dPaun
clipper.476nbatocanin,
> Za Clipper i otadžbinu!
Brate dPaune, mlogo ti težak ovaj tekst za čitanje, al' snađosmo se!
dNenad
clipper.477nbatocanin,
> Molim nBatocanina da napiše neko slovo
> kao odgovor na ovo.
SET DATE 01 APR
Prestajem da radim za "Računare" i prelazim u "Svet kompjutera" :))
clipper.478dpaun,
>> Prestajem da radim za "Računare" i prelazim u "Svet kompjutera" :))
Nisam zadovoljan odgovorom. Priznajem da Računare u poslednje vreme
kupujem pretežno zbog Clippera; zbog Clp kupujem i "Svet kompjuetera".
Ako Redakcija ceni da je Savetnik za Clp nepotreban, i Clp svede na
poneki slučajni Bajt lične prirode - neka ne računa više na jednog
kupca. (A moj primerak čita još petoro braće, kao posleratnu agitprop
literaturu!)
Pošto je, slutim, reč o šali, još uvek mi(nam) duguješ pravi odgovor.
Imaš Ti svoje obožavaoce, brate Nenade, pa nemoj s nama ko da si nam
narodni poslanik!
dPaun
clipper.479hercog,
Pročitao sam u onom dodatku iz računara o clipperu
da pri kompajliranju može da se navede " /Ddemo" "kako
bi se u aplikaciju ugradile naredbe koje ograničavaju
upotrebu demo programa" , pa me interesuje kako to sve
radi, tj nije mi jasno šta se time postiže i sama uloga
direkti- ve #ifdef ****
Hercog
Odgovor NBATOCANINA
**> Kad u programu napišeš:
**>
**> USE Radnici
**># if def DEMO
**> IF LastRec() > 100
**> ZAP
**> END IF
**># endif
**> LIST ALL
**>
**> ograničavaš da se ne može u tekućoj datoteci upisati
**> više od 100 slogova, ali samo ako je demo verzija
**> programa. Naime, ako prethodni program prevedeš sa
**> CLIPPER, dobiće se:
**>
**> USE Radnici
**> LIST ALL
**>
**> a ako prevedeš sa CLIPPER /DDEMO
**>
**> USE Radnici
**> IF LastRec() > 100
**> ZAP
**> END IF
**> LIST ALL
**>
**> Kao što vidiš, uključiće se deo koji ograničava upotrebu
**> programa. Prednost je u tome što ne moraš da praviš dve
**> verzije programa.
**>
**> Nemoj se ustručavati i slobodno postavljaj slična
**> pitanja u konferencijama - one zato i služe. Tako ćeš
**> mnogima olakšati stvar (onima koji ovo takođe nisu
**>ć razumeli), a i mene ćeš rasteretiti, jer e ti
**> odgovarati i drugi ljudi.
**>
**> Predlažem ti da celu ovu poruku sa tvojim pitanjem
**> pošalješ kao poruku u Clipper.
**>
**> Pozdrav, Nenad
clipper.480ndragan,
/ JasamčuveniClippernacionalistaseparatistaseceionistaišovinista
Mmmm... da, nije loše; imaš li još neku mantru? Ova ne drži duže od tri dana.
clipper.481nbatocanin,
Ma, šalim se, naravno! Savetnik nije izašao zbog nekog banalnog
razloga (frka sa prostorom u poslednjem trenutku). Ja nemam veze sa
tim.
clipper.482bulaja,
Bug (?) Clipper-a 5.01 u @..GET VALID-u.
Stavio sam incijalizaciju GET-a za neki niz u petlju:
for i:=1 to n
@ y+i,x get aa[i] picture pic valid vld( aa[i])
next
a pretprocesor to razlozi ovako:
for i:=1 to n
SetPos( y+i, x)
AAdd( GetList, _GET_( aa[i], "aa[i]", pic, {|| ( vld( aa[i]))}, ) )
next
Problem je jer Clipper jednostavno ne prihvata VALID-e. Read krene Ok
ali se pri prvom pozivanju valid-a javlja greska
"Error BASE/1132 Bound error: array access" (?).
clipper.483kanda,
>> Problem je jer Clipper jednostavno ne prihvata VALID-e. Read krene Ok
>> ali se pri prvom pozivanju valid-a javlja greska
>> "Error BASE/1132 Bound error: array access" (?).
Problem je (valjda?) u tome sto se VALID izraz evaluira tek u toku READ
komande, a u tvom primeru, ako je npr. READ odmah ispod NEXT, promenljiva
'i' u tom trenutku ima vrednost 11 - a niz 'aa' ima 10 elemenata, pa aa[i]
javlja gresku...
Kao prva pomoc, moze uz VALID da se stavi samo poziv funkcije vld(), bez
argumenata, a ona sama da sa readvar() dohvati ime promenljive koja se
edituje, pa da je makro-operatorom ispituje/menja... ovako nesto (izgleda)
radi (mada kad malo razmislim ne bi trebalo da radi, al' da ne baksuziram :)
clipper.484bulaja,
│ Problem je (valjda?) u tome sto se VALID izraz evaluira tek u toku READ
│komande, a u tvom primeru, ako je npr. READ odmah ispod NEXT, promenljiva
│'i' u tom trenutku ima vrednost 11 - a niz 'aa' ima 10 elemenata, pa aa[i]
│javlja gresku...
└───
Verovatno, ali je glupo to sto se razlicito tretiraju promenljive za get
i valid, sve bi bilo Ok kada bi se i valid promenljiva razvijala kao
macro. Da stvar bude jos gora, nije moguce ni staviti valid aa[ &i]).
clipper.485squsovac,
Kliperaši, ima li rešenja sledećem problemu:
Na disku se nalaze npr. baze:
BAZA_1
BAZA_2
BAZA_3
...
BAZA_n, koje su istovetne po strukturi, ali ih je zbog određenih razloga ipak
potrebno ovako razdvojiti, a ne podatke smeštati u jednu bazu.
Program bi trebalo negde na početku čoveku da ponudi menu u kojem bi čovek
odabrao rad sa bazom koja ga zanima. Ja sam otvorio posebnu bazu u kojoj
su imena ovih baza (1, 2, ..., n), tako da je problem u principu rešen.
Međutim, interesuje me ima li Clipper 5.01 mogućnosti da na primer pregleda
direktorij i da pregled baza nekako ubaci u promenljive da se ja onda
ratosiljam one jedne nepotrebne(???) baze sa imenima baza.
clipper.486zkrstic,
> Program bi trebalo negde na početku čoveku da ponudi menu u kojem bi
> čovek odabrao rad sa bazom koja ga zanima. Ja sam otvorio posebnu
> bazu u kojoj
I stari kliper je to mogao, a i još uvek može ;)))
Lepo poteraš sva imena baza u niz sa ADIR, pa lepo napraviš meni
sa ACHOICE, i teraj dalje. Tako sam ja radio. Konkretan primer
je bio poziv starih obračuna LD-a, obzirom da je svaki imao svoju
bazu LD9101.DBF, LD9102.DBF....
Kratko i jasno. :))
Na žalost, nemam taj source pri ruci, al' ako ga nađem, tvoj je.
Pozdrav, zkr
clipper.488ndragan,
/ macro. Da stvar bude jos gora, nije moguce ni staviti valid aaŠ &iĆ).
Ovo je rešivo; slične cake se pojavljuju kad treba da prebacim nešto iz
foksproa u stari foks, pa naletim na neku caku koju stari ne podržava. Možda
ovako
dum=ltrim(str(i))
pa onda pod a)
vv&dum=aaŠiĆ
... valid vld(vv&dum)
ili pod b)
vv&dum=aaŠiĆ
dum2='vld(vv&dum)'
... valid &dum2
Moj drugar je pisao sličnu rutinu, ali u njoj je čak stajalo valid &q(i),
i u foksprou je radilo ko ludo, ali za mfoxplus smo morali da izmišljamo
nekakve međupromenljive kao ovo gore, i proradilo je. Ne znam samo kako
se kliper odnosi prema izmišljanju novih promenljivih u trku i to iz
makroa (mislim na vv&dum=)
Bue_ NDragan
clipper.489ndragan,
/ BAZA_2
Jel ima kliper aliase? U foksu na neki način izabereš (meni itd) i neka se
izbor nalazi u nekoj promenljivoj x:
_dbf='baza_'+ltrim(str(x,3))
use &_dbf alias baza
Ovo je potrebno ako se u programu pozivaš sa baza->>polje; ako se pozivaš sa
d->>polje i tu bazu uvek otvaraš u istoj zoni, onda nema veze. U foksprou
stvar ide još lepše
use ('baza_'+ltrim(str(x,3))) alias baza
tj samo strpaš izraz u zagrade i ne treba ni pomoćna promenljiva.
Bue_ NDragan
clipper.490nbatocanin,
> Ne znam samo kako se kliper odnosi prema izmišljanju novih
> promenljivih u trku i to iz makroa (mislim na vv&dum=)
Kako 'oćeš!
clipper.491nbatocanin,
> Verovatno, ali je glupo to sto se razlicito tretiraju
> promenljive za get i valid, ...
Štos je što se za GET navodi *promenljiva*, a za VALID logički
*izraz*, pa se i ne mogu isto tretirati. Da ne dužim, evo kako se
tvoj problem može rešiti. Glavni program je ovakav:
FOR i := 1 TO n
@ i,0 GET a[i] VALID v()
NEXT
READ
1)
Kao što je Konda rekao, moguce je uz pomoc ReadVar() funkcije
dobiti ime promenljive koja se upravo učitava, pa onda uz pomoć
makroa ispitivati vrednost:
FUNC v ()
cVar := ReadVar() // cVar == "a[i]"
IF &cVar == ...
Niz a[i] mora biti klase MEMVAR (PUBLIC ili PRIVATE), da bi ovo
radilo - makroi "ne vide" LOCAL i STATIC promenljive.
2)
Bolje je upotrebiti funkciju GetActive() - ona vraca trenutno
aktivan GET objekt, a to je slog sa *svim* podacima koji ti padaju na
pamet, pa i nazivom tekuće promenljive. Na primer:
FUNC v ()
oGet := GetActive()
...
oGet:name sadrzi naziv niza "A", a oGet:subscript tekuci index.
Kombinacija ta dva ti daje mogucnost da adresiraš element niza.
3)
U prethodnom slučaju ti i ne treba KAKO se zove tekuća
promenljiva, već njena vrednost. Njenu ASCII reprezentaciju imaš u
oGet:buffer. Na primer, ako je a[1]=123, oGet:buffer=" 123". Ovo je
savršeno dovoljno za bilo koju proveru. Ako ti zatreba da u VALID-u
promeniš tekucu vrednost, samo napišeš:
oGet:buffer := NovaVrednost
oGet:assign()
4)
Ako ti je baš stalo da u validu funkciju pozivaš sa tekućom
promenljivom, napiši ovako:
@ i,0 GET a[i] VALID { |o| V(a[o:subscript[1]]) }
Da ne davim, ako nekog interesuje kako ovo radi, neka pita.
Problem se može rešiti i makroima, ali budževine ne treba koristiti
bez preke potrebe.
clipper.492jtitov,
Da li bi neko hteo da mi mailuje jedan fajl iz paketa clipper 5.01? Radi se o
fajlu doc.lif jer mi je u njemu "korumpiran" fajl errata.doc. NAPOMINJEM, nije
mi potreban fajl errata.doc, nego "ono" u cemu se on nalazi spakovan, tj.
doc.lif. Volim da imam kompletne verzije instalacionih programa, pa je zato
upucena molba. Inace clipper, kao clipper, pa i nije los, ALI Fox Pro 2.0
zajedno sa distribution kit-om je zakon. I sto se tice lakoce izrade programa,
a i po mogucnostima.
Pozdrav, Jura.
clipper.493ppekovic,
>> Da li bi neko hteo da mi mailuje jedan fajl iz paketa clipper 5.01? Radi se
o
>> fajlu doc.lif jer mi je u njemu "korumpiran" fajl errata.doc. NAPOMINJEM,
>> nije mi potreban fajl errata.doc, nego "ono" u cemu se on nalazi spakovan,
>> tj. doc.lif. Volim da imam kompletne verzije instalacionih programa, pa je
>> zato
Uh, to je deo komercijalnog paketa, pa kao takav se nebi smeo naći
u konferencijama.
Paya
clipper.494nbatocanin,
> Inace clipper, kao clipper, pa i nije los, ALI Fox Pro 2.0 zajedno sa
> distribution kit-om je zakon. I sto se tice lakoce izrade programa, a
> i po mogucnostima.
Još kad bi ovo i obrazložio...
clipper.495jtitov,
>Jos kad bi ovo i obrazlozio...
Ah, vrlo rado, ali ne ide u tri reci. Najbolje bi bilo da se raspitas kod
IMTEL-a. (Mogu ti dati i ime osobe). Oni su tamo razvili jednu ogooomnu
aplikaciju za relativno kratko vreme. Ja sam inace stari kliperas, ali kada sam
video mogucnosti razvoja programa u FOX-u (da ne spominjem da odlicno podrzava
SQL), batalio sam i kliper i sve ostalo sto uz njega ide (fliper).
clipper.496andrejl,
Kada kompajliram sa opcijom /w sve lepo radi osim što mi kao
Abigious reference javlja i getlist što se valjda pretprocesira.
Deklarisao sa onda i getlist sa memvar, ali da li to može nekako
lepše :)
bye, andrejl
clipper.497andrejl,
Zatrebala mi je jedna rekurzivna funkcija, i da bi malo eksperimentisao
napisao sam ovo:
procedure main(br)
rekur(1,val(br))
return
function rekur(broj,br)
? broj
if broj==br
return
else
broj:=rekur(broj+1,br)
endif
return broj
/kompajlira se sa /n i poziva sa rekur n gde je n neki broj/
Kada je n>=91 javi grešku
Unrecoverable error 650: Processor stack fault
Nešto slično sam očekivao (ili nisam :).
Pitanje je da li može ovo nekako da se sredi. Funkcija koja mi treba je
mnogo veća i pozivala bi se ko-zna-kolko-puta (zavisi od sreće :) od 2
pa do +oo pa ne bi da mi se nešto nepriatno dešava u programu.
bye, andrejl
clipper.498andrejl,
Da li postoji razlika između = i == ili je samo 'estetske' prirode.
bye, andrejl
clipper.499ilazarevic,
█ Da li postoji razlika između = i == ili je samo 'estetske' prirode.
= je dodela podataka a == poređenje :)
PS. Kliper sam pogledao samo jednom u životu ;)
clipper.500vili,
> Da li postoji razlika izmedu = i == ili je samo 'estetske' prirode.
Postoji:
"=" - Equal
"==" - Exactly equal
Razlika se odnosi na poredjenje stringova i memo-a:
SET EXACT OFF
"ABC" = "ABC" - TRUE
"ABC" = "ABCDE" - FALSE
"ABCDE" = "ABC" - TRUE
"ABC" = "ABC " - FALSE
"ABC " = "ABC" - TRUE
"ABC" = " ABC" - FALSE
" ABC" = "ABC" - FALSE
"ABC" = "" - TRUE
"" = "ABC" - FALSE
SET EXACT ON
"ABC" = "ABC" - TRUE
"ABC" = "ABCDE" - FALSE
"ABCDE" = "ABC" - FALSE
"ABC" = "ABC " - TRUE
"ABC " = "ABC" - TRUE
"ABC" = " ABC" - FALSE
" ABC" = "ABC" - FALSE
"ABC" = "" - FALSE
"" = "ABC" - FALSE
SET EXACT ON ili OFF
"ABC" == "ABC" - TRUE
"ABC" == "ABCDE" - FALSE
"ABCDE" == "ABC" - FALSE
"ABC" == "ABC " - FALSE
"ABC " == "ABC" - FALSE
"ABC" == " ABC" - FALSE
" ABC" == "ABC" - FALSE
"ABC" == "" - FALSE
"" == "ABC" - FALSE
Operator "==" moze da poredi i nizove:
a1:={1,2,3}
b1:={1,2,3}
a1:=c1
a1 == b1 - FALSE
a1 == c1 - TRUE
Vili
clipper.501dpaun,
Clipper za početnike i programere sluhiste (1)
Svaki iole ozbiljniji Clp program zahteva kontrolu podataka koje u bazu
unosimo preko ekranske maske. U principu, posle otkrivanja greške, prog-
ram treba da omogući ispravku pogrešno upisanog podatka. Lepo bi bilo, a
a naš program bi ličio na programe onih iz starijih razreda - kad bi se
u povratku kursor pozicionirao direktno na mesto greške. To se može us-
pešno rešiti preko KEYBOARD, ubacivanjem u bafer tastature koda za kur-
sorsku strelicu "na dole" onoliko puta koliko je to potrebno.
Za domaći zadatak videti niže navedeni primer.
*
PROC Unos
//
...
Err := .T.
DO WHIL Err
Err := .F.
//
č 2,1 GET Var1
č 2,COL() GET Var2
č 2,COL() GET Var3
READ
DO Kontrola
ENDD
*
PROC Kontrola
// Provera uslova za Var1
IF (nije u redu)
//
Err := .T.
č red,kol SAY ' Uput za ispravku Var1'
RETURN
ENDI
// Provera uslova za Var2
IF (nije u redu)
Err := .T.
č red,kol SAY ' Uput za ispravku Var2'
KEYBOARD CHR(24)
RETURN
ENDI
// Provera uslova za Var3
IF (nije u redu)
Err := .T.
č red,kol SAY ' Uput za ispravku Var2'
KEYBOARD CHR(24)+CHR(24)
RETURN
ENDI
Made în dPaun
clipper.502andrejl,
>│ = je dodela podataka a == poređenje :)
mislio sam na = i == kao poređenja pošto postoje = i := za dodeljivanje,
a među njima ima razlike.
bye, andrejl
clipper.503dpaun,
Clipper za početnike i programere sluhiste (2)
/ a mogu da gvirnu i ostali, ali da ne galame /
Da li službeni broj sloga, koji se dobija funkcijom RECNO(), može biti
indeksni ključ? I to da se upisuje direktno, bez akrobacija preko nekih
promenljivih i sl.?
Može.
Za domaći:
USE Baza
INDEX ON RECNO() TO IndFajl
Kad se vrši upis, ovaj IndFajl otvoriti kao i svaki drugi:
USE Baza INDEX IndFajl
Ja probao i uspeo, a to je dovoljno!
dPaun
clipper.504dejanr,
>> Svaki iole ozbiljniji Clp program zahteva kontrolu podataka koje u bazu
>> unosimo preko ekranske maske. U principu, posle otkrivanja greške, prog-
>> ram treba da omogući ispravku pogrešno upisanog podatka. Lepo bi bilo, a
>> a naš program bi ličio na programe onih iz starijih razreda - kad bi se
>> u povratku kursor pozicionirao direktno na mesto greške. To se može us-
>> pešno rešiti preko KEYBOARD, ubacivanjem u bafer tastature koda za kur-
>> sorsku strelicu "na dole" onoliko puta koliko je to potrebno.
Možda nisam dobro razumeo, ali zašto ne koristiš klauzulu VALID (ili
RANGE ako je polje numeričko)? Radi "samo" i ostaje na željenom polju
dok se ne unese ispravna vrednost ili ne lupi Esc.
clipper.505andrejl,
Hm, da probam ovako. Kako da budem siguran koliko puta će se procedura
pozvati pre nego što sve odleti u vazduh :) ? Račun u stilu
(cVAR+nVAR+...)*K=N
n-broj poziva procedure
k-koeficijent zauzimanja memorije i sl. :)
bye, andrejl
clipper.506andrejl,
Hvala na opširnom objašnjenju !
clipper.507vili,
> procedure main(br)
> rekur(1,val(br))
> return
> function rekur(broj,br)
> ? broj
> if broj==br
> return
> else
> broj:=rekur(broj+1,br)
> endif
> return broj
Malo sam se igrao sa ovim programcicem i dosao do sledecih rezultata:
Ako linkujes sa: |za: br | dobijes gresku:
------------------------------|--------|------------------------
RTlink FI rekur /STACK:4096 | 92 | Processor stack fault.
RTlink FI rekur /STACK:5000 | 120 | Processor stack fault.
RTlink FI rekur /STACK:10000 | 276 | Processor stack fault.
RTlink FI rekur /STACK:12000 | 339 | Processor stack fault.
RTlink FI rekur /STACK:15000 | 433 | Processor stack fault.
RTlink FI rekur /STACK:18000 | 526 | Processor stack fault.
RTlink FI rekur /STACK:18550 | 544 | Processor stack fault.
RTlink FI rekur /STACK:18600 | 544 | Eval stack fault.
RTlink FI rekur /STACK:19000 | 544 | Eval stack fault.
RTlink FI rekur /STACK:20000 | 512 | Eval stack fault.
RTlink FI rekur /STACK:22000 | 480 | Eval stack fault.
RTlink FI rekur /STACK:25000 | 419 | Eval stack fault.
RTlink FI rekur /STACK:30000 | 352 | Eval stack fault.
RTlink FI rekur /STACK:40000 | 160 | Eval stack fault.
RTlink FI rekur /STACK:45000 | 64 | Eval stack fault.
RTlink FI rekur /STACK:47700 | 32 | Eval stack fault.
Za STACK < 4096 greska je : Cannot execute REKUR.EXE.
Za STACK > 47747 greska je : null pointer assignment.
Zakljucak: tvoja funkcija moze da se rekurzivno pozove najvise 543 puta.
--------- ----------------
Da li to vazi samo za ovu funkciju ili ne, that's the question!
Vili
clipper.508nbatocanin,
Ne može. Ovo piše i u uputstvu. Pogledaj u "Release Notes".
clipper.509nbatocanin,
"=" se upotrebljava i za dodelu vrednosti. Po meni, najbolje je
uopšte ne upotrebljavati "=", već samo ":=" i "==".
clipper.510ilazarevic,
█ = je dodela podataka a == poređenje :)
He, baš sam budala :(( Sorry svima.
clipper.511ilazarevic,
█ mislio sam na = i == kao poređenja pošto postoje = i := za
█ dodeljivanje, a među njima ima razlike.
Ma ja sam se malo zeznuo, kad se petljam gde mi nije mesto...
clipper.512dpaun,
>> zašto ne koristiš klauzulu VALID (ili RANGE ako je polje numeričko)?
Koristi(m) se. Ali je stvar u ideji, karakterističnoj za sluhistički
stil u programiranju. Šteta je da se ne objavi svoj Clipper rodbini!
Naravno, nisam ni očekivao Nobelovu ( a ni noblesovu) nagradu za nju.
dPaun++
clipper.513andrejl,
>│ Da li to vazi samo za ovu funkciju ili ne, that's the
>│ question!
Baš si se trudio ! Hvala !
Bojim se da sve to zavisi i od broja promenljivih koje koristi
procedura i da tu još treba pipati. Na žalost, kad sam ostavio to
pitanje ostao sam i bez vremena. Stalno nešto izbije :(, pa nisam
stigao da puno petljam.
bye, andrejl
clipper.514ndragan,
/ INDEX ON RECNO() TO IndFajl
Indeksni pojam mož da bude svašta:
index on 1 to indfajl
će isto lepo da uradi. žak se dobija i isti redosled kao sa Recno(), samo će
Seek 1 da uvek ode na prvi slog.
clipper.515ndragan,
/ Koristi(m) se. Ali je stvar u ideji, karakterističnoj za sluhistički
Mnogo mi je ličilo na starostavnu kobol logiku iz doba paketnog unosa,
odložene obrade i još odloženije povratne informacije. To je bataljeno -
prihvaćena je bolja logika da se greška ispravlja na licu mesta, onog
trenutka kad se napravi.
clipper.516zkrstic,
Ajd jedno maaalo konstruktivno pitanjce :))
Ko ima nandef.h i extend.h, al' prerađene da rade sa
Borlandovim C-ovima, sve jedno koja varijanta, TC, BC... To
je bar, koliko ja znam jedini problem, da bih vezao TC i Cli-
pper 87. Originalni hederi iz clippera 87 rade, na žalost,
samo sa MSC-om :((
Obzirom da su mali fajlići, mogao bi ovdi da okači,
kopirajt ne kršimo ;)) jel' nisam ja kriv Nantucketu što im
niko nije rekao da Je Borland firma koja ne pravi usisivače
i ostalu belu tehniku, veš nešto sasvim drugo ;))))
Pozdrav, zkr
clipper.517squsovac,
Hi kliperaši. Imam jedan problem koji sam rešio na prilično nezgrapan način, pa
me interesuje ima li neko kakvu dobru ideju ili iskustvo.
Naime pretpostavimo da imam bazu tipa:
A - Char(20)
B - Num(5.2)
C - Char(20)
D - Num(5.2)
I sada bi trebalo prikazati/štampšati/menjati/brisati ili sl. podatke koji
zadovoljavaju prilično komplikovan splet uslova koje korisnik zadaje. I tu ne
bi bilo problema kada bi komplet uslova bio na primer:
A = "Petrovic" .AND. B>20 itd
međutim u kompletu uslova može da se desi i na primer A=C .AND. B>35 ili sl.
Uslove naravno ne mogu zadati u početku, jer ih valja računati za svaki slog (a
u bazu je unešeno već podataka za oko 15.000 ljudi. Dakle, postoji li u kliperu
nešto slično onom delu assista iz dB3+ ili je uslove obavezno rešavati ovako
pešački preko makroa kako sam ja to uradio. Problem je što baza ima oko 20
polja a za svako od njih može korisnik dati po jedan uslov (teoretski).
Zahvaljujem unapred na korisnim savetima
SQ
clipper.518dpaun,
>> Mnogo mi je ličilo na starostavnu (...) logiku (...)
>> prihvaćena je bolja logika da se greška ispravlja na licu mesta
Rekoh ja braćo da nije stvar u logici, ali nemam kome.
Ako, samo da ste Vi meni živi, zdravi i Clipperavi.
dPaun()
clipper.519dpaun,
Clipper rodbino,
Ponavljam jedno pitanje od ranije ...
1. Kako da se izvrši autorska registracija programa ?
(žuo sam o autorskoj agenciji. Ako je tačno, gde,
šta, kad, kako, koliko. Ako niko od braće nije to
činio do sada, neka se raspita. Baš mi je hitno.)
... i dodajem dva nova:
2. Koliko veliki .Exe program može da napravi Clp501 ?
(Ako teoretski nije ograničen, šta kaže praksa.)
3. Pošto volim da mi je listing piciš-piciš, naredbe
koje me nerviraju (na primer, SET CURSOR ON/OFF)
zamenjujem domaćim funkcijama (DajK(), SkloniK())
koje ih pozivaju. Zanima me da li, sem estetskog
zadovoljstva, ovi surogati rade i neku pakost koju
ja zasad ne vidim!
dPaun()
clipper.520ppekovic,
>> Ko ima nandef.h i extend.h, al' prerađene da rade sa
>> Borlandovim C-ovima, sve jedno koja varijanta, TC, BC... To
>> je bar, koliko ja znam jedini problem, da bih vezao TC i Cli-
>> pper 87. Originalni hederi iz clippera 87 rade, na žalost,
>> samo sa MSC-om :((
I ako središ hedere, zaboravi sa TC-om sve što pomisli na
"plivajuće zareze" jerbo se način rada sa istim razlikuje u odnosu na
msc ( pa samim tim i na clipper, jer je clipper pisan u msc-u).
Nezgodno je što se tc grafika oslanja na gore pomenute "zareze".
Paya
clipper.521ppekovic,
>> I sada bi trebalo prikazati/štampšati/menjati/brisati ili sl. podatke koji
>> zadovoljavaju prilično komplikovan splet uslova koje korisnik zadaje. I tu
ne
>> bi bilo problema kada bi komplet uslova bio na primer:
>> A = "Petrovic" .AND. B>20 itd
Rešenje ovog problema preko makroa je mnogo klimava stvar jer je
ograničena kako dužina makro stringa tako i broj uslova (neznam na
koliko).
Ta stvar je i mene mučila dugo, pa sam (vkr i ja) rešio to tako
što ubaciš još jedno polje u bazu (nek se zove recimo tag). Onda ti
lepo pustiš korisnika da unese uslov, pa odmah po unosu setuješ tab
polje za sve slogove koji zadovoljavaju taj uslov. Kad unese sledeći,
ponoviš operaciju. Dodaš mu još i opciju da može da izvrši i
deselekciju, znači da u zavisnosti od određenog uslova skine tag-ove
sa onih slogova koji zadovoljavaju uslov i dobio si sasvim upotrebljiv
sistem za selekciju. Još dodaš da može da tag-uje jedan po jedan slog
(strelicama pa space i sl.) i gotovo.
Paya
clipper.522nbatocanin,
Ako promenljive koje se unose imaju neku složeniju zavisnost,
kontrola se ne može obaviti VALID i WHEN opcijama, već mora tek posle
unosa svih.
clipper.523squsovac,
Hvala za savet. Nešto sam se stalno lomio oko toga kako najbolje da
rešim problem, i ideju sa poljem sam već bio odbacio iz jednostavnog razloga
što mi nije palo na pamet da odmah posle prvog uslova, dakle pre zadatog
i/ili pretrči po bazi i taguje bitne slogove. Stalno mi se činilo da bi to
ostajalo na kraju. Ovako će, siguran sam funkcionisati.
clipper.524dejanr,
>> 1. Kako da se izvrši autorska registracija programa ?
>> (žuo sam o autorskoj agenciji. Ako je tačno, gde,
>> šta, kad, kako, koliko.
Ovo je jedno od češćih pitanja na Sezamu. Ukratko, adresa Autorske
agencije je Majke Jevrosime 38, Beograd, tel. 325-997. Najbolje se,
dakle, raspitaj kod njih - mislim da treba listing programa i neki
opis.
clipper.525vkrstonosic,
>> 2. Koliko veliki .Exe program može da napravi Clp501 ?
>> (Ako teoretski nije ograničen, šta kaže praksa.)
Ja sam video program od oko 900 K, moj rekord za sada je samo
500K :))
clipper.526andrejl,
>│ činio do sada, neka se raspita. Baš mi je hitno.)
E, čini mi se da sam ovo već negde pisao, ali može opet.
Moj drug ih je zvao (adresu i brojmogu da tražim od njega)
i saznao da:
- plaća se registracija (1000 din pre 2,5 meseca)
- treba predati listing ili disketu
- takođe vrše nešto u smislu distribucije
(posreduju pri prodaji, koliko sam raumeo)
i tada uzimaju nekih 15%
- rade samo pre podne, zvali smo jedno popodne i
javila se spremačica, a moj drug već počeo da joj
objašnjava...;)
- nakon registracije zaduženi su da štite autorska prava,
a to se "isplati" kada ti neko ćorne program, a ti ga
uhvatiš. U Zr je bio slučaj odštete u vidu laptop-a :)
Imam i ja par pitanja. čeleo bih da plaćam porez ;). Tj.
da li mogu da imam žiro račun bez firme i da se sve vodi
u vidu autorskih honorara i da li je tačno da je tada porez
"svega" 15%. U nekom spisku poreskih kategorija, nešto
najsličnije onome što želim je kategorija gde se pominje i
"emajliranje lonaca" i sl.
bye, andrejl
clipper.527dpaun,
Clipper rode rođeni!
Može li se .and. kako rešiti sledeći problem, na temu memo:
Uvod: tekst koji obrađuje MEMOEDIT() može se snimiti na disk kao običan DOS
fajl, uz pomoć funkcije MEMOWRITE(), ili preusmeravanjem preko SET
ALTERNATE. MEMOWRITE() prenosi i odgovarajuće meke markere za forma-
tizaciju teksta, dok drugi način - da ga sada ne obrazlažem - slaže
linije kao švajs-aparat metalne šipke, sve sa tvrdim markerom na
krajevima. Drugi način sam primoran da koristim kad želim da tekstove
više memo-zapisa snimim u jedan tekst-fajl na disku. Taj proces ima,
pored rečenog nedostatka, još i sporost koja se povećava sa poveća-
vanjem veličine memo-tekstova.
Pitanje: pošto je očigledno rešenje ovog problema u tome da se natera
MEMOWRITE() da izabrane memo-tekstove upisuje u jedan DOS fajl, molim
stariju Clp braću da stave prst na čelo i smisle način kako da se
to izvede.
I nemoj opet da mi se svi umusite čim spomenem Memo!
Ajd' sad svako na svoj zadatak.
dPaun--
clipper.528kanda,
>> Pitanje: pošto je očigledno rešenje ovog problema u tome da se natera
>> MEMOWRITE() da izabrane memo-tekstove upisuje u jedan DOS fajl, molim
>> stariju Clp braću da stave prst na čelo i smisle način kako da se
>> to izvede.
oj dpaune, nisam bas najbolje shvatio u cemu je problem, al da
ipak probam... u principu, memo polja se uglavnom ponasaju
kao stringovi, sto ce reci da mogu 'ladno' da se npr. upisu u fajl
sa fwrite(), da moze po njima da se dzara sa strtran() itd.
otprilike:
h=fcreate('memo.txt') // kreiras fajl
c=baza->memopolje // uzmes memo polje u string
fwrite(h,c) // pa to upises u fajl
... // pa radis jos mnoge i korisne radnje...
fclose(c) // zatvoris fajl
Ostaje problem onih markera. Tamo gde je memoedit() 'prelomila' red,
upisuje se chr(141) + chr(10). Tamo gde je korisnik to ucinio, tj.
pritisnuo ENTER, upisuje se CRLF, znaci chr(13) + chr(10). Dakle, ako
hoces da kad memo polje ubacis u fajl, tamo izgleda isto kao i na
ekranu, ti zamenis sve chr(141)+chr(10) sa chr(13)+chr(10) ; bas to radi
funkcija hardcr() - ubacis c=hardcr(c) pre fwrite() i to je to. Ako pak
hoces da to moze da se ucita u tekst procesor, pa ti to sto je memoedit()
prelomila redove smeta, ti izbacis sve te chr(141) + chr(10), moze sa
c=strtran(c, chr(141) + chr(13), '') pre fwrite(). Inace, onaj chr(141)
se u literaturi zove 'soft carriage return', za razliku od chr(13) koji
je naravno 'hard carriage return'
clipper.529dvokshi,
Naprimer ovako :
********************
local hand
use baza
hand=fcreate('gomila.txt',0)
if ferror()<>0
?'File create error : ',ferror()
else
do while !eof()
fwrite(hand, memo_field)
skip
enddo
fclose(hand)
endif
*****************
Samo pazi da ti memo_field završava sa CR-LF (ili ga dodaj sam), inače
sledeći memo_field nastavlja u istoj liniji. Još možes dodati kontrolu
greške FWRITE -a, itd.
clipper.530nbatocanin,
> 2. Koliko veliki .Exe program može da napravi Clp501 ?
> (Ako teoretski nije ograničen, šta kaže praksa.)
Ja sam pravio programe oko 1MB, ladno radi na 512K memorije, još mogu
i dibager da startujem. U stvari, sve zavisi od velicine dela koji
ide u osnovnu memoriju: razne tabele, fiksni overleji, itd. U
principu sporo raste, ali retko ide ispod 300-400K.
> 3. Pošto volim da mi je listing piciš-piciš, naredbe
> koje me nerviraju (na primer, SET CURSOR ON/OFF)
> zamenjujem domaćim funkcijama (DajK(), SkloniK())
> koje ih pozivaju. Zanima me da li, sem estetskog
> zadovoljstva, ovi surogati rade i neku pakost koju
> ja zasad ne vidim!
SET CURSOR pretprocesor prevodi u SetCursor() funkciju, pa tvoja
funkcija poziva funkciju, što je apsolutno neškodljivo, osim
nerviranja steka i procesora.
clipper.531nbatocanin,
> Pitanje: pošto je očigledno rešenje ovog problema u tome
> da se natera MEMOWRITE() da izabrane memo-tekstove upisuje
> u jedan DOS fajl, molim stariju Clp braću da stave prst na
> čelo i smisle način kako da se to izvede.
U čemu je problem? HARDCR() lepo zamenjuje soft-return oznake sa
hard-return, a memo polja lepo "sabereš" kao stringove, pa sve zajedno
upišeš u datoteku pomoću MemoWrite().
clipper.532vkrstonosic,
>> Ostaje problem onih markera. Tamo gde je memoedit() 'prelomila' red,
>> upisuje se chr(141) + chr(10). Tamo gde je korisnik to ucinio, tj.
Probaj MEMOTRAN()
clipper.533ndragan,
/ kontrola se ne može obaviti VALID i WHEN opcijama, već mora tek posle
/ unosa svih.
Svakako, što propusti Mali Radojica dočekuje Starina Novače. I jedno i
drugo. Hteo sam kasti da ako se kontroliše _samo_ naknadno, to izaziva
popriličnu nervozu kod operatera, jer češće mora da se vraća dooosta
nazad da ispravlja itd. Nervozan operater pravi nove greške, i izmišlja
nove tipove grešaka. Zato mislim da je najbolje presresti grešku onog
trenutka kad može da se uoči - što pre to bolje.
Bue_ Ndragan
clipper.534dpaun,
>>
>> Clipper rode rođeni!
Odgovor na 5.528, 5.532, 5.529
Hvala, braćo! Prosto mi bio zaribao centar za Clipper.
Primenio sam, dakle, rešenje sa funkcijama niskog nivoa,
FCREATE(),FWRITE(),FCLOSE(). Pošto sam želeo da grupišem
niz memo-polja u jedan DOS fajl, a ispred svakog da ide,
najpre, sadržaj nekog drugog polja baze, i taj sadržaj
sam takođe pisao sa FWRITE(). Prazne redove, neophodne da
bi se izbeglo "slepljivanje" tekstova, dodavao sam ovako:
s := spac(xx) + chr(13) + chr(10)
fwrite(dos_file, s)
Probao sam da sa ovom funkcijom pozovem moju funkciju, radi:
fwrite(dos_file,moja_func())
Inače, dopunske operacije sa mekim i tvrdim markerima nisu
potrebne. Tekst je na disku sasvim u redu i raspored markera
je normalan. Važno je još i ovo: dalja obrada teksta je idealna
jedino u WordStaru (zna se i zašto). Probao sam, na kratko, WP501
i kada se unosi preko F5 javlja da format nije kompatibilan!
Išao sam preko konverzije (kao da je tekst WS3.x) i uspeva, ali
se u ovom slučaju gube tabulatori i tekst se sav slepi za levu
marginu.
Osvrt na 5.531 (ideja brata nBatocanina)
>> memo polja lepo "sabereš" kao stringove, pa sve
>> zajedno upišeš u datoteku pomoću MemoWrite().
Memo-polje može biti string do 64 K. Nisam smeo da se upustim u
operacionalzaciju ove ideje jer ne znam kako bi sve funkcionisalo,
obzirom na memoriju. Zamislimo da je svaki memo maksimalan i da
treba "sabrati" tridesetak takvih slogova, pa tek onda zapisati
na disk?! Pošto se gore navedeno rešenje pokazalo idealnim, ovu
mogućnost sam samo "primio k znanju".
Hvala svima.
dPaun(.T.)
clipper.535dpaun,
>> / kontrola se ne može obaviti VALID i WHEN opcijama, već mora tek
>> posle / unosa svih.
>>
>> ako se kontroliše _samo_ naknadno, to izaziva popriličnu nervozu
>> kod operatera, jer češće mora da se vraća dooosta nazad da ispravlja itd.
Pošto sam ja ovo započeo, red je i da probam da rezimiram /a probao
samo i obe varijante/:
1. Clipper, videli smo, ima mogućnosti za oba načina kontrole unosa.
2. Koji će se primeniti, zavisi od konkretne situacije:
- od veličine (broja polja) maske i složenosti unosa (odakle su
i kakvi su podaci koji se upisuju);
- od nerava i naravi "operatera" (ergonomija);
- od vrste i složenosti procesa kontrole.
- i ko zna čega još /na primer: meni u trenutnoj kontroli
veoma smeta što se PROVERA vrši svakom prilikom kada se
prolazi kroz polje! Kada se kontrola sastoji od, npr,
provere kako se uneti podatak odnosi prema nekoj drugoj
bazi - koja raste li raste, a i treba da raste - onda
je vožnja gore dole po masci neprijatna jer će stalno
da "zapinje" na pojedinim mestima! /
3. Rešenje je, izgleda, u "kombinovanom" načinu kontrole. Ideja
koju sam izneo - vraćanje na određeno mesto maske preko
KEYBOARDA - treba operatera da oslobodi straha da će morati da
se vraća *doosta* nazad ... A da posle izmene na određenoj
"tački" neće morati da ide *doosta* napred, podsetimo ga da
ima CtrlW ...
Klanjam se,
dPaun(), niži Clipper činovnik iz unutrašnjosti.
clipper.536ndragan,
/ veoma smeta što se PROVERA vrši svakom prilikom kada se
Ništa te ne sprečava da u Valid funkciji izdvojiš slučajeve koje nećeš
kontrolisati i ovo izbegneš; takođe postoje načini da se ustanovi da li
je polje menjano ili nije; ako nije, opet preskačeš kontrolu. Time se
izbegava problem na koji se žališ.
/ KEYBOARDA - treba operatera da oslobodi straha da će morati da
FoxPro ima lepši način - Valid može da vrati rezultat, naprimer, -5, i
to znači da se kursor parkira pet polja pre testiranog polja. Ako takvu
kontrolu staviš na poslednje polje... dobio si to isto, osim što
izbegavaš mogućnost da unutar onog Keyb uleti nešto što je operater u
brzini ugurao u tastaturu dok je tvoja procedura radila...
/ dPaun(), niži Clipper činovnik iz unutrašnjosti.
Bue_ Ndragan, zalupati foksovac, ovdašnji
clipper.537dpaun,
Clipper braćo,
Seća li se još ko DOS-a 3.20?
Bio sam u prilici da postavim program jednom pobratimu koji
ima XT mašinu sa tom verzijom DOS-a i 512 K RAM-a. Programu je
potrebno preko promenljive okruženja povećati broj otvorenih faj-
lova. U Config.sys je postavljeno files=35, a u Autoexec.bat do-
data linija set clipper=f35 (što je, inače, za dotični program
provereno na 10-ak AT mašina). Na žalost, na mestu gde se otvara
oko 30-ak što baza što indeksa - stane i "prijavi" da zbog DOS
greške 4 ne može da otvori taj-i-taj dbf ili ntx fajl (zavisi koji
mu se nađe na spisku "prekoračenja"). DOS greška broj 4, nesumnji-
vo, ukazuje da nema dovoljno "bafera" za toliki broj fajlova!
Pošto se pomenuta situacija razlikuje od drugih jedino po verziji
DOS-a, zaključio sam da bi problem mogao da bude u tome. Poveća-
vao sam brojku i u Config-u i u Autoexec-u /do 101 i nazad/, ali
komp ni da trepne. Prema iskustvu i uputstvu, kada pređe dara meru,
DOS treba da se pobuni (nešto kao out enviroment ...); ovaj ni to
nije hteo. Pa se pitam, je li to falinka te fosilne verzije 3.20,
ili je neki drugi DOS đavo u pitanju.
Ako neko od Clipper501 rodbine ima slična iskustva, neka šarne odgovor
kako ga je rešio. Lično, ovde ću pokušati najpre sa nekom novijom DOS
verzijom.
dPaun(v49)
clipper.538pjankovic,
Treba da stoji velikim slovima: SET CLIPPER=F35.
Pedja
clipper.539ndragan,
/ ima XT mašinu sa tom verzijom DOS-a i 512 K RAM-a. Programu je
Neka ga pokloni nekoj školi ili nek ga preuzme direktorova sekretarica
da vodi rokovnik. I... da, može i za tetris. žemu inače može da služi
ih te?
Bue_ Ndragan
clipper.540dpaun,
>> / ima XT mašinu
>>
>> Neka ga pokloni nekoj školi ili
Ma, čovek je na njemu završio fakultet, a upravo ovih dana je
trebalo da magistrira u jednoj stranoj državi, ali su ga blokirali...
PS. A kartica CGA! A žena čangrizava ...
dPaun(AT)
clipper.541wizard,
>> žemu inače može da služi ih te?
Za Sezam. :)
<<nenad<<
clipper.542dpaun,
>> Treba da stoji velikim slovima: SET CLIPPER=F35.
Probao sam i ne ide! Mora da bude štos u nečem drugom!
Pomagajte, braćo!
dPaun(---
clipper.543kanda,
Pitanje u vezi extend sistema.
Da li je moguce _par?? funkcijama dohvatiti elemente 'ugnjezdjenog'
niza ? Recimo, imam C funkciju :
------------
void pascal yo(void){
_retni(_parni(1, 3, 2)); /* treba da vrati a[3][2] */
}
------------
pa je zovem iz klipera :
------------
a := {1, 2, {31, 32}}
? yo(a) // trebalo bi da vrati 32, a vraca 0 ?
------------
U knjizi 'Clipper 5' od Ricka Spencea, str. 379 pise da je ovo
MOGUCE, al meni nesto ne polazi za rukom. Jel zna neko u cemu
je stos?
clipper.544nimi,
Da li je principijelno ispravno ili ne reci da je prvi prenos
niza a1 u f-ju ubaci() po vrednosti a drugi po referenci.
Promenom mesta poziva dobija se isto.
Proc Main()
LOCAL a1:={"Zut","Plav","Crven"}
Ubaci(a1)
Aeval(a1,{|f| qout(f)}) //izdaje :Zut Misko Plav
? "Posle reference"
?
Ubaci(@a1)
Aeval(a1,{|f| qout(f)}) //izdaje :Zut Misko Misko
RETURN
FUNCTION Ubaci(arr)
Ains(Arr,2)
Arr[2]:="Misko"
RETURN NIL
clipper.545jpiri,
>> Probao sam i ne ide! Mora da bude stos u necem drugom!
>> Pomagajte, braco!
A jesi probao da zamenis DOS? Barem sa verzijom 3.30?
(ako se ne varam tek 3.30 ima mogucnost 255 otvorenih datoteka)
clipper.546zkrstic,
>>> Probao sam i ne ide! Mora da bude stos u necem drugom!
> A jesi probao da zamenis DOS? Barem sa verzijom 3.30?
> (ako se ne varam tek 3.30 ima mogucnost 255 otvorenih datoteka)
Sa 105% ti garantujem, radi na dosu, >= 3.30
Juče sam nešto prčko po knjizi, u vezi nekih ograničenja, pa baš videh
i taj štos.
Pozdrav, zkr
clipper.547nbatocanin,
Niz se *uvek* prenosi kao pokazivač na prvi element, tako da
pojedinačna izmena elemenata uvek menja i originalni niz. To znači,
ako se u proceduri nađe naredba X[3] := 123, obavezno se menja i
originalni niz, bez obzira na način prenosa - adresa niza i kopija
adrese niza pokazuju na jedan isti niz:
...
x := {1, 2, 3}
pp (x) // {1, 22, 3}
x := {1, 2, 3} X ──────────>┌> {1, 2, 3}
pp (@x) // {1, 22, 3} │
... │
│
proc pp (niz) niz──────────┘
niz[2] := 22
return
Ako se, međutim, menja pokazivač na niz, onda ima razlike:
...
x := {1, 2, 3}
pp (x) // {1, 2, 3} X ──────────> {1, 2, 3}
pp (@x) // 123
...
proc pp (niz) niz─────────> 123
niz := 123
return
Jer se u drugom slučaju menja originalna vrednost.
clipper.548ndragan,
/>> Treba da stoji velikim slovima: SET CLIPPER=F35.
/ Pomagajte, braćo!
A malim slovima?
clipper.549dpaun,
>> Sa 105% ti garantujem, radi na dosu, >= 3.30
>>
>> Juče sam nešto prčko po knjizi, u vezi nekih ograničenja, pa baš
>> videh i taj štos.
>>
>> Pozdrav, zkr
Pretpostavljam da si u kucanju ispustio caku koju si našao u knjizi.
Budi ljubazan pa je pošalji!
dPaun
clipper.550dpaun,
>> />> Treba da stoji velikim slovima: SET CLIPPER=F35.
>> / Pomagajte, braćo!
>>
>> A malim slovima?
Prvo je bilo otkucano malim slovima, nije išlo; probao sam velikim
slovima - ne ide! Amaaaan ...
dPaun
clipper.551zkrstic,
> Pretpostavljam da si u kucanju ispustio caku koju si našao u knjizi.
> Budi ljubazan pa je pošalji!
Nisam, govorili smo o SET CLIPPER=F050
Ovo lepo radi na DOSU 3.3 i većem, za niže, ne važi :(
zkr
clipper.552ndragan,
/ Prvo je bilo otkucano malim slovima, nije išlo; probao sam velikim
/ slovima - ne ide! Amaaaan ...
Ostao sam bez ideja ;(. Poslednji pokušaj: grčka slova, možda?
clipper.553djoskovski,
Zdravo,
Pisem on-line , Valjda ce biti dobro
set CLIPPER= F35 na pr. nije isto sto i set CLIPPER = F35
probajte oba dva i vedecete SET -om da postoje dve Env-var.
za vise od standardnih 15 Fileova MORA se opotrebiti
SET CLIPPER= ...... Znaci rec CLIPPER mora biti slepljena
znakom za = sa druge strane nije bitno.
Inace datoteke se broje SVE RADNE ZONE U UPOTREBI+SVI OTVORENI
INDEX FILEOVI+5(COM,PRN,CON,..)+2 (ovo zadnje za svaki slucaj)
ovo bi trebalo da radi 100% ako je u CONFIG.SYS broj >=
i ako programu ostane dovoljno memorijeHHKKM za rad.
Pozdrav,
dJoskovski
clipper.554nopsenica,
Jedino pomocu == se mogu porediti objekti. Objekti se zaista mogu porediti
jedino pomocu ==, ne radi cak ni !=.
Nenad
clipper.555nopsenica,
Zasto Clipper 5.01 uz DOS 5.0 nekada (ne uvek!) pri linkovanju programa sa
PLL pravi probleme? Problem se manifestuje kod startovanja programa, jer se
program buni da ne valja struktura loadable file-a (ne zna se kojeg). Ponekad
pomogne ponovo linkovanje PLL-a ali ne uvek. Help!
Nenad
clipper.556dpaun,
>> Ovo lepo radi na DOSU 3.3 i većem, za niže, ne važi :(
>> žžžžžžžžžžžžžžžž
Problem je upravo u tome: da se natera DOS manji od 3.3 da otvori više od
tuce fajlova. Očigledno, preko FILES-a ne može. Seća li se neko FCB-a?
Nije li tu odgovor?
dPaun
clipper.557bora,
Ako se dobro secam pocetka ove diskusije odgovor je sledeći:
Tek počevši od DOS-a 3.30 moguće je otvoriti istovremeno više od 15
(FILES), tako da naredba FILES=xx i SET CLIPPER=Fxx nemaju smisla
za DOS verziju 3.20 i prethodne.
Uzeti u obzir da je EKRAN jedna arhiva, ŠTAMPAž druga,... tako da
samom korisniku ostaje samo desetak za rad (u KLIPERU SE BROJE SVE
OTVORENE ARHIVE I *.DBF i *.NTX).
Jedino rešenje: Reducirati program, ili što je normalnije promeniti
operativni sistem.
Pozdrav Bora
clipper.558kzoran,
Ljudi, kako se "upotrebljava" Nanfor toolkit? Instalacija (kompajliranje i
formiranje biblioteke) mi ne daje nikakve rezultate, iako sam pokušao sve
što mi je palo na pamet. Ne mogu da iskoristim ni gotov .LIB fajl koji
se nalazi u arhivi. Na svakom mestu u Clipper programu na kom izvršim
poziv neke funkcije iz nanfor.lib, linker javlja "unresolved external".
O čemu se radi?
Pozdrav,
Zoran.
clipper.559kanda,
>> Problem je upravo u tome: da se natera DOS manji od 3.3 da otvori
>> više od tuce fajlova. Očigledno, preko FILES-a ne može. Seća li se
>> neko FCB-a? Nije li tu odgovor?
Verovatno jeste... ako mozes da prepravis Clipper da umesto handle
koristi FCB sistem :)
Cemu toliko insistiranje na nekom bajatom DOS-u ?
clipper.560kanda,
>> Ljudi, kako se "upotrebljava" Nanfor toolkit? Instalacija
>> (kompajliranje i formiranje biblioteke) mi ne daje nikakve rezultate,
>> iako sam pokušao sve što mi je palo na pamet. Ne mogu da iskoristim
>> ni gotov .LIB fajl koji se nalazi u arhivi. Na svakom mestu u Clipper
>> programu na kom izvršim poziv neke funkcije iz nanfor.lib, linker
>> javlja "unresolved external". O čemu se radi?
Hm, izvini ako je moje pitanje glupo... jesi li povezao biblioteku?
'RTLINK FILE ime LIB nanfor'.
clipper.561nbatocanin,
> Ljudi, kako se "upotrebljava" Nanfor toolkit?
Kako linkuješ?
clipper.562kzoran,
>> Hm, izvini ako je moje pitanje glupo... jesi li povezao biblioteku?
>> 'RTLINK FILE ime LIB nanfor'.
Ma, nije glupo. Mogla je da bude glupost samo sa moje strane, ali, evo, sve
to je sacekalo dva dana, sednem ponovo da instaliram taj nanfor (ne znam ni
sam zasto na tome insistiram - verovatno ne zbgo samog Clipper-a koliko da
otkrijem u cemu gresim) i opet ista stvar. Sve sam pokusavao, cak i kompaj-
liranje i linkovanje samo pojedinih .obj fajlova koje sam zeleo da isprobam,
ali bez rezultata.
Jedino sto cu jos pokusati je da ponovo preuzmem sa Sezama toolkit; postoji
mogucnost da mi je neki od fajlova ostecen, jer vec nedeljama stoje raspa-
kovani u jednom poddirektoriju u koji svasta trpam, dearhiviram, instaliram
i sl.
U svakom slucaju, hvala na savetu.
Pozdrav,
Zoran.
clipper.563kzoran,
>> Kako linkujes?
Prvo sam poceo propisanom sintaksom "rtlink file imeobj library nanfor",
sa i bez ekstenzije, a kad sam video da posle par varijacija nista ne pomaze,
poceo sam da lupam. Prvo sam umesto imena biblioteke navodio listu objektnih
fajlova koji su mi trebali, opet sa i bez ekstenzije. Zatim sam poceo da
linkujem MS linkerima (iz DOS-a 5.0, MSC6, MASM 5.1) - bez rezultata. Sledece
je bilo igranje sa env. varijablama OBJ i LIB, pa ponovna instalacija toolkita
sa putanjama koje su navedene u nanfor.rmk fajlu, misleci da sam mozda kod
konfigurisanja u njima nesto zgresio - opet nista. Na kraju sam posumnjao na
ispravnost fajlova i mogucu gresku prilikom prenosa sa Sezama - nije ni to.
Vise me gotovo i ne interesuje nanfor.lib :)); hocu da se uverim da nisam
za generalnu. Ili mozda jesam ...
Pada li tebi sta na pamet? Evo sta mi linker prijavljuje (nije "unresolved
external", kako sam to u prvoj poruci napisao - to mi je valjda javljao
MS linker):
*************************************************************************
.RTLink for Clipper Dynamic Overlay Linker / Pre-Linker Version 3.13
(C) Copyright Pocket Soft Inc., 1988-1991. All Rights Reserved.
UNDEFINED SYMBOL(S) AFTER LIBRARY SEARCH:
SYMBOL FIRST REFERENCE
------ ---------------
'FLOPTST' FK.OBJ
warning wrt0022: .EXE may not execute properly -- undefined symbols
240K
1 warning message(s)
**************************************************************************
Pozdrav,
Zoran.
clipper.564vili,
>
> UNDEFINED SYMBOL(S) AFTER LIBRARY SEARCH:
> SYMBOL FIRST REFERENCE
> ------ ---------------
> 'FLOPTST' FK.OBJ
>
> warning wrt0022: .EXE may not execute properly -- undefined symbols
> 240K
> 1 warning message(s)
Meni ovo vise lici na gresku u programu nego na problem sa 'library'.
U 'file'-u FK.PRG imas poziv funkcije (ili procedure) FLOPTST koje
nema na vidiku.
Vili
clipper.565ndragan,
/ tuce fajlova. Očigledno, preko FILES-a ne može. Seća li se neko FCB-a?
Fcbs = 120,0
Ovo smo morali da ubacujemo u config.sys kod RPTI mreže do verzije
1.41; od 1.42 nadalje ne treba. Pošto ta mreža zahteva instaliran
SHARE, moguće da ni ta linija sa Fcbs neće pomoći bez njega. Prvi broj
je maksimalni broj istovremeno otvorenih fajlova, a drugi je valjda za
minimum koji se mora sačuvati u otvorenom stanju (nikad mi nije bilo
jasno zašto, znam samo da smo uvek stavljali nulu, a za prvi broj
stavljali od 100 do 200).
Pomogao?
clipper.566dpaun,
>> Cemu toliko insistiranje na nekom bajatom DOS-u ?
Nisam primetio da je *toliko*, verovatno.
dPaun(žovekSačivcima++)
clipper.567vili,
> void pascal yo(void){
> _retni(_parni(1, 3, 2)); /* treba da vrati a[3][2] */
> }
Obzirom da _parni() prihvata samo dva parametra ovo gore
sigurno nece da radi. U tom smislu _parni(1,3) bi trebao
da bude pointer na vektor {31,32} pa bi moglo mozda
nesto ovako:
void pascal yo(){
int *s;
s= _parni(1,3);
_retni(s[1]);
}
????????????
Vili
clipper.568kanda,
>> UNDEFINED SYMBOL(S) AFTER LIBRARY SEARCH:
>> SYMBOL FIRST REFERENCE
>> ------ ---------------
>> 'FLOPTST' FK.OBJ
Probaj da u sorsu napises FT_FLOPTST umesto FLOPTST, verovatno je
u tome problem - sve rutine iz NANFOR biblioteke pocinju sa FT_.
clipper.569kanda,
>> Obzirom da _parni() prihvata samo dva parametra ovo gore
>> sigurno nece da radi. U tom smislu _parni(1,3) bi trebao
>> da bude pointer na vektor {31,32} pa bi moglo mozda
>> nesto ovako:
>>
>> void pascal yo(){
>> int *s;
>> s= _parni(1,3);
>> _retni(s[1]);
>> }
>>
>> ????????????
Nazalost, ne moze. _parni() vraca int, a ne int*, baska to sto
kliperov niz ne lici ni najmanje na niz u C-u.
Osim toga, otkud znas da _parni() prihvata samo dva parametra?
Deklaracija je int _parni(int,...) sto ce reci 'jedan ili vise parametara'
Video sam u jednoj knjizi konstrukcije tipa '_parni(1,5,4)' u smislu
'4. element 5. elementa niza koji je doturen kao prvi parametar'.
clipper.570kzoran,
Eureka! To je to! Pa, je li to moguće, ljudi mojiK ljudi moji, je li to
moguće???
Kanda, nikad ti ovo neću oprostiti!
Pozdrav,
Zoran.
clipper.571vili,
> void pascal yo(){
> int *s;
> s= _parni(1,3);
> _retni(s[1]);
> }
>
> ????????????
> Vili
Probao sam. Naravno ovako nesto nema teorije da radi. Nisam uspeo
ni na neku drugu foru.
Vili
clipper.572nbatocanin,
> UNDEFINED SYMBOL(S) AFTER LIBRARY SEARCH:
> SYMBOL FIRST REFERENCE
> ------ ---------------
> 'FLOPTST' FK.OBJ
Aaaah! Pa sve funkcije počinju sa FT_. Znači, pišeš FT_FlopTst (), a
ne FlopTst (). Uzgred, ova funkcija ima bug.
clipper.573toma,
Pomoz Bog junaci !
Trebao bi mi EXTENDA.INC ili DIR.OBJ programcica
DIR.ASM koji je okacen o neku poruku ovde. Ako ima neko
da nema sta da radi trenutno, molio bih ga da mi to
siljne ovde ili na mail.
Mlogo vi fala unapred.
▄▄▄▄▄ ▄▄▄▄▄ ▄ ▄ ▄▄▄
█ █ █ █▀▄▀█ █▄▄▄█
▀ ▀▀▀▀▀ ▀ ▀ ▀ ▀
clipper.574nbatocanin,
U jednom od ranijih "Računara" je objavljen listing funkcije NextID
sa greškom (ID je zamenjeno sa MAX). Ispravan listing glasi:
FUNC NextId (FileID)
LOCAL ID, fp, Buff
// Ako datoteka ne postoji, ID == 1
ID := 1
// Datoteka postoji...
IF File (FileID)
fp := FOpen (FileID, 0)
Buff := Space(5)
FRead (fp, @Buff, 5)
// Ovde je bila greska
ID := Val (Buff) + 1
// Ovde je bila greska
FClose (fp)
END IF
// Svejedno kreiraj novu datoteku i upisi tekuci...
fp := FCreate (FileID)
FWrite (fp, Str(ID,5,0))
FClose (fp)
RETURN ID
Zahvaljujem GStojkovicu na upozorenju. Ovo je ujedno i odgovor na
njegovo privatno pitanje.
clipper.575nbatocanin,
Evo! DIR.ASM i DIR.OBJ.
d.zipclipper.576nbatocanin,
Ako ste probali da dodate REPEAT petlju kao komandu svojim
programima, onda ste primetili da ovo ne pali:
#command REPEAT => WHILE .T.
#command UNTIL <uslov> => IF <uslov> ; EXIT ; END IF ; END DO
E, ali ovo 'oće:
#command REPEAT => WHILE .T.
#command UNTIL <uslov> => IF <uslov> ; EXIT ; END ; END
Razlog je što iza END može doći bilo koji tekst (komentar), pa ako
napišete END IF, Clipper sve do kraja reda shvati kao komentar uz
END.
clipper.577dpaun,
Jedan problem na temu WHEN:
FUNC Unos()
x,y GET polje1
x,y GET polje2 WHEN Daj()
read
FUNC Daj()
// preuzimanje vrednosti za polje2
// iz, na primer, neke baze ...
Opis: Kad je kursor na "polje2", pritiskom na AltF10 (recimo) treba
da se pređe u Daj().
Pitanje: Kako?
Obrazloženje: ja probao u Func Daj() da stavim Inkey(0), pa preko
If LastKey()==-39 itd ... Međutim, kad kursor dođe na "polje2"
postavljeni uslov "ne pali", već tastere treba pritisnuti na poziciji
"polje1", i to tek kao drugi pokušaj (jedanput, na primer, pritisnemo
bilo koji taster, pa tek onda AltF10).
- Probao još neke varijante i zaključio: bolje da pitam "na Sezam".
Vaš odani dPaun()
clipper.578vili,
> Ako ste probali da dodate REPEAT petlju kao komandu svojim
> programima, onda ste primetili da ovo ne pali:
>
># command REPEAT => WHILE .T.
># command UNTIL <uslov> => IF <uslov> ; EXIT ; END IF ; END DO
>
> E, ali ovo 'oce:
>
># command REPEAT => WHILE .T.
># command UNTIL <uslov> => IF <uslov> ; EXIT ; END ; END
>
> Razlog je sto iza END moze doci bilo koji tekst (komentar), pa ako
> napisete END IF, Clipper sve do kraja reda shvati kao komentar uz
> END.
Kod mene 'pali' i jedno i drugo.
Vili
clipper.579vili,
> Osim toga, otkud znas da _parni() prihvata samo dva parametra?
Cit'o sam u knjigama :).
> Deklaracija je int _parni(int,...) sto ce reci 'jedan ili vise parametara'
I tvoji i moji pokusaji govore (argumentima) da _parni() prima (zasad :))
samo dva parametra.
Vrlo sam zainteresovan da vidim resenje kojim se ugnjezdeni vektor prebacije
C-u. Da li je neko uspeo u tome? U NG-u postoji objasnjenje kako Clipper
prebacije vrednosti i reference C-u (VALUE, OREF i VREF i tome slicno), ali
nisam bas najbolje shvatio :(. Ima li neka bistra glava da to pravilno
protumaci i uspe da ugnjezdeni vektor prebaci C-u?
Vili
clipper.580dpaun,
>> Međutim, kad kursor dođe na "polje2"
>> postavljeni uslov "ne pali", već tastere treba pritisnuti na
>> poziciji "polje1",
Dok Clipper konzilijum veća kako da se reši problem, da pojasnim ovo
jednim citatom iz R. Spence, Clipper 5, s. 314:
"Opcija WHEN razlikuje se od VALID u tome što naredba READ
izvršava pre naredbe GET."
Problem koji sam postavio, mora i ovu osobinu WHEN-a da ima u vidu.
žekam.
dPaun
clipper.581vkrstonosic,
>> Dok Clipper konzilijum veca kako da se resi problem, da pojasnim ovo
>> jednim citatom iz R. Spence, Clipper 5, s. 314:
Zasto ne bi recimo uveo dve funkcije, jednu za when i jednu za
valid, koje bi vracale .T., a imale set key K_F10 to p_f10 i set key
K_f10 to, pa onda u proceduri p_f10 radi ono sto ti treba.
clipper.582toma,
=> Evo! DIR.ASM i DIR.OBJ.
Hvala veliko sto si se potrudio, nije mi bio dobar EXTENDA.INC iz S87.
U medjuvremenu sam nabavio Clipper 5.01 (tek sad, sta da radim),
i uglavnom je sve OK (za sada) sem jednog problemcica:
Sve se odvija na disku D:
na tom disku je dir D:\POSAO, koji je u path-u, i u append naredbi
autoexec fajla. E sad tu je i direktorijum D:\POSAO\PLATE koji
mi sluzi za *.prg i testiranje, posle cega program prebacim u
D:\POSAO. Kada pokusam da linkujem fajlove (Rtlink) u dir-u D:\POSAO\PLATE,
i ako fajl PLATE.EXE postoji u dir-u D:\POSAO linker javi sledece:
error ert0061: Input/output error on output file 'PLATE.EXE'
deleting temporary work file 'rt010112.swp'
Ako sad izbrisem D:\POSAO\PLATE.EXE i ponovo probam, sve je OK.
Sve je ovo, naravno, lako resiti, ali zasto se to desava ?
Pozdrav od Tome.
clipper.583mandrejevic,
Mali komentar na clanak "Tabele na Klipperu" od Nenada Batocanina
objavljenom u 83 Racunarima.
Posto sam se i ja mucio oko "brljanja ekrana" kada se TB objekat
osvezava, mislim da mogu malo da pomognem, a bez uvodenja
funkcije Fresh(TB). Naime, ubacivanjem jedne kontrolne sekvence
if-end resava se problem u potpunosti:
while .t.
nKey := 0
while !TB:Stabilize() .and. ((nKey := Inkey()) == 0) ; end
if nKey == 0
nKey := Inkey(0)
end
--> if TB:stable <----------------------------
do case
case (nKey == K_ESC)
Da ne bih bio mnogo pametan, ovo sam video u nekom od filova koje
sam pokupio sa JUBAS -Split (sada verovatno CROBAS) pre rata, pa
koga ne mrzi neka gleda. Inace ima dosta primera o TB objektima,
anomalijama Clippera i koje cega jos. Sve lepo spakovano u
CLIP-CRO.ZIP-u.
clip-cro.zipclipper.584dpaun,
>> Zasto ne bi recimo uveo dve funkcije, jednu za when i jednu za
>> valid, koje bi vracale .T., a imale set key K_F10 to p_f10 i set
>> key K_f10 to, pa onda u proceduri p_f10 radi ono sto ti treba.
Da mi poživiš dugo, brate, i da te Clipper dobro služi! Niže je
rešenje koje sam primenio, podstaknut tvojom idejom o dve procedure.
Nadam se da je primer jasan. Kome nije, neka pita.
*
PROC MaskaUnosa
č 13, 2 GET RecKLj1 PICT "č!" WHEN DajREC()
č 14, 2 GET RecKLj4 PICT "č!" WHEN SkloniK9()
č 15, 2 GET SifIzd PICT "99" WHEN DajKIZD()
č 16, 2 GET GodNas PICT "99" WHEN SkloniK9()
č 17, 2 GET SifJez PICT "99" WHEN DajKJEZ()
č 18, 2 GET SifVla PICT "99" WHEN DajKVLA()
č 19, 2 GET BrPRIM PICT "99" WHEN SkloniK9()
READ
*
FUNC DajREC() && Ovo je kao neki MESSAGE uz GET
č 24,0 SAY SPAC(77)
č 24,1 SAY "Upiši ključnu reč"
RETURN .T.
*
FUNC DajKIZD()
SET KEY -9 TO DajIZD
č 24,0 SAY "Pritisni F10 za spisak izdavača"
RETURN .T.
*
FUNC DajKJEZ()
SET KEY -9 TO DajJEZ
č 24,0 SAY "Pritisni F10 za spisak jezika "
RETURN .T.
*
FUNC DajKVLA()
SET KEY -9 TO DajVLA
č 24,0 SAY "Pritisni F10 za spisak vlasnika"
RETURN .T.
*
FUNC SkloniK9()
SET KEY -9 TO
č 24,0 SAY SPAC(77)
RETURN .T.
FUNC DajJEZ()
LOCAL sEkr := SAVESCREEN(6,30,16,76),iZ := 0,sBoja:=SETCOLOR()
SETCOLOR(cMask) && cMask definisan na početku programa
SELE 7 && Baza otvorena na početku programa
Bz := OdrBZP() + 1 && Korisnička funkcija za ograničavanje broja
&& zapisa u bazi, ako je veći od 4090
DECLARE BrJ ŠBzĆ, ImJ ŠBzĆ
GOTO TOP
DO WHIL !EOF()
iZ++
BrJŠiZĆ := SIF_JEZ
ImJŠiZĆ := STR(SIF_JEZ) + " " + NAZ_JEZ
SKIP
ENDDO
IF iZ == 0
SETCOLOR(sBoja)
č 24, 0 SAY SPACE(70)
č 24, 0 SAY " Nema ..."
INKEY(3)
RETURN .F.
ENDIF
č 6,30 CLEAR TO 16,76
č 6,30 TO 16,76
č 6,60 SAY "Izbor jezika"
č 16,38 SAY "Enter=izbor, Esc=izlaz"
Izb := ACHOICE(7,31,15,75,ImJ)
IF Izb > 0
SifJez := BrJŠIzbĆ
KEYBOARD BrJŠIzbĆ
ENDIF
RESTSCREEN(6,30,16,76,sEkr)
SETCOLOR(sBoja)
RETURN .T.
*
FUNC DajIZD()
...
*
FUNC DajVLA()
...
clipper.585pmsimic,
Molim da mi neko objasni kako da napravim rutinu pisanu u TC++ 2.0 koja ce se
koristiti i pozivati kao funkcija u CLIPPER-u. Molim primer prevodjenja i
linkovanja.
Unapred zahvalan , PMSIMIC iz Pristine
clipper.587nbatocanin,
> Kod mene 'pali' i jedno i drugo.
Moja greška. Pretprocesor i "END IF" i "END DO" prevodi samo u "END".
Problem je ako se napiše spojeno "ENDIF" i "ENDDO" - pogrešno sam
napisao.
clipper.588nbatocanin,
Nisam stigao da probam (probaću), ali mi se čini da je problem možda
u pozivanju funkcija _par. Naime, one argumente potrpaju na stek, a
rezultat se dobija takođe na steku. Možda se u onom
_retni ( _parni ())
krije neki problem. Probajte sa jednostavnim pozivima i u dibageru.
Ipak je u EXTEND.H stavljeno _parni (int, ...) - ne verujem da je bez
razloga. Ono sa adresom niza svakako neće.
clipper.589umajstorovic,
Jedan moj drug me je zamolio da ostavim ovde sledeće pitanje: Kako se u
Clipperu radi fflush u fajl. Naime, on otvori datoteku, nešto brlja po njoj, a
onda durga procedura otvori isti fajl, pa se tu ne primećuju promene. E, on je
to rešio tako što prvo zatvori, pa onda otvori fajl, ali to mu je valjda sporo,
pa me je zamolio da pitanje ostavim ovde. Hvala unapred
Pozdrav, Uroš
clipper.590fric,
> pitanje: Kako se u Clipperu radi fflush u fajl. Naime, on
> otvori datoteku, nešto brlja po njoj, a onda durga
> procedura otvori isti fajl, pa se tu ne primećuju promene.
Prema Clipper 5.0 Vodiču za programere od Ricka Spencea:
Operacija osvežava baf. prazni izlazni.
za čitanje baf. (flush)
COMMIT Da Ne <-- to tebi treba
flock() Ne Da
GOTO nRecNo Da Da <--- univerzalno
rlock() Ne Da
SKIP 0 Da Ne
UNLOCK Da Ne
clipper.591nbatocanin,
> Ako sad izbrisem D:\POSAO\PLATE.EXE i ponovo probam, sve
> je OK.
>
> Sve je ovo, naravno, lako resiti, ali zasto se to desava ?
Možda nema dovoljno prostora na disku? Ta greška se javlja kod greške
pri upisu na disk.
clipper.592nbatocanin,
> Molim da mi neko objasni kako da napravim rutinu pisanu u
> TC++ 2.0
Bojim se, nikako. Ili bar veoma teško.
clipper.593nbatocanin,
Problem sa ispisivanjem ekrana se javlja kada se pomeri pokazivač
sloga u datoteci, a TB objekat to "ne zna". Tada se pri sasvim
normalnom ispisivanju sa
WHILE !TB:stabilize() ; END DO
može desiti da se kursor pomeri na pogrešno mesto. Na primer,
pomerili ste pokazivač naredbom GO ili SEEK i sad treba potpuno
ispisati ekran. TB sada pokušava da zadrži istu poziciju kursora na
ekranu i tako se može desiti da "nedostane" slogova za ispisivanje.
Onda se pokazivač na ekranu pozicionira na pogrešan slog. Zato nisam
siguran da je ovo rešenje, jer će TB:stable *biti* .T., a kursor neće
biti na svom mestu.
clipper.594dvokshi,
> pitanje: Kako se u Clipperu radi fflush u fajl. Naime, on
> otvori datoteku, nešto brlja po njoj, a onda durga
> procedura otvori isti fajl, pa se tu ne primećuju promene.
> E, on je to rešio tako što prvo zatvori, pa onda otvori
> fajl, ali to mu je valjda sporo, pa me je zamolio da
> pitanje ostavim ovde. Hvala unapred
a zašto jednostavno ne napišeš
SELECT fajl
iz te druge procedure ?
clipper.595zkrstic,
>> a zašto jednostavno ne napišeš
>>
>> SELECT fajl
>>
>> iz te druge procedure ?
Uh, lepo što si se potrudio, al time zaista niŠta nemožeš postići.
Dovoljan je jedan maaaaaaali COMMIT
Pozdrav, zkr
clipper.596mandrejevic,
>│ siguran da je ovo resenje, jer ce TB:stable *biti* .T., a
>│ kursor nece biti na svom mestu.
Logicki gledano ti si sigurno u pravu. Mozda i ne podrazumevamo
pod "brljanjem ekrana" istu stvar. Uglavnom meni se nije dopalo
to da kada drzim strlicu na gore/dole i setam kroz bazu; posle
prvog ispisanog ekrana pocinje program da ispisuje svaki drugi
red (imam ukljuceno ubrzanje tastature preko mode). Po ubacivanju
jedne if-end sekvence dobijem taman toliko usporenje da se ovo
vise ne desava. Inace seek radim u privremenoj bazi (_temp) koju
kopiram u radnu (_work) i samo nju TBrowse-iram.
select _temp
index on &cKljuc to _temp
set filter to ...
seek dDatum1
copy to _work rest for &(cKljuc) <= dDatum2
Probao sam razne TBWHILE programe i nijedan mi se nije dopao.
clipper.597mbakovic,
Ú
Kako se u CLIPPER-u može najbrže rešiti problem indeksiranja
dela baze koji ispunjava neki uslov . U programima tipa dBASE
(dBASE III+ ,FOX ...) ovaj problem se jednostavno rešava posta-
vljanjem uslova FOR u liniju za indeksiranje :
INDEX ON <key> FOR <uslov> TO <ime>...
U dBASE IV stvari su nešto drugačije ali u principu se rešavaju
slično korišćenjem multi indexa . Koji bi način omogućio da se
u CLIPPER-u dođe do istih rezultata sa podjednakom efikasnošću ?
HHHHHÚ
clipper.598dpaun,
Za Clipper početnike ...
Našao sam se pred problemom da iz jedne GET-READ procedure "izađem" i
preko WHEN-a preuzmem određene podatke sa tastature /kao kriterijum za
pretraživanje pomoćne baze iz koje se podaci prenose u GET varijablu./
Da u novoj proceduri upotrebim opet get-read nije išlo /neće Clipper/,
onda sam "iz malog mozga" izvuko Accept i stvar je proradila! Sledeći
zahtev - da se sve to desi na određenom mestu na ekranu rešio sam
ovako:
č x,y
Accept "poruka" to var
Za Clipper naprednjake ...
Ne znam da li je ovo moglo i drugačije, a takođe ne znam kako da polje
var "obojim"!
Za Clipper i otadžbinu(v3.0)!
dPaun
clipper.599kanda,
>> Našao sam se pred problemom da iz jedne GET-READ procedure "izađem" i
>> preko WHEN-a preuzmem određene podatke sa tastature /kao kriterijum
>> za pretraživanje pomoćne baze iz koje se podaci prenose u GET
>> varijablu./ Da u novoj proceduri upotrebim opet get-read nije išlo
>> /neće Clipper/, onda sam "iz malog mozga" izvuko Accept i stvar je
>> proradila! Sledeći zahtev - da se sve to desi na određenom mestu na
>> ekranu rešio sam ovako:
>>
>> č x,y
>> Accept "poruka" to var
Nema problema da 'gnezdis' GET..READ, samo treba da imas u vidu
da ove komande rade sa nizom koji se zove GetList. Pa, ako zelis
da u okviru npr. WHEN funkcije imas novi GET..READ, ti na njenom
pocetku stavi LOCAL GetList := {} ili PRIVATE GetList := {}.
clipper.600ndragan,
/ slično korišćenjem multi indexa . Koji bi način omogućio da se
Pročitaj poruke iz decembra - marta... raspravljali smo dosta o ovome.
clipper.601dvokshi,
> Problem sa ispisivanjem ekrana se javlja kada se pomeri
> pokazivač sloga u datoteci, a TB objekat to "ne zna". Tada
> se pri sasvim normalnom ispisivanju sa
>
> WHILE !TB:stabilize() ; END DO
>
> može desiti da se kursor pomeri na pogrešno mesto. Na
> primer, pomerili ste pokazivač naredbom GO ili SEEK i sad
> treba potpuno ispisati ekran. TB sada pokušava da zadrži
> istu poziciju kursora na
Ja sam ovaj problem rešio ovako :
seek ključ
o:rowpos = 1
o:configure()
o:stable = .f.
Kad dolazi do petlje WHILE !o:stable ; o:stabilize() ; enddo
TBrowse pomeri kursor na prvi red i osvežava ekran. Kursor ostaje
na slogu kojeg je pronašao naredba SEEK.
Pozdrav, dv
clipper.602bbosko,
Pre nekog vremena sam dobio Flipper programski paket ali njegov NG
neradi pa bi zamolio nekog da mi ga posalje na MAIL ili preko Konf
Unapred Hvala
BBOSKOVIC
clipper.603dpaun,
>> Nema problema da 'gnezdis' GET..READ, samo treba da imas u vidu
>> da ove komande rade sa nizom koji se zove GetList.
Proradilo pa mi se usladilo! Hvala.
dPaun
clipper.604nbatocanin,
Ovako nešto sam i ja koristio, pa sam kasnije ipak prešao na
proceduru Fresh (ideju za nju sam preuzeo iz TBDemo). Svestan sam da
nije savrseno resenje, ali za sad radi. žini mi se da sigurno postoji
neko bolje i univerzalnije rešenje, samo ga treba naći.
clipper.605kanda,
Evo jednog dodatka za tbrowse. Cilj ove funkcije je da se, promenom mesta
aktivne linije na ekranu, postigne da je ekran sto bolje popunjen. Ideja
je da se, pozivanjem o : SkipBlock() utvrdi broj slogova iznad i ispod
aktivnog ; zatim se vrsi korekcija o : RowPos. Pozvati posle promena u
bazi (ili sta se vec prikazuje), dakle posle menjanja, brisanja, dodavanja,
trazenja po kljucu itd. Pri sledecoj stabilizaciji, sve bi trebalo (bar
sam ja to tako nameravao ;) da se pojavi na svom mestu. Nazalost, ova funkcija
primetno usporava rad.
PROCEDURE tbFresh(o)
LOCAL nRC := o : RowCount, nRP := o : RowPos, nU, nD
// Ispod aktivne linije, na ekranu ima mesta za jos nRC - nRP slogova.
// Pokusavamo da skocimo na zadnji od njih.
nD := Eval(o : SkipBlock, nRC - nRP)
// Sada smo na zadnjem slogu koji ce biti prikazan. On bi trebao
// da bude u zadnjem redu na ekranu. Znaci, iznad njega nam treba
// nRC - 1 slogova da bi ekran bio popunjen. Idemo na prvi.
nU := Eval(o : SkipBlock, -(nRC - 1))
// Sada smo na prvom slogu koji ce biti prikazan.
// Vracamo se na aktivni slog. Stvarno je preskoceno nU + nD slogova.
// Sada isto toliko, ali u suprotnom smeru.
Eval(o : SkipBlock, -(nU + nD))
// Prvi slog na ekranu je od aktivnog udaljen -(nU + nD) mesta.
// Znaci, aktivni slog je u 1 - (nU + nD) .tom redu.
o : RowPos := 1 - (nU + nD) // Ovo i jeste svrha celog ovog skakutanja
o : Configure()
o : RefreshAll()
RETURN
clipper.606zkrstic,
Ajd' da kukam :))
Pojavljuje mi se, dosta često, nakon kompajliranja i linkovanja
nešto čudno :)) Kad lepo napravim .EXE, pokušam da ga startujem dobijem
omanju porukicu, ružne sadržine ;)
error est0001: Illegal format in loadable file
Na žalost, takve poruke nema ni u NG-u niti bilo gde u knjigama
koje sam pregledao.
Da stvar bude smešnija, isti taj EXE fajl, ponekad posle nekoliko
bezuspešnih pokušaja uspe da se startuje :) Da napomenem, program i ne
stigne da se startuje. A kad ga startujem sa CLD <ime_programa.EXE> - on
radi :) Hmmm, ko li je ovde lud :)))))
Ima'l ko kakvu ideju?
Pozdrav, Zkr
clipper.607djoskovski,
Za majstore Clipper - a
U tabelarnom prikazu hocu da umam scroll - bar preko
celog ekrana(tabele) u principu ne mora scroll-bar moze i dru-
ga boja, ali bez posebnog skipbloka odnosno funkcije koja emuli-
ra skipblock, isto tako ne zelim da sva obelezja deklarisem u jed-
noj klasi tbcolumn, odnosno prljavi trikovi me ne zanimaju.
Znaci hocu scroll-bar preko vise TBCOLUMN objekta, dovoljna
je samo ideja, za uzvrat poklanjam program u CLIPPERU SVIMA! o kom
programu je rec znace se 27.07.1992 kad se vratim kuci u Skopje,
inece se momentalno nalazim u Oxridu.
clipper.608tuci,
Clipperaši pomagajte...
Kako da nateram SEEK da radi na numeričkim poljima ? U starom clipperu sve
radi kako treba, a u ovom novom (5.01) nemože da pronađe ni jedan podatak.
Primer:
Polje broj je u bazi definisano kao N 5 0.
USE Baza
INDEX ON broj TO num
br:=1
č 1,1 SAY "Broj: " GET br
SEEK br
? IF(FOUND(),"Broj je pronadjen","Broj nije pronadjen")
Pogadjate, rezultat je uvek: "Broj nije pronadjen".
Zašto ?
Pozdrav, Zlatko
clipper.609toma,
=> USE Baza
=> INDEX ON broj TO num
Ovo bi trebalo da radi:
use baza && Ovo radis samo kad dodje
index on broj to num && do nasilnog prekida,
reindex && ili ako inicijalizuješ datoteku -
use && - onda bez reindex.
....
use baza index num && Ovako bi trebalo da otvaraš datoteku
.... && ako vec postoji sa indexom.
seek n
....
Nadam se da će da proradi, inače kod mene sve radi ok.
pozdrav.
clipper.610charlie,
██ Kako da nateram SEEK da radi na numeričkim poljima ? U starom clipperu sve
██ radi kako treba, a u ovom novom (5.01) nemože da pronađe ni jedan
podatak.
Neznam zašto kod tebe ne radi, ali kod mene je broj pronađen.
BTW Nedostaje ti READ nakon GET-a
pozdrav,
charlie
clipper.611nbatocanin,
Izbaci DOS=HIGH direktivu iz CONFIG.SYS.
clipper.612nbatocanin,
Vec je bilo ovde, može ovako:
SetColor(Invert)
// Ispisi celu liniju
SetColor(Normal)
Ch := InKey(0)
// Ispisi celu liniju
clipper.613tuci,
¸> BTW Nedostaje ti READ nakon GET-a
Znam, štamparska greška :))
Problem je bio u indeksnim fajlovima. Na pocetku programa je stajalo:
USE baza1 index ind1,ind2
REINDEX
USE baza2 index ind1,ind2,ind3
REINDEX
...
Indeksni fajlovi (jedan deo fajla) su izgledali otprilike ovako:
! 00001199 ! 00002199 ! 00003199 ! 00004199 ! 00005199
Na mestima uzvičnika nalaze se ASCII kodovi ispod 32, a 199 je višak koji
zbunjuje Clipper 5.01 a nesmeta Clipperu Summer '87, jer program preveden
verzijom S'87 radi i sa ovakvim indeksnim fajlom. Zbog toga sam najpre
posumnjao u 5.01 a ne u fajlove :(
Posle prepravke programa na početku stoji ovako:
USE baza1
INDEX ON exp1 TO ind1
INDEX ON exp2 TO ind2
...
Indexni fajlovi izgledaju ovako:
! 00001 ! 00002 ! 00003 ! 00004 ! 00005
Program radi bez problema problema. žudi me da komanda REINDEX ne uklanja
magični broj 199 koji se uz pomoc magije pojavio u indeksnom fajlu.
Hvala tomi i charliju na pomoći !
Pozdrav, Zlatko ;)
clipper.614ndragan,
/ č 1,1 SAY "Broj: " GET br
/ SEEK br
/ ? IF(FOUND(),"Broj je pronadjen","Broj nije pronadjen")
Đe ti Read?
Bez brige, u nekoliko mojih programa stoji komentar tipa "konju jedan,
ovo ti je već deseti zaboravljeni Read!". Zato smo napisali rutinu za
unos, kod koje su prompt, imena polja, pikčeri i validi strpani u
parametre, a ona garantovano _ima_Read_.
Bue_ Ndragan
clipper.615toma,
PAčNJA CLIPPER-aši !!!!
Još jedna razlika izmedju S87 i 5.01: ALLTRIM() ne radi isto.
Summer 87
a=chr(9)+"toma"
a=alltrim(a)
a je još uvek chr(9)+"toma"
5.01
a je posle operacije samo "toma"
Moguće je da postoje još neki karakteri koje ALLTRIM
skida, kod mene je bio ovaj slučaj.
▄▄▄▄▄ ▄▄▄ ▄ ▄ ▄▄▄
█ █ █ █▀▄▀█ █▄▄▄█
▀ ▀▀▀ ▀ ▀ ▀ ▀
clipper.616jtitov,
> Summer 87
> a=chr(9)+"toma"
> a=alltrim(a)
> a je jos uvek chr(9)+"toma"
>
> 5.01
> a je posle operacije samo "toma"
FoxPro 2.0 isto ne skida chr(9) (tabulator). Ma taj clipan 5.01 mi se
nikada nije svidjao... '87 je prava stvar, ko voli clipper...
clipper.617ndragan,
/ USE baza2 index ind1,ind2,ind3
/ REINDEX
Ovo nikako ne preporučujem; štogod da pukne na disku, .dbf se bekapira
i može da se vrati, a indekse nema smisla čuvati jer se uvek mogu
napraviti novi; usput, može neko i sa PCT ili Norton-nečim da pročačka
baze; u slučaju da strada zaglavlje indeksnog fajla, neće ni raditi.
/ USE baza1
/ INDEX ON exp1 TO ind1
Ali zato ovome ne smeta ništa čak i ako indeks ne postoji. Jedino u
mrežnoj okolini preporučujem zaključavanje baze (use ... excl) da se ne
bi desilo da indeks ind1 bude zaključan - stvar onda puca.
BTW, pričam ovo iz Foksa, ali indeks je indeks; samo Index For <expr>
je foksov indeks :)
Uz to, pade mi na um da neko proveri da li u Kliperu radi ovo:
_=4
__=_+_ž_ && ž kao stepenovanje
?__
Ako ispiše 260.000, svaka čas.
Bue_ Ndragan
clipper.618charlie,
█ Uz to, pade mi na um da neko proveri da li u Kliperu radi ovo:
█
█ _=4
█ __=_+_ž_ && ž kao stepenovanje
█ ?__
█
█ Ako ispiše 260.000, svaka čas.
A šta si ti mislio da ispiše?
clipper.619ndragan,
/ a je još uvek chr(9)+"toma"
U foksprou 2.00 i 1.02 ne skida tab, upravo proverih.
clipper.620nbatocanin,
> FoxPro 2.0 isto ne skida chr(9) (tabulator). Ma taj clipan
> 5.01 mi se nikada nije svidjao... '87 je prava stvar, ko
> voli clipper...
Bre ljudi, što ste takvi! Na osnovu takve bezvezarije ocenjujete
nešto tako dobro kao što je Cl 5.0 - stvarno komunistički! Uostalom,
očigledno da je skidanje taba stavljeno namerno - više ima nego što
nema logike za to. A ako vam baš treba, napišite novi Trim.
Ne slažem se da je S'87 bio dobar: po meni nije loš, ali je daleko
od 5.0. Ako biste kritikovali Cl 5.0, morate korektno uzeti u obzir i
bar sledeće dobre osobine:
1) Pretprocesor u 5.0 je jedan od najmoćnijih koji sam video.
2) Izuzetan jezik - objekti, naročito kod blokovi, itd.
3) Odlično rešen sistem za interakciju - naročito TBrowse i Get.
4) Otvorena arhitektura - možete ga promeniti kako želite, počev od
jezika pa do sistema za pristup DBF datoteka. Uostalom, ovo verovatno
još samo C guta:
#define _ #define
_ _l ?
_ __ i
_ ___ TO
_ ____ 1
_ _____ 100
_ l__ :=
_ ll +
_ l_ FOR
l_ __ l__ ____ ___ _____
_ _l_ NEXT
_l [_____] ll [_____]
_l_
QUIT
Da samo napomenem, korišćenjem #translate direktiva može se napraviti
još veći rusvaj. Naravno, ne mislim da ovo ičemu služi. Al' je
interesantno, jel da?
clipper.621ndragan,
/ A šta si ti mislio da ispiše?
Pa, 260.000 :). Palo mi na um kad sam na disku našao one blesave C
listinge, pa da probam - kad ono, radi u foksu. žisto sam mislio da
neko vidi da li je isto i u kliperu. U dibejzu, naprimer, ne radi ni
prva linija.
Ovde sam umešao i nešto ličnog afiniteta - koliko traje da se stvar
proveri u foksu, a koliko u kliperu. Za foks tvrdim da može za manje od
20 sekundi, ko ume dovoljno brzo da kuca.
clipper.622toma,
■■>> nešto tako dobro kao što je Cl 5.0 - stvarno komunistički! Uostalom,
■■>> očigledno da je skidanje taba stavljeno namerno - više ima nego što
■■>> nema logike za to. A ako vam baš treba, napišite novi Trim.
Tako je !!!
Ja sam lepo napisao upozorenje jer sam ja 15 min. bio glavu zašto
program ne radi kako je radio i nista više.
Oni koji ne vole clipper neka ga ne vole al' neka ga ne blate !
Jel jasno ?
clipper.623ndragan,
/ očigledno da je skidanje taba stavljeno namerno - više ima nego što
/ nema logike za to. A ako vam baš treba, napišite novi Trim.
Što jes jes - tab spada u bele znake (white space) i treba ga
trimovati; ono što ovde nervira je što od verzije do verzije radi sad
ovako sad onako. Još ako nije dokumentovano, dođeš u situaciju da se
pitaš 'Bug or Feature' kad prebaciš stari program u novu verziju i
nađeš novu nekompatibilnost.
BTW, otkud mu tab u stringu koji treba trimovati? Tekst filteriška
pisana u kliperu?
clipper.624mackb,
Da li je neko pokusao da pise aplikacije u clipper-u,tako da se sve poruke
korisniku pisu na ruskom u ruskoj cirilici? Veoma sam zainteresovan da
diskutujem na tu temu.
clipper.625ppekovic,
>> Da li je neko pokusao da pise aplikacije u clipper-u,tako da se sve poruke
>> korisniku pisu na ruskom u ruskoj cirilici? Veoma sam zainteresovan da
>> diskutujem na tu temu.
Kod ovog problema najmanje je stvar u clipper-u, tj. vezano je
za clipper u toliko što clipper nemože (čitaj: formalno može ali
praktično teško) da radi u grafičkom modu pa da na taj način rešiš
definiciju yu slova.
Osnovni je problem kako deinisati ruska slova. Na VGA to nije
problem, ali šta ćeš sa hercules-om. Jedino možda da ugradiš u
EPROM rusku ćirilicu.
Sve u svemu, želim ti puno sreće i čvrstih živaca u ovome.
Paya
clipper.626ciki,
Imam jedan mali problem koji mi ide na zivce.
Skinuo sam sa nekog BBS-a CLIPINT.ZIP fajl, (za neo
bavestene poziv INT fun. iz clipper-a.) Pokusao sam
da compa. taj fajl ali jednostavno mi prijavi gresku
,tj. nekoliko njih i neradi!!!!
Pomagajte !
Ciki
clipper.627ppekovic,
>> Skinuo sam sa nekog BBS-a CLIPINT.ZIP fajl, (za neo
>> bavestene poziv INT fun. iz clipper-a.) Pokusao sam
>> da compa. taj fajl ali jednostavno mi prijavi gresku
>> ,tj. nekoliko njih i neradi!!!!
A šta ti konkretno ne radi? U arhivi postoje dva source-a, jedan ASM a
drugi PRG koji je samo demonstracija upotrebe INTERRUPT funkcije. Koji od njih
ne radi, tj. sa kojim verzijama assembler-a, tj. clipper-a si ih prevodio?
Paya
P.S. Taj neki BBS je možda i Sezam jer se clipint.zip arhiva nalazi u sezamovom
/IBMPC/PROGRAM dir-u.
clipper.628ciki,
Sezam nije.
Tacno , postoje 2 source programa, ali isto tako po-
stoje i 2 OBJ fajla koja sam pokusam da linkujem sa
TLINK 3.01 (Clipper Summer '87).
Inace imam MASM 6.0, ali nisam pokusao da kompa.
dobijene source kodove.
Konkretno prilikom linkovanja OBJ kodova prijavljuje
2 greske i to je 1 nesto uvezi STACK-a ili zahteva
za memorijom 64KB, a 2. gresku sam zaboravio.
Hvala ti na paznji, i ako imas vremena pokusaj da
mi malo objasnis kako bih to mogao da prevazidjem.
P.S. Ta biblioteka mi je potrebna za PASSWORD-e , jer
C ne znam PASCAL znam ali (veza Clipper-Pascal!)
Puno pozdrava od Cikija
clipper.629ppekovic,
>> Konkretno prilikom linkovanja OBJ kodova prijavljuje
>> 2 greske i to je 1 nesto uvezi STACK-a ili zahteva
>> za memorijom 64KB, a 2. gresku sam zaboravio.
Dok sam radio sa clipper-om '87 koristio sam tlink 1.1, sa tlink-om nemam
nikakvog iskustva osim 1.1 verzije. U vezi greške vezane za stack, pogledaj
/stack ili sličnu opciju tvog linkera i povećaj količinu memorije koju odvajaš
za stack. Odredi je širokopopularnom "šac" metodom. Za drugu grešku ne mogu
ništa da ti kažem jer si je zaboravio ;))). Najbolje bi bilo da nam otkucaš
kompletnu poruku za obe greške, kao i komandnu liniju kad linkuješ, tj. koje
parametre staviš pa da vidimo.
Paya
P.S. Predji na clipper 5.01. Uglavnom je komatibilan sa '87 verzijom ai je
zaista superioran u odnosu na nju.
clipper.630ciki,
Ovako greske koje se javljaju su:
Error: group DGROUP exceeds 64K
Error: InvalidŰN initial stack offset
Inace tek sam poceo sa´k 5.01,(hvala na preporuci),
Sto se linkera tice imam PL,RTL,TL,LINK, pa
ce 1 od njih proci!!!
Inace ocekuj skoro u tvom mail-u poduzu poruku
;))))))))) o cliper-u i radu sa mrezama, ako imas
iskustvo.
Hvala unapred. Ciki!
clipper.631gstojkovic,
Hitno mi je potreban pomoc oko jednog problema pa molim iskusne Clipperase
da mi pomognu. Naime moj problem se sastoji u tome da li postoji mogucnost
da posle naredbe SET FILTER koristim naredbe SEEK ili LOCATE za pronalazenje
drugog kljuca na osnovu predhodnih maskiranih zapisa pomocu SETT FILTER
uslova. KKKKKKKkomande. Znaci imam dva kljuca od kojih prvi izdvajam pomocu SET
FILTER komande a zatim trazim dugi kljuc u okviru izdvojenih.
Neznam koliko sam bio jasan ali problem me dugo muci i nevidim sam resenje.
Unapred zahvalan na pomoci.
S'postovanjem GStojkovic...
clipper.632ciki,
I sam sam imao slican problem,ne isti ali slican, pa
sam ga resio na ovaj nacin.Pre pozivanja tog dela pro
grama koristio sam COPY FILE i napravio kopiju baze
sa kojom sam radio,zatim selektovao i radio sa dve baze.
Na kraju jedno ERASE resava stvar.
Nije nista elegantno,ali vazno je da radi.
Gubis na brzini malo samo prilikom COPY FILE.
Zdravo!
clipper.633ciki,
NE COPY FILE vec COPY za zadat║i uslov.Pogledaj
literaturu
literaturu.
clipper.634ppekovic,
>> Ovako greske koje se javljaju su:
>> Error: group DGROUP exceeds 64K
>> Error: InvalidŰN initial stack offset
Pa ove greške pokazuju da ima nekih problema sa memorijskim modelima, ali
mi je to vrlo čudno jer clipper radi isključivo u large modelu i ne mogu da
verujem da je tip koji je pravio clipint pogrešio pa koristio small model.
Mislim da bi najbolje bilo da probaš sa rtlink-om, pa javi rezultate.
>> Inace ocekuj skoro u tvom mail-u poduzu poruku
>> ;))))))))) o cliper-u i radu sa mrezama, ako imas
>> iskustvo.
Nemoj u mail, ostavi pitanja ovde verovatno će zanimati još nekog.
Paya
clipper.635ppekovic,
>> da mi pomognu. Naime moj problem se sastoji u tome da li
>> postoji mogucnost da posle naredbe SET FILTER koristim
>> naredbe SEEK ili LOCATE za pronalazenje drugog kljuca
>> na osnovu predhodnih maski
Koliko se sećam, seek ignoriše filter ali ga zato locate poštuje. Neznam
samo koliko ti je važna brzina i kolika je baza, jer se može desiti da locate
bude spor, jer sekvencijalno čita sve slogove dok ne naidje na pravi. Takodje
neznam ni kakav je konkretan problem, ali ja sam set filter koristio sam kod
tbrowse-a i dbedit-a, a za ostala filtriranja i pretraživanja sam koristio seek
i pitanje, dakle nadjes sa seek slog po prvom ključu pa onda sa običnim if
ispitaš da i zadovoljava i drugi.
Paya
clipper.636bulaja,
│da li postoji mogucnost da posle naredbe SET FILTER koristim naredbe
│SEEK ili LOCATE za pronalazenje drugog kljuca na osnovu predhodnih
│maskiranih zapisa pomocu SET FILTER uslova.
└───
I SEEK i LOCATE rade Ok, upravo sam proverio.
Ali svejedno, ako hoces da radis npr. FILTER + SEEK, ipak je mnogo bolje
(brze) da uopste ne postavljas filter vec da radis prvo SEEK pa onda
ispituj uslov na pronadjenom slogu (ili vise njih). Evo primera kako to
da uradis ako vec imas aktivan filter:
// ---------------- //
cF := dbfilter() // pokupi uslov filtera
set filter to // iskljuci fltr
seek xx // xx je kljuc koji se trazi u indexu
if found()
if &cF
// pronadjen prvi slog po seek+if uslovu
// pa ovde ubaci sta treba da se radi sa slogom, npr. prikaz
endif
do while .T.
skip
if ! ( xx == &indexkey(0))
// da li slogovi i dalje zadovoljavaju seek uslov?
exit
endif
if ! &cF
// ostali slogovi po seek+if
// i sta vec treba da se radi sa njima
endif
enddo
else
// nema slogova koji zadovoljavaju
endif
set filter to &cF // ponovo aktiviraj filter
go top
// ---------------- //
Bulaja
clipper.637d.petrovic,
Ne mogu da smestim NANFOR.LIB u PLL biblioteku zbog zakrpa, pa mi treba
LIB.EXE, slican program koji za isto to sluzi ili savet kako to da uradim.
clipper.638nbatocanin,
Znam čoveka koji je pisao program za automatsku konverziju Clipper
programa YU -> RUSKI. Poslaću ti njegov telefon mailom.
clipper.639neman,
Hi
Novi sam korisnik Sezama i čitanjem SVIH prethodnih poruka nisam primetio
rešenje svog problema !
Problem se manifestuje na sledeći način:
Clipper aplikacija je imala problem u pristupu jednom slogu u bazi.
Analizom datoteke kolega i ja utvrdili smo da se u slogu
na mestu gde se nalazi znak * ili blanko koji označava da li
je slog brisan ili nije našao se znak 1Ah - kraj datoteke. Pošto je
kod zvezdice 2Ah mislio sam da je došlo do pomeranja jedinice u binarnom
zapisu. Kada se to desilo u roku od par dana kod više korisnika, a kod
jednog i više puta prestao sam da optužujem Marfija. Problem se javio kako
na Novell Netware 2.15 , tako i na običnom PC-ju pod MS DOS 4.01.
SCAN 93 nije otkrio ništa.
Interesantno je da DBASE i CLIPPER 87 i 5.01 ne tretiraju podjednako
pojavu ovog znaka na pogrešnom mestu.
Pri sekvencijalnom prolasku kroz bazu u DBASE ( BROWSE ili SKIP nnn)
kaže da je naišao na kraj datoteke (EOF() == .T.). Npr. stigao sam
do 545 sloga i ni makac dalje. Kada kažem GOTO 547 pozicioniranje bude
uspešno i mogu da nastavim da se krećem po datoteci. Naravno, slog
546 je zabrljan na napred naveden način.
Sa druge strane, CLIPPER ne obraća pažnju na pogrešan znak na mestu
oznake brisanja. DBU sasvim normalno radi BROWSE stim što se za slog
546 javlja oznaka <deleted>. Međutim, izgleda da ima problema pri drugim
operacijama - nisam vršio neka druga testiranja.
Očigledno je da DBASE i CLIPPER različito sadržaj utvrđuju da li
je slog brisan ili nije, a i da sam Clipper različitu tretira
ovu situaciju.
Nisam probao da li ima problema sa pojavom drugih znakova na tom mestu.
Jednostavan način za utvrđivanje postojanja ovog problema je da u
DBASE pustite program:
USE baza
SKIP RECCOUNT()+5
SKIP -1
IF ,NOT. (RECNO() = RECCOUNT())
? " Problem "
ENDIF
Moram da pomenem da na ovo nisam naišao do sada.
Problem sam otklonio upotrebom DISKEDIT-a.
Eventualno bi mogao da bude i neki programčić za filtriranje baze,
ali ovo treba SPREžITI a ne LEžITI. Pomozite !
NeMan
clipper.640paris,
Moli se korisnik Graficke biblioteke za CLIPPER koji je uspesno koristi da se
javi radi detaljnijeg opisa cina prevodjenja koji me se cini neostvarivim.
Probao sam sve varijante i ni jedna ne funkcionise.
POzdrav PARIS
clipper.641asrdjan,
Imam jedan problem sa bazama podataka u clipperu.Naime pre izvesnog vremena sam
napisao program u kojem se prvi put pojavila greska o kojoj govorim.Dakle,
program je trebao da upita operatera za sifru odredjenog clana u bazi i da na
osnovu toga pronadje i otvori slog za tog clana ili da javi poruku da clan sa
tom sifrom ne postoji u bazi.Ova procedura se ponavljala na dva mesta u
programu i to u unosu podataka i u pregledu podataka(normalno uz neke izmene).
E sad,sve do trenutka kada je trebalo da program javi,da li odredjeni clan
postoji ili ne u bazi,je bilo u redu,medjutim pri pretragi je program uvek
javljao da odredjeni clan NE postoji u bazi i to cak i onda kada bi prethodno
clan bio upisan(istom procedurom) u bazu podataka.Nakon nekih izmena izgledalo
je da je program konacno poceo normalno da radi,ali onda se ispostavilo da
program i dalje za prvog unetog clana javlja poruku da ne postoji u bazi,kao da
nije unet.Dakle ukoliko neko zna u cemu je stvar neka mi ostavi resenje bilo na
MAIL SEND Asrdjan bilo u ovoj konferenciji.I jos da napomenem da sam nortonom
pregledao datoteke koje bi program formirao i u njima je naravno bio upisan
prvi
clan.Uz ovu poruku je prikacena i datoteka APP.ZIP koja sadrzi deo listinga
aplikacije kod kojeg je zapelo zajedno sa startnim modulom.Naravno da od opcija
u meniju radi samo prva posto je kod nje i zapelo.Ostatak programa nisam poslao
jer nije ni potreban.Program je radjen u verziji Summer '87 i za njegovo
prevodjenje i startovanje potrebne su jos i sledece datoteke:
CLIPPER.EXE
CLIPPER.LIB
EXTEND.LIB
TLINK.EXE
Prilikom prevodjenja dovoljno je startovati datoteku STARTUJ.BAT i sve ce teci
automatski.Resenje kao i komentare i sugestije posaljite na,kao sto sam vec
rekao,MAIL SEND Asrdjan ili kao poruku u ovoj konferenciji.
Pozdrav
Asrdjan
P.S. Izvinite zbog malih neurednosti u programu posto je sve radjeno na brzinu.
P.P.S. Evo malog uputstva kako i gde se javlja greska.Dakle posto sve uradite
kako treba i startujete program izaberite opciju 'Stalni podaci'.Zatim
izaberite opciju 'Unos stalnih podataka' pa unesite podatke o 2-3 clana.Onda
izadjite pa idite u opciju 'Pregled stalnih podataka' i tu trazite korisnika
sa sifrom 1.Ako ga program nadje,idite u 'Unos stalnih podataka' pa unesite
podatke za jos jednog korisnika.Sad ponovite 'Pregled stalnih podataka' pa
zatim upisite za sifru 1 i program ce javiti da trazeni korisnik ne postoji u
bazi.
app.zipclipper.642ciki,
Ovako kod mene tvoj prg radi sve Ok ako posle READ u fajlu
Pod_ekr1 stavim Append blank a ne gde je bio.
A sada evo ti nekoliko dobronamernih saveta:
1. Predji na clipper 5.01 (Pozdrav d.petrovicu)
2. Gde ti je ispravka podataka
3. SKLONI TAJ DOSADNI SAT!!!!!!!!!
4. Pri unosu podataka nemoj zaboraviti da uneses sifru :))
5. Nabavi neku II knjigu nego Programiranje u Clipper-u od Popovica
P.S. Datoteke pregledaj sa DBU
clipper.643nbatocanin,
Ako vam zatreba da tekst iz nekog tekst-procesora ubacite u DBF
datoteku kao memo polje, snimite tekst u "Generic" formatu: tada
ostaju samo tabovi i oznake za novi red, a takav format upravo
koristi i Clipper. U WP-u je to <Ctrl-F5><Save as><Generic>.
clipper.644neman,
Tvoj problem je rešen.
Sledeći put *nemoj* da direktno prebacuješ programske datoteke.
Modifikovanu aplikaciju ti šaljem uz ovu poruku.
Pitanje za Sve:
Šta je bilo sa mojim problemom :( ?
P.S. Da li postoji grupa za CLIPPER ?
IF grupa
_make_me_:))( :( )
END IF
Pozdrav, NeMan
app_isp.zipclipper.645dejanr,
>> P.S. Da li postoji grupa za CLIPPER ?
Šta će grupa kad ima temu u konferenciji?
clipper.646andrejl,
>│ Oni koji ne vole clipper neka ga ne vole al' neka ga ne
>│ blate !
>│
>│ Jel jasno ?
Nemo' da mi neko dira Clipper ! ;)
bye, andrejl
clipper.647neman,
>>> P.S. Da li postoji grupa za CLIPPER ?
>
> Šta će grupa kad ima temu u konferenciji?
žitajući poruke iz EXTRA:SF stekao sam utisak da grupa SF postoji.
Ko pita ...
clipper.648ciki,
Evo primera za lep Crsr Prilikom unosa Get-a.
Moze li neko krace (mlogo mi je vazno)
#include"SetCurs.ch"
Set key 22 to ja
Mi:=space(10)
cls
č 1,1 get mi
read
quit
procedure ja
if setcursor()=SC_INSERT
setcursor(SC_NORMAL)
ReadInsert(.f.)
else
setcursor(SC_INSERT)
Readinsert(.t.)
endif
P.S. Vrlo mi je vaznoako moze krace ;) Ciki!!
clipper.649d.petrovic,
>Moze li neko krace (mlogo mi je vazno)...
Probaj da sve stavis u jedan red? :)))))))))))
Hi!
clipper.650ilazarevic,
█ žitajući poruke iz EXTRA:SF stekao sam utisak da grupa SF postoji.
█ Ko pita ...
Postoje dve sf grupe. Razlog njihovog postojanja je to što u vreme
osnivanja nije postojala tema, a posle nas je mrzelo da ih ukidamo...
clipper.651ciki,
Opet ja!
Sada sa jednim problemom.
Ocu da mi prg. koji vam saljem lepo pozove I meni,
pa tek onda kada pozovem opciju za stampanje podataka da mi
izda obavestenje o tome da li je stampac prikljucen ili ne!
P.S. Napominjem da je lepo radilo dok nisam ubacio
#include"Print.prg"
Saljem vam listinge.Onaj ko mi pomogne ima pice cim ga vidim.
VRLO JE HITNOOOOOOOO!!!
Ciki
zasto.arjclipper.652mandrejevic,
set key K_INS to Tog_Ins
/////////////
// Tog_ins //
/////////////
function Tog_ins()
if SetCursor() != 0
ReadInsert(.not. ReadInsert())
SetCursor(Iif(ReadInsert(), 2, 1))
end
return nil
clipper.653d.petrovic,
#include je pretprocesorska direktiva, sto znaci da je print.prg ubacen u
tvoj program da se izvrsi pre menija.
Inace, sa #include se pozivaju heder fajlovi, a ne *.prg, tako da ni taj
red programa nema mnogo smisla.
Ako pogledas bilo koji *.ch fajl videces da se uglavnom sastoji od
definicija, sa samim programom nemaju bas puno veze.
1.PRINT.PRG posebno prevedi i smesti u svoj fajl funkcija (npr.
FUNKCIJE.OBJ)
2.Kasnije to zajedno linkuj i...
Ako ne mozes da se brzo priviknes na clipper 5.01, znaj da je gomilu
naredbi pokupio iz C-a. npr. naredba
strana++ je zaista efikasnija od
strana:=strana+1
jer kompajleru saopstava da na promenljivu treba primeniti masinsku naredbu
INC, a ne sabirati ga sa konstantom (sta je brze :))) )
P.S. Prelistaj malo to sto imas u clipper-ovim direktorijumima, obrati
paznju na *.rmk, korisni su i jednostavni.
Aaaaaaaj zdra'o !
clipper.654dpaun,
Tri molbice za Clipper braću:
1. Bavi(o) li se neko Sycerom? Kakva su iskustva?
2. Osoba iz prethodnog stava nek mi pošlje na mail kompletan spisak
fajlova koje sadrži ovaj paket.
3. Imam "Moj mikro" u kome je kratak prikaz rada sa Sycer-om, ali mi se
čini da je nešto bilo i u "Računarima". Pamti li neko koji je to bio
broj?
Zahvalan++,
dPaun
clipper.655ndragan,
/ Nemo' da mi neko dira Clipper ! ;)
Dođi malo da vidiš šta radi fokspro. Za plakanje preporučujem levo rame.
clipper.656vitez.koja,
#=> Dođi malo da vidiš šta radi fokspro. Za plakanje
#=> preporučujem levo rame.
clipper.657ciki,
Ovako.
Prvo da ti se zahvalim sto si pogledao moj "problem".
Resio sam ga i sam na slican nacin odmah po slanju onog zahteva
za pomoc.
Inace sto se tice #incl. direktive mislim da gresis iz 2 nepobitna
razloga.
1. U ovo conf sam negde procitao da iskusni clipper programer
savetuje da se koristi #inc umesto Do pa i sa prg. fajlovima.
2. Zaviri u bilo koju knjigu (BIBLIJA za CLIPPER 5.0 recimo,..)
pa ces videti da #inc.sa prg nije neko cudo!
P.S. Ipak hvala ti.
P.P.S. Zahvaljujem se mandrejevic-u za fun(stvarno moze krace,
ali nisam na to mislio).
Pozdrav!
clipper.658jtitov,
>> / Nemo' da mi neko dira Clipper ! ;)
>
> Dodi malo da vidis sta radi fokspro. Za plakanje
> preporucujem levo rame.
Bas tako. Clipper je smoke of pussy za foxpro.
clipper.659asrdjan,
Hvala svima na odgovorima.
clipper.660bulaja,
│1. U ovo conf sam negde procitao da iskusni clipper programer
│ savetuje da se koristi #inc umesto Do pa i sa prg. fajlovima.
└───
Pa sad, zavisi sta je u .prg, ali u principu (tj. vecini slucajeva)
#include ne treba tako koristiti. Ako u tim .prg imas neke odvojene
procedure ili funkcije (kao sto je slucaj sa tvojim print.prg), uvek je
mnogo bolje prevoditi ih odvojeno i posle ulinkovati. DO nemas uopste
potrebe da koristis, vec ili pravi .bat file za kompajliranje svih
modula, ili (sto je najbolje) koristi make.
clipper.661nbatocanin,
Kad već cepidlačimo:
FUNC Tog_Ins
RETURN IIF (SetCursor() != 0, ;
SetCursor(IIF(ReadInsert(!ReadInsert()), 2, 1)), )
clipper.662ciki,
Vako.
Ako si procitao moj odgovor d.petroviv-u,mogao si zakljuciti
da sam na taj nacin i resio problem praveci BAT fajl(ali ipak
nije to to.)
Sto se tice onoga #inc sa prg, zamolio bih te da mi kazes kada se
ova kombinacija koristi!
Pozdrav Ciki!
clipper.663ciki,
Dobro de nemoj se zestiti.
Ciki!
clipper.664bulaja,
│resio problem praveci BAT fajl (ali ipak nije to to.)
└───
Ali tako se i dalje svaki put kompajliraju svi moduli. MAKE it! :)
│Sto se tice onoga #inc sa prg, zamolio bih te da mi kazes kada se
│ova kombinacija koristi!
└───
Ja je ne koristim nikad :).
clipper.665kanda,
>> Kad već cepidlačimo:
>>
>>
>> FUNC Tog_Ins
>> RETURN IIF (SetCursor() != 0, ;
>> SetCursor(IIF(ReadInsert(!ReadInsert()), 2, 1)), )
>>
>>
Pa kad vec cepidlacimo... :)
SetKey(K_INS, {|| SetCursor(If(ReadInsert(!ReadInsert()),1,2))})
c := Space(8)
@ 2,2 GET c
READ
clipper.666kanda,
>> Sto se tice onoga #inc sa prg, zamolio bih te da mi kazes kada se
>> ova kombinacija koristi!
Koristi se kad hoces da vise od vise .PRG dobijes jedan .OBJ.
U istu svrhu moze da posluzi i .CLP datoteka - u nju upises imena
.PRG datoteka, onda kazes CLIPPER @ime.CLP, i dobijes JEDNU
datoteku ime.OBJ.
clipper.667yowo,
Pomagajte !!!
Kako se ubrzava linkovanje preko .pll i preko .plt fajlova ???
Nesto kod mene ne ide pa ne ide...
yowo
clipper.668dvokshi,
Koristio sam biblioteku oClip.lib iz Sezama da bih deklarisao nove
klase u Clipperu. Sve je išlo dobro sa novim klasama, kao i sa
klasama koje su nasleđivale neku od novih klasa.
Ali kad sam pokušao da deklarišem novu klasu kao naslednik TBrowse
klase, počeli su problemi. Naime nova klasa ne nasleđuje ama baš
ništa od svog roditelja. Probao sam na dva načina :
CLASS MyBrowse FROM TBrowseNew
CLASS MyBrowse FROM TBrowseDB
... ali ni u jednom slučaju nisam postigao rezultat.
Kad pokušam da u programu koristim neku promenljivu ili metod klase
TBrowse uvek dobijam grešku :
No exported method / variable
Help !!!
Unapred zahvalan.
clipper.669ciki,
Lepo je to u praksi ali u zbilji druga prica!!!
Ipak hvala ti za K_INS.
Pozdrav Ciki
clipper.670ciki,
Pa make je strasna stvar za relativno duze aplikacije,
ali moju aplikaciju pravim iz nekoliko fajlova koje
u toku testiranja programa prevodim svaku ponaosob,
tako da mi je dir pun nekih PRAVIX.BAT (X=1,n) programa.
Pozdrav Ciki!
clipper.671jsalai,
> Oni koji ne vole clipper neka ga ne vole al' neka ga ne
> blate !
Ovo treba uvesti na SVIM NIVOIMA!!!!
Mozda ni rata ne bi bilo.......
clipper.673d.petrovic,
>Pomagajte !!!
>Kako se ubrzava linkovanje preko .pll i preko .plt fajlova ???
>Nesto kod mene ne ide pa ne ide...
Ajde?
Imao sam slican problem (nikako nije htelo da proradi) pa sam na kraju
napravio na jedvite jade jednu biblioteku. Ovo moje malecko iskustvo kaze:
1. Moras imati bar jedan FI pri pravljenju biblioteke (ne mozes samo gotove
biblioteke strpati u jednu)!
2. Ako koristis nanfor biblioteku i neku od predefinisanih funkcija ne smes je
strpati u *.PLL jer kasnije predefinisane funkcije nece raditi korektno (zbog
ovog sam vec trazio ovde da mi neko nabavi LIB.EXE ali nigde dobre duse :)) )!
3. Dodaj odmah u biblioteku i CLD.LIB (cik pogodi zasto? :))) )!
Da bi ti sve bilo malo jasnije evo ti jedan moj (trenutno u upotrebi) rmk
pa ga malkice analiziraj, izmeni i iskoristi!
Ljudi ja jos uvek ne nadjoh neki program za biblioteke :((((((((((
Hi!
-----------------------------------------------------------
//
// Dex.rmk
// Make file za evkn program
//
// Copyright (c) 1992 Petrovic D. All rights reserved.
//
.prg.obj:
CLIPPER $* /b
EVKN.OBJ : EVKN.PRG
FUNKCIJE.OBJ: FUNKCIJE.PRG
MENU.OBJ: MENU.PRG KONTIRAJ.PRG
PROCEDUR.OBJ: PROCEDUR.PRG
IZVESTAJ.OBJ: IZVESTAJ.PRG
BIBLDEX.PLL : FUNKCIJE.OBJ PROCEDUR.OBJ MENU.OBJ
RTLINK/PRELINK OUT BIBLDEX FI MENU,FUNKCIJE,PROCEDUR LIB CLIPPER,EXTEND,CLD
EVKN.EXE : EVKN.OBJ IZVESTAJ.OBJ DEX.RMK BIBLDEX.PLL
RTLINK/PLL:BIBLDEX FI EVKN,IZVESTAJ,FLOPTST,ORIGIN LIB NANFOR
clipper.674bdm.,
## Kako se ubrzava linkovanje preko .pll i preko .plt fajlova ???
## Nesto kod mene ne ide pa ne ide...
Ni kod mene Kad hocu biblioteke da prepovezem javlja neke zezalice
sa definicijama simbola. Zna li ko resenje? Linkovanje mi traje 40 sekundi
a tlink nece da radi kod mene... :(
BDM.
clipper.675ppekovic,
>> 2. Ako koristis nanfor biblioteku i neku od predefinisanih
>> funkcija ne smes je strpati u *.PLL jer kasnije predefinisane
>> funkcije nece raditi korektno (zbog ovog sam vec trazio
>> ovde da mi neko nabavi LIB.EXE ali nigde dobre duse
>> :)) )!
Ja zaista nisam čuo ni za jedan LIB manager koji je PD ili SW. Ako je neko
čuo, ili još bolje ako ima PD/SW LIB manager bilo bi lepo da podeli
informaciju/program sa ostalima.
Paya
clipper.676ppekovic,
>> a tlink nece da radi kod mene... :(
Sa '87 verzijom su radili tlink 1.0 i 1.1 kao i 3.0 koliko se sećam. Za
verziju 5.1 se nije našao bolji (pouzdaniji) linker od rtlink-a (?).
Paya
clipper.678dpaun,
Molim za rešenje u Clp5.01 sledećeg problema:
čelim da "pozovem" na ažuriranje grupu izabranih slogova, čiji brojevi
nisu sukcesivni. Ja sam to zasad rešio ovako:
// (1)
BrSlog = 0
č x,y SAY "Broj slogova za izmenu: " GET BrSlog
READ
// (2)
DECL SlogŠ BrSlog Ć
// (3)
FOR j = 1 TO BrSlog
č ROW()+1,y ... GET Broj
READ
SlogŠ j Ć = Broj
NEXT
// (4)
USE Baza
FOR j = 1 TO BrSlog
GOTO SlogŠ j Ć
//
NEXT
*
Smeta mi korak (3) zbog toga što ne mogu da ispravljam greške koje
uočim posle pritiska na ENTER. Kako se (ceo) ovaj problem može drukčije
rešiti? Unapred hvala za svaku ideju.
dPaun
clipper.679ciki,
Pa vidis kod mene Tlink 3.01 radi bez problema.
Proveri da li si naveo sve biblioteke, i tacan put do njih.
Ako ti treba posluacu ti moj BAT-ch fajl za Tlink.
Pozdrav Ciki!
clipper.680bdm.,
## Proveri da li si naveo sve biblioteke, i tacan put do njih.
## Ako ti treba posluacu ti moj BAT-ch fajl za Tlink.
Moze. Stos je sto kod stomic-a (a imamo sve isto) radi tlink 4.0 a kod
mene nece pa se zezam sa rtlink-om a trenutno pisem kratke toolbox-ove pa
me tih 35s ubijaju.
BDM.
clipper.681ciki,
Vidis ovako.
Tlink nece da radi ako si pored clipper-ovih lib. dodao jos neku(
nanfor lib npr.),jer prijavljuje neku greskicu (memorija?).
Inace moj batch ide nekako vako
Clipper %1 /a/m/n
Tlink %1,,,..ĐlibĐclipper+..ĐlibĐextend,...
P.S.
Moje programe radim recimo u diru Iks , tree daje
-- IKS
-- LIB
-- OBJ
..., pa da ne bih pisao ono d:ĐclipperĐlibĐclipper+... ja stavim
..Đlib.
Srecno ;)) Ciki!
clipper.682kanda,
>> Smeta mi korak (3) zbog toga što ne mogu da ispravljam greške koje
>> uočim posle pritiska na ENTER. Kako se (ceo) ovaj problem može
>> drukčije rešiti? Unapred hvala za svaku ideju.
Probaj ovo - 'skrolujucci getovi'. Stvar je PD, sors je bogato
komentarisan i valjda ces se snaci.
clipper.683stomic,
$ ..., pa da ne bih pisao ono d:ĐclipperĐlibĐclipper+... ja
$ stavim ..Đlib.
Mogao bih i da koristiš /Lpath, tako da samo jednom navedeš
put, posle samo stavljaš imean LIBova.
ST.
clipper.684mandrejevic,
Imam jedno trivailno pitanje jer nemam NG za Clipper 5.01
- Koja je sintaksa za @ red, kol GET var SEND ******* ?
- Koja je sintaksa (parametri) funkcije ALERT(******) ?
- Koja je sintaksa komande USE .dbf VIA ****** ?
Unapred hvala dobroj dusi!
clipper.685dpaun,
>>>> Smeta mi korak (3)
>>
>> Probaj ovo - 'skrolujucci getovi'. Stvar je PD, sors je bogato
>> komentarisan i valjda ces se snaci.
Materijal je prekomplikovan za moj stil programiranja "na uvce", ali
mi je dao ideju kako mogu da rešim problem. Osnovno je: kako da "ni
iz čega" kreiram onoliko varijabli koliko mi je potrebno na osnovu
dodeljene vrednosti promenljivoj BrSlog. Kad sam malo pažljivije
razmotrio taj deo aplikacije, shvatio sam da BrSlog iz praktičnih
razloga ne treba da bude prekomerno veliki, bolje reći neodređeno
veliki, pa sam ga ograničio na 30! Posle te odluke, sve je leglo na
svoje mesto:
LOCAL Broj1:=Broj2:=Broj3:= .... Broj30:=0
// (1)
BrSlog = 0
č x,y SAY "Broj slogova za izmenu (najviše 30): " GET BrSlog ;
VALID BrSlog < 31
READ
// (3)
FOR j = 1 TO BrSlog
Broj := "Broj"+ALLTRIM(STR(j))
č ROW()+1,y ... GET &Broj
NEXT j
READ
PS. I u primeru koji si priložio, problem broja varijabli je rešen na
isti način: kreirano ih je 19, dakle ograničen broj.
Hvala na pomoći.
dPaun
clipper.686bulaja,
│- Koja je sintaksa za @ red, kol GET var SEND ******* ?
└───
SEND? Nema toga ...
│- Koja je sintaksa (parametri) funkcije ALERT(******) ?
└───
ALERT() - Display a simple modal dialog box
Syntax - ALERT( <cMessage> [, <aOptions] ) --> <nChoice>
Arguments - <cMessage> defines a message shown centered in the alert box.
If the message contains one or more semicolons, the text after the
semicolons is centered on succeeding lines in the dialog box.
<aOptions> defines a list of possible responses to the dialog box.
Returns - ALERT() returns a numeric value indicating which option was
chosen. If the Esc key is pressed, the value returned is zero.
Description - The ALERT() function creates a simple modal dialog. It is
useful in error handlers and other "pause" functions. The user can
respond chosen by moving a highlight bar and pressing the Return or
Space keys, or by pressing the key corresponding to the first letter of
the option. If <aOptions> is not supplied, a single "Ok" option is
presented.
ALERT() is sensitive to the presence or absence of the Clipper
full-screen I/O system. If the full-screen system is not present,
ALERT() uses standard I/O to display the message and options tty-style.
│- Koja je sintaksa komande USE .dbf VIA ****** ?
└───
VIA <cDriver> defines the replaceable database driver (RDD) to use to process
the current work area. <cDriver> is name of the RDD specified as a character
expression. If <cDriver> is specified as a literal value, it must be
enclosed in quotes.
If the VIA clause is not specified, the DBFNTX driver is used by default.
Note that if the specified driver is not linked, an unrecoverable error
occurs.
In no arguments are specified, the database file open in the current work
area is closed.
clipper.687mandrejevic,
>││ - Koja je sintaksa za @ red, kol GET var SEND ******* ?
>│└───
>│ SEND? Nema toga ...
Kako nema; u STD.CH :
***
* @..GET
*
#command @ <row>, <col> GET <var> ;
[PICTURE <pic>] ;
[VALID <valid>] ;
[WHEN <when>] ;
[SEND <msg>] ;
;
=> SetPos( <row>, <col> ) ;
; AAdd( ;
GetList, ;
_GET_( <var>, <(var)>, <pic>, <{valid}>, <{when}> ) ;
) ;
[; ATail(GetList):<msg>]
Inace mnogo ti hvala!
clipper.688bulaja,
││ SEND? Nema toga ...
│└───
│Kako nema; u STD.CH :
│***
│* @..GET
│*
│#command @ <row>, <col> GET <var>
│ [PICTURE <pic>]
│ [VALID <valid>]
│ [WHEN <when>]
│ [SEND <msg>]
└───
Svasta :), u NG se @ .. GET .. SEND nigde ne spominje, a ne spominje se
ni u originalnoj dokumentaciji (doduse, ona je za verziju 5.0)! Evo sta
pise u NG za @..GET:
@ <nRow>, <nCol>
[SAY <exp>
[PICTURE <cSayPicture>]
[COLOR <cColorString>]]
GET <idVar>
[PICTURE <cGetPicture>]
[COLOR <cColorString>]
[WHEN <lPreCondition>]
[RANGE* <dnLower>, <dnUpper>] | [VALID <lPostCondition>]
clipper.689toma,
■■>> LOCAL Broj1:=Broj2:=Broj3:= .... Broj30:=0
max_broj=30
for n=1 to 30
a="broj"+alltrim(str(n))
&a.=0
next n
Tek da se zna...
─Ď─Í─ĚÍ┬ĚÍ─Ě
đ Ë─ŻË ŻË~Ż
clipper.690ciki,
Hvala na obaveštenju.Moraću da probam.
Pozdrav Ciki!
clipper.691ciki,
Ho!
Imam par pitanjca.
1. Ako promenljivu ne deklarisem kao local,private,.. vec je odmah
incializujem npr:
...
local nBb:=1
vv:=2
...
kako je clipper deklarisao vv.
2. Zasto ovo nece da radi:
COPY TO Baza1 FOR (alltrim(konto)==sifra)
Dok ovo radi:
IF alltrim(konto)==sifra.
P.S. Ispred COPY i IF ide nesto kao sifra:=alltrim(sifra)
Zasad toliko. Unapred hvala.
Pozdrav Ciki!
clipper.692dpaun,
>> Tek da se zna...
Nisam razumeo, al nema veze. Dok sam lupao glavu oko toga "šta je pisac
hteo da kaže", sinula mi je ideja, te rešenje mog problema sada glasi:
t = reccount()
č .. get brz
read
..
decl brsŠbrzĆ
for j=1 to brz
brsŠjĆ=0
next
for j=1 to brz
č .. get brsŠjĆ //ovde bilo: valid (brsŠjĆ<t), ali to niće!
next
read
dPaun
clipper.693dpaun,
1. Jedan prijatelj se žali da mu Clp ne prevodi prg veći od 64 k? Da li je
to moguće? Odnosno, da li ima ograničenje veličine prg?
2. U vezi grafike u Clp: može li se, u toku uobičajenog tekst moda,
kreirati jedno prozorče pa tamo nešto izgrafikovati? A!
3. Da li je rad sa mišom u Clp programerski komplikovana rabota, i šta je
od alatki potrebno.
Hvala.
dPaun
clipper.694mandrejevic,
>│ Svasta :), u NG se @ .. GET .. SEND nigde ne spominje, a
>│ ne spominje se
Malo da se pojasnimo: Iz STD.CH sam zakljucio da to treba da
salje neku poruku i negde, tj. da vise nisu potrebne neke
kerefeke sa VALID NekaFunkcija() koja ce izmedju ostalog i da
posalje poruku ; pa sam probao:
set message to 24 center
...
@ 10, 10 say "Get1 : " get var1 color "w+/n"
@ 12, 10 say "Get2 : " get var2 send "Poruka"
^^^^^^^^^^^^^
sto pravi Error C2001 Syntax error : 'Poruka' i kod komajlera i
kod predprocesora; medjutim predprocesor ipak nesto uradi:
DevPos( 10, 10 ) ; DevOut( "Get1 : " ) ; SetPos( Row(), Col()+1 )
; AAdd( GetList, _GET_( var1, "var1",,, ) ) ;
ATail(GetList):colorDisp("w+/n")
DevPos( 12, 10 ) ; DevOut( "Get2 : " ) ; SetPos( Row(), Col()+1 )
; AAdd( GetList, _GET_( var2, "var2",,, ) );
ATail(GetList):"Poruka"
^^^^^^^^^^^^^^^^^^^^^^
i na osnovu neke analogije ja postavim u surs.prg:
DevPos( 10, 10 ) ; DevOut( "Get1 : " ) ; SetPos( Row(), Col()+1 )
; AAdd( GetList, _GET_( var1, "var1",,, ) ) ;
ATail(GetList):colorDisp("w+/n")
DevPos( 12, 10 ) ; DevOut( "Get2 : " ) ; SetPos( Row(), Col()+1 )
; AAdd( GetList, _GET_( var2, "var2",,, ) );
ATail(GetList):msg("Poruka")
^^^^^^^^^^^^^
sto se prevede bez problema ali zato ceka rantajm greska:
Error BASE/1004 No exported method : msg.
Cak sam probao i message, getmsg i slicno ali ne vredi, uvek javi
istu gresku. Pretpostavka je da mozda idu i parametri za red i
kolonu (tj. da ne vazi ono set message to 24 center) ali vise
nisam imao zivaca.
Pomagajte drugoviiii...
clipper.695vili,
> ATail(GetList):msg("Poruka")
> žžžžžžžžžžžžž
> sto se prevede bez problema ali zato ceka rantajm greska:
> Error BASE/1004 No exported method : msg.
Samo neki od "exportnih metoda" (exported methods) za GET objekt
moze da se stavi iza SEND. Funkcija msg() to nije.
PS. Exported methods for GET Class are:
assign() end() backspace()
colordisp() home() delleft(0
display() left() delright()
killfocus() right() delwordleft()
reset() todecpos() delwordright()
setfocus() wordleft()
undo() wordright()
updatebuffer() insert()
varget() overstrike()
varput()
Vili
clipper.696mandrejevic,
>│ Samo neki od "exportnih metoda" (exported methods) za GET
>│ objekt moze da se stavi iza SEND. Funkcija msg() to nije.
Ne tvrdim ni ja da jeste, samo imam neki osecaj da postoji neki
metod koji nije dokumentovan, jer sto bi ga u STD.CH inace
stavili ? Ovo je kod verzije 5.00 bila uobicajena pojava.
I kao jos jedna potvrda da ovde ipak nesto smrdi je da kada se
CLIPPER.LIB rasclani sa LIB dobija se izmedju ostalog :
_GETMSG Offset: 0003b990H Code and data size: 80eH
GETNEW __GETBADDA __GETBLOCK __GETBUFFE
__GETCARGO __GETCLASS __GETDWLEF __GETEXITS
__GETHASFO __GETNAME __GETORIGI __GETPICTU
__GETPOSTB __GETPREBL __GETREADE __GETSETBL
__GETSETBU __GETSETCA __GETSETEX __GETSETNA
__GETSETPB __GETSETPI __GETSETPR __GETSETRE
__GETSUBX __GETTODEC __GETUNDO
clipper.697nbatocanin,
> No exported method / variable
Eh, štos je u tome što novodefinisani objekti nisu definisani na isti
način kao ugrađeni. Bolje sačekaj novu verziju Clipper-a.
clipper.698nbatocanin,
> Dobro de nemoj se zestiti.
Ja? :)
clipper.699nbatocanin,
Ako korisniku ne znači mnogo redni broj sloga, mogao bi da mu omogućiš
interaktivni izbor slogova sa TBrowse: korisnik prvo selektuje
slogove, a zatim se vrši obrada.
clipper.700nbatocanin,
Sad baš nešto gledah GETSYS i videh da se sa SET KEY na INS radi
posao koji GET sistem automatski radi. Kada se definiše INS kao
f-taster, ta automatska funkcija ne radi! žini mi se da je najbolje
njega promeniti pošto je ovu promenu potrebno trajno zapamtiti. Treba
izmeniti proceduru ShowScoreboard. Pre RETURN-a treba staviti:
SetCursor (IIF (Set(_SET_INSERT), 2, 1))
i problem je rešen!
clipper.701ciki,
>> Da li je rad sa mišom u Clp programerski komplikovana rabota, i
>> šta je od alatki potrebno.
Uzmi Nflib sa sezama. Rad sa misom moze i iz Graficke biblioteke
CLIP_GR.ZIP isto sa sezama :).
Sam rad nije tezak, ali najvecu komotnost pruza Flipper 5.0,
pozdrav snowwhite-u.
Pozdrav Ciki!
clipper.702d.petrovic,
Bilo bi lepo da mi neko zakaci uputstvo za rad sa LIB.EXE.
Problem je sto kad hocu da promenim onih 5 OBJ-a koji idu za bibliotekom
nanfor (po uputstvo koje ide uz zakrpe npr. LIB NANFOR -+ FLOPTST;) on mi
poizbacuje silu drugih funkcija (ne znam ni ja koje sve, tek biblioteka vise ne
valja) koje ja nigde nisam pomenuo.
Jel neko sredio tu biblioteku?
clipper.703hercog,
**> 1. Jedan prijatelj se žali da mu Clp ne prevodi prg
**> veći od 64 k? Da li je to moguće? Odnosno, da li ima
**> ograničenje veličine prg?
Koliko ja znam nije. Malko smo se zezali pa smo napravili jedan
malecki program od 350 kb i sve je radilo kako treba (prevođenje
linkovanje itd)
Hercog
clipper.704dpaun,
>> Ako korisniku ne znači mnogo redni broj sloga, mogao bi da mu
>> omogućiš interaktivni izbor slogova sa TBrowse
Verovatno da si u pravu kad su u pitanju slogovi sa uobičajenim tipovima
podataka, ali moj primarni Clp materijal jesu tekstovi, odnosno memo. Ne
znam kako bi to izgledalo preko TBrowse!
Zgodna je prilika da još jednom priupitam - ima li još koga ovde koji se
bavi tekstualnim bazama podataka?
dPaun
clipper.705dpaun,
>>>│ SEND? Nema toga ...
>> Kako nema; u STD.CH :
Evo još jednog primera SEND-a iz STD.CH:
// č..GET COLOR
#command č <row>, <col> GET <var> ;
Š<clauses,...>Ć ;
COLOR <color> ;
Š<moreClauses,...>Ć ;
;
=> č <row>, <col> GET <var> ;
Š<clauses>Ć ;
SEND colorDisp(<color>) ;
Š<moreClauses>Ć
dPaun.ch
clipper.706hercog,
**> Jel neko sredio tu biblioteku?
Ja sam to uradio sa TLIB programom iz Turboassemblera (ili beše
debugera)
Hercog
clipper.707ciki,
Ho!
Sacekaj da prevedem uputstvo koje se dobije kao fajl QuickHelp uz
MASM 6.0 pa cu ga nakaciti tebi u MAIL
Pozdrav Ciki!
clipper.708ciki,
Ho!
Posle celih 300s evo prevoda uputstva za LIB.EXE jer si ti to
trazio d.petrovic-u.Ocekujem pice za ovo i za ono pre ;)))))
Pozdrav Ciki!
lib.arjclipper.709yowo,
Mozda nekom ovo i pomogne. (radi se o koriscenju prelink datoteka)
Recimo da se program sastoji iz dva modula (m1.prg i m2.prg). Prvi module se
prevodi normalno i kada je potpuno gotov napravi se sledeci .lnk fajl.
/PRELINK
FI m1
Drugi modul se linkuje na sledeci nacin
CLIPPER čm2HHHHHHHH
(podrazumavam da se radi sa .clp fajlovima)
RTLINK FI M1 FI M2 OUT M1 /PLL:M1
(ovo traje oko 5s na 386 DX 33Mhz umesto 20s sa klasicnim linkovanjem)
Mozda ovo nekom izgleda smesno, ali ja sam se preporodio !!!
Za Darling & Co: Srdjan Gajic
clipper.710yowo,
P.S.
Zaboravih da pitam. Jel' neko moze da mi objasni kako da
od clipper.lib napravim prelink datoteku. Uvek mi javi da neki simbol
nije definisan i stane (nije nijedan od onih koje je Rick Spence naveo
u svojoj knjizi). Od prilike je nesto kao __START__SYM.
clipper.711d.petrovic,
To valjda mora tako !?????
To ce ti se samo uglaviti u exe fajl (jel negde oko 17K ?), vidis valjda
da tad ne prijavljuje gresku.
Hi!
clipper.712dpaun,
Pošto je ostalo bez odgovora, ponavljam ovo pitanje od ranije.
>> 2. U vezi grafike u Clp: može li se, u toku uobičajenog tekst
>> moda, kreirati jedno prozorče pa tamo nešto izgrafikovati? A!
Molim znalce za komentar. Reč je o prestižu Sezama; toliko sam ga
nahvalio prijatelju da je ovo poduže ćutanje kontraproduktivno.
dPaun.--
clipper.713ppekovic,
>> >> 2. U vezi grafike u Clp: može li se, u toku uobičajenog te
>> >> moda, kreirati jedno prozorče pa tamo nešto izgrafikovati?
Nemože, ali ne zbog clipper-a već zbog samog pc-a, jer na pc-u nemožeš u
tekst modu mešati grafiku.
Ipak, ako mu je baš stalo da tako nešto uradi, može da proba sledeće:
Neka isčita tekuće definicije fontova, pa neka krene redom da čita video
memeoriju i kreira bitmap sliku negde u memoriji. Zatim lepo prebaci karticu u
grafički mod i onda baci kreiranu bitmap sliku u video mem. Posle nek crta šta
hoće.
Paya
clipper.714dejanr,
>> 2. U vezi grafike u Clp: može li se, u toku uobičajenog tekst
>> moda, kreirati jedno prozorče pa tamo nešto izgrafikovati? A!
Ne može, koliko znam. Clipper radi samo u tekst modu.
clipper.715ciki,
Ho!
Posto nisam dobio odgovor, ponavljam pitanjce.
1.
procedure Ja
local ff:=0
...
vv:=0
...
...
return
Pitanje: Kako je deklarisano vv
a) Public && Nije ali ipak da se vidi
b) Local
c) Static
d) Private
P.S. Tacan odgovor zaokruziti
2. Zasto ovo rad if konto==alltrim(sifra) , a ovo
copy to u1 for konto==alltrim(sifra)
Pozdrav Ciki!
clipper.716d.petrovic,
> procedure Ja.
> local ff:=0
> ...
> vv:=0
> ...
> ...
> return
>
> Pitanje: Kako je deklarisano vv
> a) Public && Nije ali ipak da se vidi
> b) Local
> c) Static
>╔════════════╗
>║ d) Private ║
>╚════════════╝
> P.S. Tacan odgovor zaokruziti
> 2. Zasto ovo rad if konto==alltrim(sifra) , a ovo
> copy to u1 for konto==alltrim(sifra)
Šta je pisac hteo da kaže ?!
Hi!
P.S.
R:Đ>mail wr d.petrovic
Dolazim inkriminisanog dana u Bgd... :)
clipper.717ciki,
>> 2. Zasto ovo rad if konto==alltrim(sifra) , a ovo
> copy to u1 for konto==alltrim(sifra)
>
> Šta je pisac hteo da kaže ?!
Pisac je hteo da kaže ovo:
Kada ispitujem uslov sa if-om, sve radi Ok, tj. za odredjen uslov
program ga prepozna i nastavi da radi naznečeno.
Ako 1 proceduru i to handmade zamenim sa onim
COPY..., program neće da radi.
Znači umesto COPY..., ja sam pisao uz pomoc for, if ,... 1 proc.,
koja zamenjuje COPY....
P.S. Hvala ti za odgovor. Mrzelo me je da testiram prg. preko
debugger-a.
Pozdrav Ciki!
clipper.718ndragan,
/ Molim znalce za komentar. Reč je o prestižu Sezama; toliko sam ga
/ nahvalio prijatelju da je ovo poduže ćutanje kontraproduktivno.
Xm, to je moglo na Spektrumu, može na Meku, Atariju i Amizi - znači na
računarima koji su stalno u grafičkom modu. Kod PCa postoji caka da je
set naredbi za ispis u tekst režimu i u grafičkom režimu sasvim
različit (u jednom slučaju se 'gađaju' određene lokacije u video
memoriji kodovima slova, a u drugom se na grafičkom ekranu 'crtaju'
slova).
Eventualno da nateraš kliper da radi stalno u grafičkom režimu, ili da
koristiš neku bazu za pendžere - ne znam za bolji način. Jel neko
uopšte probao nešto od ta dva?
clipper.720d.petrovic,
Braćo po CLIPPER-u:
U P O M O O O O O O O O O O Ć !!!!!!!!
Elem da počnem:
Hteo sam da biblioteku NANFOR.LIB sredim, t.j. da izmenim pet funkcija
(znate već koje) da ne bi morao da ih duplo definišem u programu.
Glavni razlog za to je što tu biblioteku nemogu da smestim u *.PLL fajl,
jer kasnije te funkcije neće biti predefinisane i program neće raditi kako
valja.
E, tu se javlja problem:
LIB.EXE (verzija 3.15, a pre toga i verzija 3.10) završi svoj pos'o,
izmeni šta već treba i biblioteka je prividno OK., ali...
Neke druge funkcije, koje ja nigde nisam pomenuo pri radu sa LIB-om, a to
su:
FT_DEC2BIN
FT_DEFAULT
FT_SQZN
FT_ORIGIN
onda neće da rade, t.j. kad linker (rtlink) formira *.EXE fajl njih prijavi kao
nedefinisane (možda bi prijavio i neke druge da ih koristim u programu).
Pokušavao sam i njih da vadim pa da vraćam u biblioteku, ali sve je
ostajalo po starom :(
Vrlo važno:
Ovo se dešava samo pri radu sa *.PLL bibliotekom (zbog koje je sve ovo i
počelo), a ako sve normalno linkujem sve je OK.
Još važnije:
OVO SVE ME TOLIKO NERVIRA DA 'OĆU IZ KOčE DA IZAĐEM, žAS OĆE, žAS NEĆE,
PRAVIO SAM JE I RASTURAO n PUTA (n>>50) I UVEK ISTO, ISTE FUNKCIJE, ISTA
SR*NJA. Dobro de, mogu ja njih i da izbacim iz programa dok je u razvoju,
ali NEĆU!
Ajde neka dobra duša nek proba da mi to reši, jerbo ja za taj pos'o nemam
više ič živaca.
Za sada prilažem listu funkcija u biblioteci (iz zadnjeg pokušaja) i oba
RMK fajla, onaj sa kojim radi, i onaj sa kojim me za*ebava. Ako nekom bude
trebala zakačiću i biblioteku, da je ne šaljem sad džabe kad to svi imate.
Ajd zdravo, znam da će neki da me pcuju što sam im i ovoliko napunio pad.
Hi!
list.arjclipper.721nbatocanin,
>>> 2. U vezi grafike u Clp: može li se, u toku uobičajenog
>>> tekst moda, kreirati jedno prozorče pa tamo nešto
>>> izgrafikovati? A!
Slike se mogu crtati samo u grafičkom modu. Ne postoji mogućnost
mešovitog moda - ili je grafički ili tekst. Naravno, slova se mogu
crtati i u grafičkom modu, a to je verovatno ono što ti treba. Neke
grafičke biblioteke omogućavaju da bez ikakvih prerada Clipper
program radi u grafičkom modu. Ja znam da to ima dGE, a mislim i
Force i Flipper.
clipper.722toma,
■■>>>> 2. U vezi grafike u Clp: može li se, u toku uobičajenog tekst
■■>>>> moda, kreirati jedno prozorče pa tamo nešto izgrafikovati? A!
■■>>
■■>> Ne može, koliko znam. Clipper radi samo u tekst modu.
Ajde mi ti, života ti, u nekom jeziku >koji radi i u graf modu<
napiši program koji će u tekst modu samo jedan prozor da prebaci
u graf mod. Još ako to radi i na hercules onda svaka ti čast.
-=> Toma <=-
clipper.723zkrstic,
> P.S. Hvala ti za odgovor. Mrzelo me je da testiram prg. preko
> debugger-a.
Znam još jednog takvog ;) Aman, šta ti je teško da malo brčneš
prstiće kroz dibager i iskopaš šta te zeza :)
Zkr
clipper.724ciki,
Zdravo!
Imam jedan problem oko arhive r075clpr.zip iz Đrsoft-a sa sezama.
Ukratko evo u cemu je stos.
U arhivi se izmedju ostalog dobijaju 2 source fajla na asembleru,
koja moj masm 6.0 ne moze da prevede!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1. Ako prevodim program onakav kakav jeste, javi mi gresku da
ne moze da nadje EXTENDA.INC(e se bese tako zove).
2. ja mu onda izbacim ono l: iz INCLUD direktive (kad ono bolje da
to nisam radio)
3. Izbacuje mi xž12312313 greskica(Saljem jedan txt fajl,pa ce te
tu moci da vidite sta me muci.)
Propratni fajl je pisan nbatocanin-u, pa ako se njegovo ime
pomene, vi smatrajte da ste to vi :)))
P.S. Nemoj neko da pomisli da nemam EXTENDA.INC(Imam Imam.Dobio ga
uz Clipper 5.01 u dir. INCLUDE), ali NEEEEE RAAADIIIII!!!!!
Da nije u pitanje MASM.
Ako je neko preveo ta 2 fajla, zamolio bih ga da mi OBJ nakaci ili u
mail ili ovdiii!
Izvinite na ovolikoj gnjavazi.
Unapred hvala
Pozdrav Ciki!
ciki.arjclipper.725toma,
Ima li neko uputstvo za Flipper.
Bilo kakvo, sem NG-a.
clipper.726ppekovic,
>> Ima li neko uputstvo za Flipper.
Svrati večeras do kluba.
BTW. Pošto je tema grafike i clipper-a jedna od onih koje nazivamo
večitima, a nije se do sada pronašao dobar način za njenu realizaciju, jel može
neko ko ima neka iskustva sa tim flipper-om (jel beše 5.0 verzija) da kaže da
li smo konačno našli rešenje za večiti problem?
Paya
clipper.727toma,
■■>> Svrati večeras do kluba.
Eto, a nisam ni znao da i u Paraćinu postoji klub. :(((((
clipper.728dpaun,
>> 1. Ako prevodim program onakav kakav jeste, javi mi gresku da
>> ne moze da nadje EXTENDA.INC
Problem je sigurno u putanji.
U autoexec.bat treba da imaš:
SET INCLUDE=C:CLIPPER5ĐINCLUDE /tj. konkretnu putanju do *.inc fajlova/
Onda ti u zaglavlju *.asm fajla ne treba l:, dovoljno je:
INCLUDE EXTENDA.INC, ili umesto l: napiši celu putanju:
INCLUDE C:ĐCLIPPER5ĐINCLUDEĐEXTENDA.INC
Onda MASM ImeAsmFajla ...
dPaun.inc
clipper.729hercog,
Koliko je to uputstvo?
Hercog
p.s. ako neće Toma može posudba na jednu drugu stranu?
clipper.730toma,
Bavi li se neko od vas pisanjem UKRAS rutina za clipper ?
clipper.731ciki,
Ho!
Da ti nesto kazem unapred.
Nije problem u putanji posto:
1. Imam u autoexec-u definisan taj path.
2. Extenda.inc sam ubacio i u INCLUDE dir i u tekuci dir iz koga
vrsim kompajliranje.
Ono sto je glavni su linije 78,79,80,81(tako nesto) u fajlu
EXTENDA.INC -----
Znaci ili nisam naveo odgovarajuce prekidace prilikom kompa., ili ...
P.S. Ipak hvala ti na trudu i izgubljenom vremenu.
Sto se tice uputstva za Flipepr 5.0 (Da ne bi ponovo pisao porukicu),
nije mi jasno sta ce ti uz onolike primere i onakav NG(ali ima nas
raznih)
Pozdrav Ciki!
clipper.732ratman,
Imam AT/12MHz sa 1M RAM, pa mi je RTLink od Clipper-a strasno spor.
Sta sve moze da se uradi da se ovo ubrza?
A da probam dobri stari TLink? Bar dok pravim samo
male, probne pgm.e?
Pozdrav,
Dejan
clipper.733ratman,
Gde se, ustvari nalaze trigonometrijske funkcije za Clipper (i slicne njima)?
MIsl'o sam da je u EXTEND.LIB, ali jok...
clipper.734toma,
■■>> p.s. ako neće Toma može posudba na jednu drugu stranu?
Oće toma uputstvo ali ne može na dođe u klub. :((((
clipper.735janko,
>
> Bavi li se neko od vas pisanjem UKRAS rutina za clipper ?
>
Tomo, majstore! Ja ne, ali, ako počneš da pišeš i negde zapneš,
imaš moju podršku. Napr. epoštom.
Dodatno pitanje:
***************************************************************
A ima li neko ko bi to FINANSIRAO? CLIPPER aplikacije su
izuzetno komercijalne. Napr. neka softverska firma, pa da to
bude njeno ekskluzivno vlasništvo? Ili opet sanjam, da to može
i kod nas?
***************************************************************
clipper.736bulaja,
│ A ima li neko ko bi to FINANSIRAO? CLIPPER aplikacije su
│ izuzetno komercijalne. Napr. neka softverska firma, pa da to
│ bude njeno ekskluzivno vlasnistvo? Ili opet sanjam, da to moze
│ i kod nas?
└───
A sta da bude vlasnistvo? Koliko sam video C/PAS verziju Ukrasa, prenos
na Clipper bi zahtevao "tezak" rad izmedju dva zvanja Sezama :), znaci
nekoliko sati. Ako mislis da na tome namlatis lovu ...
Vecina onih koji ozbiljnije rade sa Clipper-om verovatno ima vec neki
svoj sistem za rad sa razlicitim YU standardima, tako da ne verujem da
bi im mnogo trebao Ukras :).
clipper.737fric,
> Nije problem u putanji posto:
> 1. Imam u autoexec-u definisan taj path.
Ako ga imaš u path = ..., onda jeste problem u tome jer se kroz
promenljivu path mogu nalaziti samo exe, com i bat fajlovi.
Ako imaš eksplicitno deklarisano SET INCLUDE=... - e onda stvarno
ne znam.
fric
clipper.738fric,
Muči me sledeće:
Treba da štampam dokument sa lepim zaglavljem. Nacrtam zaglavlje u
Corelu, iz WP-a doteram i snimim u fajl, ručno CR na kraju zamenim
sa LF. Sve je u redu, sad treba napraviti rutinu u clipperu koja će
crtati zaglavlje (tj. logo) pa ispisivati tekst ispod.
Zaglavlje ispišem jednim RUN ('copy logo.prn lpt1 > nul')
I to lepo radi, ali nikako ne mogu da posle toga nateram štampač
da primi i ispiše ostatak teksta (štampač je LQ550). Stavio sam
iza gornje RUN naredbe jednu petljicu u kojoj se čeka da štampač
nacrta šta ima (isprazni bafer, tj. da ISPRINTER() da bude true).
Proveravao sam dibagerom, ta petlja se uredno provrti, ali štampač
ništa dalje ne štampa, iako se PROW() uredno inkrementira:
SET DEVICE TO PRINT
SET PRINTER TO cLptG
č PROW() ,0 SAY CHR(27) + 'č' //inicijalizacija printera
č PROW()+nDYG,0 SAY Razmak_8 + Elit_ON + 'tekst...'
...
Nije radilo ni kada sam ubacivao/izbacivao liniju sa kodom za
inicijalizaciju štampača, ni kada sam u logo.prn apendovao na kraj
isti taj kod ... Štampač samo ostane on-line i ne reaguje.
Pretpostavljam da se neko na Sezamu bavio sličnim poslom i da ga je
uspešno okončao - kako je ovo realizovao ?
fric
clipper.739ciki,
Ho!
::>>Ako imaš eksplicitno deklarisano SET INCLUDE=...
Imam eksplicitno definisan path!!!!
Ma ljudi nije putanja problem vec veza MASM 6.0 i EXETNDA.INC.
P.S. Ali najbolje bi bilo da to zaboravimo!!!!!!
P.P.S. Nisam bas dobro procitao tvoju porukicu, ali imas nesto
slicno u nekom od starijih racunara.
Pozdrav Ciki!
clipper.740kzoran,
Ljudi,
da li SORT source i SORT target fajl mogu biti ista (source) datoteka, ili je
neophodno izvoditi vratolomije tipa
SELECT source
SORT ON key TO target
CLOSE source
USE target
COPY TO source
CLOSE target
ERASE target
USE source
INDEX ON key TO xx
CLOSE source
da bi na kraju sortirana datoteka imala isto ime kao na startu?
Odnosno, je li moguce uraditi jednostavno
SELECT source
SORT ON key TO source
i resiti problem?
Napominjem da bi navedene operacije trebalo vrsiti nekoliko puta u programu
sa 4(!) potencijalno vrlo velike datoteke, i da svaka usteda u vremenu moze
da bude fundamentaaaalna...
(Ako vas cudi ono indeksiranje sortirane datoteke, razlog je u tome sto se
na jednom mestu datoteci pristupa putem indeksa, a na drugom pristup mora da
bude funkcijom DBGOTO(x), koja indekse ne priznaje - inace mi sort ne bi ni
trebao.)
Pozdrav,
Zoran.
clipper.741zkrstic,
> Bavi li se neko od vas pisanjem UKRAS rutina za clipper ?
Jok ;) Ja mrzim svoje kupce, korisnike i teram ih da rade il' sa
CP 852 il' sa Juskijem. I to kako meni volja ;) Ne dam im ništa da
biraju ;) Dovoljno je što su mene odabrali :))))))
Pozdrav, Zkr :)
clipper.742zkrstic,
> Gde se, ustvari nalaze trigonometrijske funkcije za Clipper (i
> slicne njima)? MIsl'o sam da je u EXTEND.LIB, ali jok...
Nema ih, na žalost tvoju.
Mislim da sam imao negde LIB sa takvim funkcijama, pa ako ga nađem,
šaljem vamo.
Pozdrav, Zkr
clipper.743zkrstic,
> da li SORT source i SORT target fajl mogu biti ista (source) datoteka
NE!
Pozdrav, Zkr
clipper.744janko,
> A sta da bude vlasnistvo? Koliko sam video C/PAS verziju
> Ukrasa, prenos na Clipper bi zahtevao "tezak" rad izmedju
> dva zvanja Sezama :), znaci
Znači... bićemo ti zahvalni da toliko uradiš. Ja sam mislio da
je to teže od C i Paskal verzije, jer mora da se piše na
mašincu da bi bilo efikasno... priznajem, meni bi trebalo dosta
vremena za takav poduhvat. Znači...
***********************************
žekamo Bulajun UKRAS za Clipper. :)
***********************************
(BTW molim te, da bude kompatibilan i sa Summer '87!)
clipper.745kzoran,
> NE!
HVALA!
Pozdrav,
Zoran.
clipper.746pjankovic,
> Bavi li se neko od vas pisanjem UKRAS rutina za clipper ?
Na osnovu jankovog programa u C-u napisao sam u Clipperu funkciju
za inicijalizaciju. Pošto se inicijalizacija vrši samo jedanput na početku
tu brzina nije kritična.
Funkciju juk() (koja vrši konverziju) sam modifikovao da se poziva iz
Clippera i da joj se prosleđuje tabela kodova. Brzinu nisam testirao ali
mi se čini da bi za većinu zahtjeva ova funkcija trebala da je dovoljno brza.
Ako ima zainteresovanih mogu to da okačim. Naravno, trebalo bi mi
malo vremena da sve to sredim i napišem neke komentare.
clipper.747pjankovic,
> Imam AT/12MHz sa 1M RAM, pa mi je RTLink od Clipper-a
> strasno spor.
Ako već tako ne radiš, startuj RTLink sa opcijom /PLL:base50.
Korišćenjem Pre Link Libraries brzina linkovanja se po mojoj slobodnoj
procjeni povećava 2-3 puta.
clipper.748dpaun,
>> Ma ljudi nije putanja problem vec veza MASM 6.0 i EXETNDA.INC.
>> P.S. Ali najbolje bi bilo da to zaboravimo!!!!!!
Ma čoveče, takav defetizam nije u duhu Sezama!
Ajmo lepo od početka: prva poruka, koju si dobio, vezana bila je vezana
za putanju, onda si stvar rešio tako što si izbrisao ono l:, pa onda
prebacio EXTENDA.INC radni direktorijum itd. Tvrdiš da ti je putanja u
redu ... Neka bude po tvom! Ja tvrdim da ASM fajlovima koje si hteo da
asembliraš ne fali ništa. Dokaz je u prilogu ove poruke (šaljem ti ih
u obj stanju!). Pre nego što ponovo nalegneš na taster sa znacima
čuđenja, učini i ovaj pokušaj: prebaci asm fajlove u direktorijum MASM,
prebaci tamo i EXTENDA.INC, obriši ono l: iz zaglavlja asm-a, napiši
MASM view ... pa ako i tada ne bude u redu, u redu.
PS. Reagovao sam na tvoj vapaj zato što sam i sam prošao kroz to. Za
razliku od tebe, nisam bes iskalio na ASCII 33!
dPaun
clipper.749andrejl,
>│ Tomo, majstore! Ja ne, ali, ako počneš da pišeš i negde
>│ zapneš, imaš moju podršku. Napr. epoštom.
Ako Toma neće mogu ja da prionem poslu, u stvari već sam
razmišljao da UKRASim clipper :) ili možemo competition :)
Šalu na stranu, ja sam spreman.
bye, andrejl
clipper.750nbatocanin,
Izvinjavam se zbog zakašnjenja odgovora. Evo o čemu se radi.
Direktiva INCLUDE služi za uključivanje standardnog Clipper zaglavlja
za rad sa extend sistemom - to je datoteka EXTENDA.INC koja se dobija
uz Clipper. Znači, umesto L:\... napišite *puno* ime kataloga na kome
se nalazi ta datoteka i to će biti OK. Kao što reče dPaun++, može i
menjanjem DOS promenljive INCLUDE.
Ja koristim MASM 5.1 i mada sam veoma nezadovoljan njegovim radom,
koristim ga jer je određeni standard. TASM, bez obzira na agresivnu
najavu, ne može da prevede EXTENDA.INC, ni u jednom modu. Tačan
razlog ne znam, a i ne interesuje me.
Pretpostavljam da je sličan razlog i kod MASM 6.0. Sasvim posebno
pitanje je kompatibilnost verzija *asemblera* istog proizvođača. žini
mi se da je razvijanje makro dela jezika na uštrb kompatibilnosti
veoma nerazumno. Izvinjavam se unapred u slučaju da postoji neki
prekidač za kompatibilnost. Ali, eto. Sve što ja mogu da uradim je da
odsad, pa nadalje i ubuduće šaljem i odgovarajuće OBJ datoteke.
objs.zipclipper.751janko,
> Na osnovu jankovog programa u C-u napisao sam u Clipperu
> funkciju za inicijalizaciju. Pošto se inicijalizacija vrši
> samo jedanput na početku tu brzina nije kritična.
Da. I ja mislim da je neisplativo (ili teško izvodljivo,
zbog korišćenja C-ovih bibliotečkih rutina koje MOčDA ne ulaze
u Clipper.lib, ili mu smetaju) inicijalizaciju raditi u nečem
što nije sam Kliper.
> Funkciju juk() (koja vrši konverziju) sam modifikovao da
> se poziva iz Clippera i da joj se prosleđuje tabela
> kodova. Brzinu nisam testirao ali mi se čini da bi za
> većinu zahtjeva ova funkcija trebala da je dovoljno brza.
A je li juk() na Kliperu ili C-u? Pitam zbog ovog 'čini mi se
da je dovoljno brza.' Ako je na C-u, valjda je to dovoljno?
> Ako ima zainteresovanih mogu to da okačim. Naravno,
> trebalo bi mi malo vremena da sve to sredim i napišem neke
> komentare.
Naravno da ima. Kad sve to središ, tražićemo od moderatora da i
to smesti u neki direktorijum, na opštu korist.
clipper.752janko,
> Ako Toma neće mogu ja da prionem poslu, u stvari već sam
> razmišljao da UKRASim clipper :) ili možemo competition :)
> Šalu na stranu, ja sam spreman.
Nije šala, već, bolje da sarađujemo. Evo, i pjanković se javio,
on je već i napisao dosta toga. Uvek je dobro da više ljudi
učestvuje u nekom projektu -- ponudi mu se da mu pomogneš, ako
je on na to spreman?
A ako vas se još skupi, možete da formirate grupu (za razvoj)!
Usput, imaš li iskustva sa ubacivanjem mašinskih (ili C) rutina
u Clipper? Bilo bi zgodno da sama f-ja za konverziju ne bude na
Kliperu, zbog brzine. Znaš već, kad se stavi kao f-ja indeksa i
slično...
A onda, kada kompletiramo rutine za latinicu, konačno možemo
krenemo i u osvajanja ćirilice! Biće još posla za programere! :)
Vou, jea!
clipper.753toma,
■■>> Ako Toma neće mogu ja da prionem poslu, u stvari već sam
■■>> razmišljao da UKRASim clipper :) ili možemo competition :)
■■>> Šalu na stranu, ja sam spreman.
Nije da neću, nego sam malo tesan sa vremenom, a i zaboravio sam
i ono malo C-a što sam znao. (ATARI ST -> vojska -> PC)
clipper.754bstevan,
Zdravo !
Evo jednog pitanja u vezi rada u mrežnom okruženju,
radi se o verziji 87'.
Sa SET EXCLUSIVE OFF - postavim da su baze na raspolaganju
svim korisnicima.
Sad kad otvorim bazu sa USE (nDataBase) ECLUSIVE i sa NETERR(),
proverim uspešnost otvaranja baze sve je ok, odnosno kad sledeći
korisnik pokuša da otvori istu bazu javlja zauzeće baze.
Problem nastaje kad želim da istu bazu koriste više korisnika,
i da pojedine slogove menjaju ili da pojedine slogove u bazi
zaključam, odnosno otključam.
Konkretno ako se PRVI korisnik nalazi u bazi XXXXX.dbf na 10-tom
slogu, i ako pokuša korisnik DRUGI u istoj bazi da radi na tom slogu,
kako da ga sprečim pre nego što program padne uz poruku "lock
required".
I još jedno interesantno zapažanje samo sa USE (nDataBase), bez
EXCLUSIVE mogu da koriste datoteku oba korisnika, ali ne mogu da
menjaju ništa u datoteci, jer pri pokušaju da to učine pozdravna
poruka je "database requried" ili "exclusive requried".
Jer ako otvorim bazu sa EXCLUSIVE javlja mi zauzeće baze.
Da li neko ima iskustva sa ovim stvarima i koja su rešenja ?
Kopao sam po literaturi o radu sa mrežama, ali to su uglavnom
kratka objašnjenja, bez nekih praktičnih iskustva autora.
pozdrav BSTEVAN
clipper.755dvasiljevic,
HELP ! HELP ! HELP ! HELP ! HELP ! HELP ! HELP !
Imam jednu muku sa poteškoćama u vezi tbrowse objekata.
:(
Nikako ne mogu da postignem da se sa pomeranjem kursora
gore-dole naglašava (tb:hilite()) cela linija. :(
Pokušavao sam nešto u fazonu :
:
:
for i := 1 to tb:colCount - 1
++ tb:colPos
while !tb:stabilize() ; end do
tb:hilite()
next
while !tb:stabilize() .and. (ch:=inkey()==0); end do
if tb:stable ; ch:=inkey(0) ; end if
do case
case ch == K_ESC .or. ch == K_ENTER ; exit
:
:
Šta sve nisam probao, i ne pomaže.
Ako je neko voljan da mi pomogne, biću mu veoma zahvalan.
Pozdrav
Veličko :(
clipper.756hercog,
**> SELECT source
**> SORT ON key TO source
Ovako nipošto ne smeš da uradiš. Radiće par puta dobro, a onda posle
nekog vremena ćeš na disku da dobiješ samo ime od datoteke. Nestaće i
njena struktura i podaci. A program će da ti prijavi CORUPTION DETECTED...
Hercog
p.s. zato koristi prvi način
clipper.757bulaja,
Prilikom SORT-a source i target moraju biti razlicite datoteke, ali
nemoj koristiti SORT, umesto toga indeksiranje po kljucu pa COPY TO
radi mnogo brze (i pouzdanije). Takodje ne treba COPY TO source za celu
datoteku, posto bi COPY TO file trebalo da radi brze (pre toga uradi
jedan COMMIT da ne bude haosa sa neispraznjenim baferima :). Ali ovde ti
ne treba ni COPY vec jedan DELETE FILE pa RENAME. Dakle:
select source
index on key to xx
copy to target
close source
delete file source.dbf
rename target.dbf to source.dbf
delete file target.dbf
// ovde vec imas napravljen xx.ntx
// pa ne treba dalje raditi index
clipper.758bulaja,
│Naravno da ima. Kad sve to sredis, trazicemo od moderatora da i
│to smesti u neki direktorijum, na opstu korist.
└───
Pa necu da smestam pojedinacno ukras rutine za svaki jezik, vec ih ti
ubaci u novu verziju Ukraz paketa (onog sto je u \pc\yu) pa cu komplet
da stavim u dir umesto stare verzije. Eno stoji podrska za Modulu 2 u
conf, a nikako da je ubacis u paket.
clipper.759janko,
> Pa necu da smestam pojedinacno ukras rutine za svaki
> jezik, vec ih ti ubaci u novu verziju Ukraz paketa (onog
> sto je u ĐpcĐyu) pa cu komplet da stavim u dir umesto
> stare verzije. Eno stoji podrska za Modulu 2 u conf, a
> nikako da je ubacis u paket.
Pa, može, ako insistiraš... ne bi mi bilo teško. Meni je nekako
bilo logičnije da čoveka koji piše Modulu 2 ne zanima kako
izgledaju rutine na C-u... Najviše bih voleo da za svaki jezik
postoji poseban paket...
Šta misle Sezamovci o ovome? Da li biste više voleli po 20 K
'ukrasa za paskal,' 'ukrasa za kliper' itd. ili (potencijalno)
120K 'ukrasa za sve živo'?
---
PS. Kad se već razgovaramo, a što ne stavi Tank_v2 program u
dir? Garantujem da se skoro neće pojaviti brži, osim ako se
neko dooobro ne pomuči.
clipper.760fric,
> Evo jednog pitanja u vezi rada u mrežnom okruženju,
> radi se o verziji 87'.
Ja ti ovo pričam za 5.01, ali mi se čini da treba da važi
i za '87.
> Sa SET EXCLUSIVE OFF - postavim da su baze na raspolaganju
> svim korisnicima.
Kao prvo, preporuka je da ne koristiš set exclusive,
već da exsplicitno uvek USU-ješ exclusive ili shared.
To je čisto pitanje stila, i otpornosti na greške.
> Konkretno ako se PRVI korisnik nalazi u bazi XXXXX.dbf na
> 10-tom slogu, i ako pokuša korisnik DRUGI u istoj bazi da
> radi na tom slogu, kako da ga sprečim pre nego što program
> padne uz poruku "lock required".
- Ako neko drži ekskluzivno bazu, *niko* drugi ne može ni da prismrdi
- Zato obojica treba bazu da otvore shared
- Ako hoće obojica samo da čitaju, nema problema
- Ako neko hoće da radi replace, pack, zap, i još po nešto, *mora* pre
toga da zaključa celu bazu ili record, zavisno od slučaja.
Ako ti treba, mogu da prepišem tabelu gde piše koja operacija zahteva
kakav način zauzeća baze ili zaključavanja, ko koga potire (šta je
'starije') i sl.
> I još jedno interesantno zapažanje samo sa USE
> (nDataBase), bez EXCLUSIVE mogu da koriste datoteku oba
> korisnika, ali ne mogu da menjaju ništa u datoteci, jer
> pri pokušaju da to učine pozdravna poruka je "database
> requried" ili "exclusive requried".
Vidi gore.
> Kopao sam po literaturi o radu sa mrežama, ali to su
> uglavnom kratka objašnjenja, bez nekih praktičnih iskustva
> autora.
Ja sam u 'Clipper 5 - vodič za programere' or Ricka Spence-a
(knjiga sa jedrenjakom) našao poglavlje sa 40-50 *veoma* korisnih
stranica o razvoju kliper aplikacija za rad na mreži.
fric
clipper.761kzoran,
> Ovako nipošto ne smeš da uradiš. Radiće par puta dobro, a onda posle
> nekog vremena ćeš na disku da dobiješ samo ime od datoteke. Nestaće i
> njena struktura i podaci. A program će da ti prijavi CORUPTION DETECTED...
To sam i pretpostavljao, ali ko pita ne skita.
Hvala!
Pozdrav,
Zoran.
clipper.762kzoran,
COMMIT mi valjda ne treba, posto program (za sada) ne radi u mrezi.
A sto se listinga tice:
> select source
> index on key to xx
> copy to target
> close source
> delete file source.dbf
> rename target.dbf to source.dbf
> delete file target.dbf
> // ovde vec imas napravljen xx.ntx
> // pa ne treba dalje raditi index
u pravu si za COPY TO - ponovni COPY mi ne treba (zaboravio sam da COPY TO
kopira slogove u logickom redosledu na koji ukazuje indeks), ali zar mi ne
treba INDEX ON .. TO .. na kraju, jer indeks koji je vazio za prvobitni
source vise ne odgovara novom redosledu u "sortiranom" source-u.
U svakom slucaju, sva ova resenja su mi previse spora, i moracu se pozabaviti
zamenom onog DBGOTO(x) nekom drugom sekvencom za nalazenje trazenog sloga bez
kopiranja i sortiranja fajlova.
Hvala na pomoci.
Pozdrav,
Zoran.
clipper.763bulaja,
│Ovako niposto ne smes da uradis. Radice par puta dobro, a onda posle
│nekog vremena ces na disku da dobijes samo ime od datoteke. Nestace i
│njena struktura i podaci. A program ce da ti prijavi CORUPTION DETECTED...
└───
E bre Hercog, pa opet to o onoj misteriji oko nestajanja datoteka koja
se pojavila samo kod tebe i niko drugi nije uspeo da je ponovi! :) SORT
jeste glupa naredba, ali uglavnom radi (lose), ne plasi narod :).
clipper.764bulaja,
│PS. Kad se vec razgovaramo, a sto ne stavi Tank_v2 program u
│dir? Garantujem da se skoro nece pojaviti brzi, osim ako se
│neko dooobro ne pomuci.
└───
To mu dodje nesto za Tanjug raspored? Aj' pogledacu ga, pricekaj malo
dok mi se smire ispiti.
clipper.765janko,
> To mu dodje nesto za Tanjug raspored? Aj' pogledacu ga,
> pricekaj malo dok mi se smire ispiti.
Jeste. I dovoljno je mali da ti ne treba više vremena nego da
odgovoriš na 4 poruke u SORu. Nije to operativni sistem, već
samo program za konverziju.
clipper.766bulaja,
│COMMIT mi valjda ne treba, posto program (za sada) ne radi u mrezi.
└───
COMMIT ti treba ponekad bez obzira sto se ne radi u mrezi, u ovom
slucaju zato sto je baza koju kopiras otvorena pa treba isprazniti
bafere pre toga. Inace ne treba kopirati otvorene baze :), ali nije
stetno ako uradis commit pre toga, a moze i prvo close pa copy.
clipper.767ciki,
Ma čoveče, takav defetizam nije u duhu Sezama!
Ovako.Možda jesam preterao :-((((, ali sam u pravu, jer
sam nekoliko puta naglasavao da mi javlja greske prilikom
kompajliranja EXTENDA.INC fajla(Da nemoze da ga nadje ne
bi ni prijavljivao greske. Sta mislis o tome.)
Znaci nije u pitanju ni putanja ni nesto II, jer imam i
SET INCLUDE i PATH i fajlove u istom dir-u.
Hvala nbatocaninu za odgovor.nazalost u pravu je.
MASM 6.0 nije u potpunosti kompatibilan sa MASM x,x<6, iako
ima prekidac /Zm koji kobajagi omogućava kompa, ali to je
za neku drugu konf..
Inace morao sam i sam nabaviti neku stariju verziju MASM(Hvala
tomi).
P.S. Nisam se javljao od 31.8.1992. pa nisam u toku.
P.P.S. Hvala ti za utroseno vreme.
Pozdrav Ciki!
clipper.768nbatocanin,
> Imam jednu muku sa poteškoćama u vezi tbrowse objekata.
X := TB:RowPos
Y := TB:ColPos
ACur := {X, 1, X, TB:colCount}
ACurC := {X, Y, X, Y}
TB:colorRect (ACur, {5,1})
TB:colorRect (ACurC, {2,1})
Ch := InKey(0)
TB:colorRect (ACur, {1,2})
clipper.769toma,
Zna li neko kako da saznam datum uz fajl na disku, iz clipper-a
naravno.
clipper.770ppekovic,
>> Zna li neko kako da saznam datum uz fajl na disku, iz clipper-a
>> naravno.
Beše jedan programer, nemogu da se setim koji ;))) koji je to
rešavao na sledeći način:
Sačuva ekran, postavi istu boju fg i bg, zatim pozove dir
ime_fajla, pa onda lepo sa ekrana isčita u string datum, i na
kraju vrati originalni ekran ;)))). Posle je unapredio algoritam
tako sto je preusmerio izlaz u fajl pa čitao iz fajla, tako da
nije bilo zatamnjivanja ekrana ;))))
Paya
clipper.771dvasiljevic,
> Imam jednu muku sa poteškoćama u vezi tbrowse objekata.
H V A L A !
Svaka čast nbatocaninu !
Pozdrav !
Veličko
clipper.772hercog,
**> se pojavila samo kod tebe i niko drugi nije uspeo da je ponovi! :) SORT
Pa probaj da u nekom programu napišeš da i izvorna i ciljna datoteka
kod sorta budu jedna ista. Videćeš i sam kad posle nekog vremena dobiješ
CORUPTION DETECTED, baš zbog tako napisanog sorta...
Hercog
clipper.773ndragan,
/ SELECT source
/ SORT ON key TO target
Itd... zar ne bi mogao da prekrstiš (rename) izvornu pre sorta, pa da tu
prekrštenu sortiraš u novu verziju izvorne? Gubi se bar jedno
kopiranje.
clipper.774toma,
■■>> Zna li neko kako da saznam datum uz fajl na disku, iz clipper-a
■■>> naravno.
Ha! Evo sad ja znam.
Za ostale koje zanima: funkcija FindDate( <DTA> )
biblioteka: Clipper 5.01 Expand Library v2.0
OPS! Pa može i clipper funkcijom ADIR().
clipper.775bstevan,
Za 5.01 je ok. što si napisao ali za 87' ne važi,
neke stvari na primer otvaranje sa SHARED ili pak sa NEW.
Konkretno sa 5.01 nema problema sa radom u mreži
jer su dodate još niz komandi za olakšani rad u mreži.
Kod verzije 87' ide malo teže.
I dalje me interesuju iskustva sa radom u mreži u verziji 87'.
Kad sam pomenuo literaturu i rad u mreži
nisam mislio na 5.00 i 5.01, već na pomenutu verziju 87'.
Knjigu koju ti imaš sa "jedrenjakom",
to je za clipper 5.00, a ja imam za 5.01 od Alempje Veljovića,
i u njoj ima dosta o radu u mreži ali dati primeri ne rade u 87'.
---POZDRAV---
---BSTEVAN---
clipper.776fric,
> Zna li neko kako da saznam datum uz fajl na disku, iz
> clipper-a naravno.
Ako te zanima datum fajla na disku, imaš funkciju directory()
koja za zadati fajl/fajlove vraća niz sa informaciojom o imenu,
datumu i vremenu kreiranja, dužini, atributima.
clipper.777fric,
> Kod verzije 87' ide malo teže.
čao mi je što ti nisam bio od pomoći. :(
Pretpostavljao sam da ima dosta sličnosti između
5.01 i '87 po pitanju mrežnog rada - kad ono jok !
clipper.778vkrstonosic,
>> Bese jedan programer, nemogu da se setim koji ;))) koji je to
>> resavao na sledeci nacin:
Jel u QBasicu ? ;)))))
clipper.779zkrstic,
>**> se pojavila samo kod tebe i niko drugi nije uspeo da je ponovi!
> :) SORT
>
> Pa probaj da u nekom programu napišeš da i izvorna i ciljna datoteka
> kod sorta budu jedna ista. Videćeš i sam kad posle nekog vremena
> dobiješ CORUPTION DETECTED, baš zbog tako napisanog sorta...
Uvešću ja bijenje prisutnih ovde kao obavezan detalj :))))
Aman bre Hercogu, uzmi lepo bilo kakvo uputstvo za Clipper,
pa ćeš videti da to jednostavno nije zdravo što radiš.
Da sprečim buduću diskusiju (misteriju) Pusti pack i prouzrokuj
nestanak struje. Bespovratno će ti nestati i baza ;>
Zkr
clipper.780zkrstic,
> Knjigu koju ti imaš sa "jedrenjakom",
> to je za clipper 5.00, a ja imam za 5.01 od Alempje Veljovića,
> i u njoj ima dosta o radu u mreži ali dati primeri ne rade u 87'.
Staaaaaaaaaaaaaani brajko!
Neke stvari ste preskočili ;) U Clipperu 5.01 ima jedna i
po nova naredba za rad sa mrežama i to je USE <baza> SHARED. Prostudiraj
lepo neki od onih fajlića koji idu uz (FILES.PRG) C87.
BTW, najbolje objašnjen rad sa mrežama za ma koji Clipper,
je u knjizi sa jedrenjakom, čak primeri rade na oba Clippera, uz možda
maaale izmene.
Zkr
PS. 1. Šta's se uvatio Clipper 87 ko pijan plota?
2. Ko ti uvali onu Alimpijevu knjigu?
clipper.781zkrstic,
> Za ostale koje zanima: funkcija FindDate( <DTA> )
> biblioteka: Clipper 5.01 Expand Library v2.0
Pošalji bre to na Sezam, kad već ne daš žvake! To je PD ili SH,
koliko me pamćenje služi.
Zkr
clipper.782makas,
==> Evo jednog pitanja u vezi rada u mrežnom
==> okruženju,
Ako te interesuje baš Clipper '87 onda pogledaj fajlove koji
idu uz njega. Treba da postoji fajl network.prg u kome su date
funkcije za sve osnovne radnje za rad u mreži (APPEND, REPLACE, USE...).
Pozdrav
█▀▀▀▀▀▄ ▄▀▀▀█ █▄▀▀ ▄▀▀▀█ ▄▀▀
█ █ █ ▀▄▄ █ █▀▄▄ ▀▄▄ █ ▀▄▄▀▀▄
▄▄▄ ▄▄▄ ▄▄ ▄▄ ▄▄ ▄ ▄ ▄JILL▄▄▄▄▀
clipper.783ndragan,
/ rename target.dbf to source.dbf
/ delete file target.dbf
Ovde će da javi da ne postoji target.dbf.
clipper.784nbatocanin,
Ima li neko neki od sledećih programa:
Blinker, FlexFile, SIx driver?
clipper.785toma,
■■>> Pošalji bre to na Sezam, kad već ne daš žvake! To je PD ili SH,
■■>> koliko me pamćenje služi.
Evo <demo verzije> Expand library-a za slucaj da nije PD ili SH !
clipper.786dejanr,
Da li je neko čuo za nešto što se zove FUNCKYxx.LIB (FUNCKY87, FUNCKY50 itd)?
Šta radi i čemu služi?
clipper.787pjankovic,
Evo rutina za konverziju kodnih rasporeda za CLIPPER.
Sve rutine su date u izvornom obliku i dozvoljena je njihova
izmjena i prilagođavanje potrebama korisnika.
Uključeni su i .OBJ fajlovi za direktno linkovanje u program kao i
program TEST za provjeru da li je sve dobro podešeno.
Tu je i .LNK fajl kao i uzorak datoteke sa definicijom rasporeda.
Svima koji će u svoje programe ugraditi ove funkcije želim puno
uspjeha u radu.
P.S. Kolika je vjerovatnoća da dužina arhive bude izražena u istim ciframa? :)
Je li veća ili manja od vjerovatnoće dobitka prve nagrade u igri "Računara"? :)
ukrasclp.arjclipper.788janko,
> Da li je neko čuo za nešto što se zove FUNCKYxx.LIB
> (FUNCKY87, FUNCKY50 itd)? Šta radi i čemu služi?
FUNCKY
The ultimate CLIPPER developers tool
With FUNCY you can create applications with "look" and "feel"
of the future (...itd...)
- F. includes over 400 fully optimized functions
- Dinamicaly resizable windows
- Mouse driven applications with drop down / tear off menus
- Emulate dBedit with mousable scrollbars and resizable windows
- Read and write arrays to/ from text files
- Nested reads with save and restore gets
- Set 43 or 50 lines mode with different fonts for EGA and VGA
Sve je to proizvod firme dLESKO ASSOCIATES, kojoj je predsednik
Dirk Lesko, autor FUNCKY biblioteke. Firma je iz Nju Džrzija.
Dirk Lesko je držao kurs "Advanced Assembler Routines" na
konferenciji "1990 NANTUCKET DEVELOPER CONFERENCE" u
Australiji.
Jel' dosta? :)
clipper.789toma,
■■>> Jel' dosta? :)
Kako dosta kad nigde ne videh DEMO tih biblioteka prikačen
uz poruku ?
clipper.790fric,
Rešio sam problem pošto sam ponovo pogledao tekst nbatocanina
'Slike u kliperu' u R70.
> Zaglavlje ispišem jednim RUN ('copy logo.prn lpt1 > nul')
>
> I to lepo radi, ali nikako ne mogu da posle toga nateram
> štampač da primi i ispiše ostatak teksta (štampač je
... pa su prvobitno sledile komande
> SET DEVICE TO PRINT
> SET PRINTER TO cLptG
...
E, greška je bila u ovom set printer to cLptG. Kad sam to izbacio,
proradilo je. Zašto i kako - ne znam, ali tako stoje stvari.
clipper.791ratman,
Da li u funkciji DBEDIT() *mora* da se izvrsi korisnicka funkcija ako
hocemo da editujemo slogove? Moze li umesto nje da se stavi neka vrednost?
(Clipper 5.01)
Zasto sledeci program zeza? Naime, polja se edituju kao da string fil sadrzi
sva polja, dakle redom (donja linija), a na ekranu izgleda drukcije:
Nesto, izgleda ne valja u user-funkciji, ali sta?
Ima li neka slicna funkcija koja radi to slicno (BROWSE ne moze da izabere
polja)?
Evo pgm.-a:
use enzymes
fil={'datum','ck','ldh'}
/* baza inace ima polja: no, datum, vreme, ck, ck1,ck2, ldh,ldh1,ast*/
cls
dbedit(10,10,20,70,fil,'dbfunc1')
function dbfunc1
parameters pf1,pf2
if pf1=0
return(1)
elseif pf1=3
return(0)
endif
keyval=lastkey()
do case
case keyval=5 .and. pf1=1
@23,0 say "Pocetak fajla!"
return(1)
case keyval=23 .and. pf1=2
@23,0 say "Kraj fajla!"
return(1)
case keyval=27
return(0)
case keyval=13
temp=fieldname(pf2)
@23,0 say "Nova vrednost"+field(pf2)+"?..." get &temp
read
return(1)
otherwise
@18,0 say " "
return(2)
endcase
Pozdrav,
Dejan
clipper.792dejanr,
>> Jel' dosta? :)
Hvala :) E sad, jel ima neko ko taj FUNCKY koristi i ima neka iskustva
sa njim? Osim jednog Sezamovca koji je sada u Australiji i koji je to
koristio u svojim programima, pa se sada ja patim da shvatim šta
se tu dešava? ;)
clipper.793hercog,
**> Aman bre Hercogu, uzmi lepo bilo kakvo uputstvo za Clipper,
**> pa ćeä videti da to jednostavno nije zdravo äto radiä.
Ma samo sam čoveku objašnjavao da ne sme da koristi sort u istu bazu...
Hercog
clipper.794janko,
> Evo rutina za konverziju kodnih rasporeda za CLIPPER.
žestitam Predragu Jankoviću na objavljivanju ovoga paketa!
Ovo je PRVI paket koji podržava UKRAS u Kliperu!
BTW: Ono što Predrag Janković nije naglasio, rutine su pisane
za Kliper 5.0
Konverzija, vremenski najkritičniji deo, radi se pomoću C
rutine.
Sad imam pitanje: da li je C rutini potrebno da zna dužinu
stringa koji dobije iz Klipera 5.0, ili je string koji dobije
SIGURNO ograničen sa chr(0) ? Ja sam bio ubeđen da je potrebno
da uhvati i dužinu?
Druga stva se tiče rutine za konverziju, kojoj mora da se
pošalje i adresa tablice.
Da li bi se nekako moglo rešiti da se napr. tablica nalazi kao
deo statičkih podataka te C rutine, pa da se tamo prepiše
jednim pozivom druge C rutine, koja bi išla uz juk? (nadam se
da me je neko shvatio? Uputstvo: morate da znate šta je u sorsu
o kome pričamo)
Onda ne bismo imali poziv jedne kliper rutine, pa poziv C
rutine za svaku konverziju?
clipper.795ndragan,
/ Aman bre Hercogu, uzmi lepo bilo kakvo uputstvo za Clipper,
/ pa ćeš videti da to jednostavno nije zdravo što radiš.
Gore od toga - ponekad mu i uspeva. Kako? Misterija...
clipper.796banex,
>> Blinker
Ja imam neki blinker koji ide uz flipper 5.0. Ako je taj
viči da ti pošaljem demo :)
CU! -BANE-
clipper.797hercog,
**> Gore od toga - ponekad mu i uspeva. Kako? Misterija...
A äta mi to uspeva? :))
Hercog
clipper.798janko,
> A äta mi to uspeva? :))
>
> Hercog
Naprimer, da promašiš raspored :)
clipper.799d.petrovic,
> Naprimer, da promašiš raspored :)
Ma to su ovih dana menjali (valjda je to u pitanju) Moj mikro i Latin 2 na
Sezamu pa su mu slovca zbog toga poludela.
clipper.800ciki,
Ho!
Koliko se secam(od kada sam presao na 5.01 ne radim sa DBE.fun.) nije
potrebno navesti funkciju, cak i samo dbedit() cini mi se da ce
listati datoteku preko celog ekrana.
U svakom slucaju probaj pa javi kako ide.
Pozdrav Ciki!
clipper.801dejanr,
>> Ma to su ovih dana menjali (valjda je to u pitanju) Moj mikro i Latin 2 na
>> Sezamu pa su mu slovca zbog toga poludela.
Ništa ta promena nije mogla smetati, tu je samo promenjeno IME kodnog
rasporeda, a svakome su ostala izabrana slova.
Dakle, hercog je zadao sebi pogrešan set code... ili je to u vezi one
krađe passworda
clipper.802hercog,
**> Dakle, hercog je zadao sebi pogrešan set code... ili je to u vezi one
**> krađe passworda
Rekao bih da je ona osoba koja mi je maznula password napravila
haos što se coda tiče...
Hercog
clipper.803vili,
Neko je trazio trig.funkcije za Clipper?
Evo trig & drugih funkcija za Clipper.
sinus(x) - sinus od x (rad)
tang(x) - tangens od x (rad)
cosin(x) - kosinis od x (rad)
ln(x) - prirodni logaritam od x
ln10(x) - dekadni logaritam od x
asinus(x) - arkus sinus od x
acosin(x) - arkus kosinus od x
atang(x) - arkus tangens od x
sinush(x) - hiperbolicki sinus od x
cosinh(x) - hiperbolicki kosinus od x
tangh(x) - hiperbolicki tangens od x
power(x,y) - x na y
rnd() - slucajni broj od 0 do 1
Linkuj sa : RTLINK FI ..,..,..,mat LIB ..,..,LLIBCA
U prilogu: MAT.OBJ.
mat.zipclipper.804nbatocanin,
Ne znam da li ste primetili jednu zgodnu osobinu CLD-a: Call
Stack. žudna mi čuda - daje vam redom spisak aktiviranih procedura,
reći ćete. A da li znate da sa <Tab> možete da menjate aktivan prozor
i da birate prozor za listing, za komande, Watch prozor, pa i prozor
za Call Stack? I to je "čudna mi čuda" - dobijete kursor i možete ga
pomerati po spisku procedura. Uradite to i prijatno ćete se
iznenaditi - pomeranjem se listing menja, tj. dobija se baš onaj deo
listinga sa koga je usledio poziv te funkcije!
clipper.805bstevan,
-->U Clipperu 5.01 ima jedna i po nova naredba za rad sa mrežama i to
-->je USE <baza> SHARED.
Ova tvoja tvrdnja nije istina.Zaviri u pomenutu knjigu ali sad
malo detaljnije.
-->1. Šta's se uvatio Clippera 87 ko pijan plota?
A jel to tebi smeta, šta mu fali, još dobro služi.
-->2. Ko ti uvali onu Alimpijevu knjigu?
Šta joj fali, kupio sam zato da vidim razlike izmedju 5.00 i 5.01
pa da donesem odluku šta je bolje od te dve stvari.Moja odluka je
5.01 zbog niz novih boljih rešenja u 5.01 .
---POZDRAV---
---BSTEVAN---
clipper.806bstevan,
-->Treba da postoji fajl network.prg u kome su date funkcije za sve
osnovne radnje za rad u mreži (APPEND, REPLACE, USE...).
Taj fajl network.prg nemam ako neko ima da li bi mi poslao.
MAKAS, hvala na informaciji !
---POZDRAV---
---BSTEVAN---
clipper.807toma,
Pozdrav Clipper-aši !
Znate li kako u Clipper-ovom ALERT-u napisati dva reda poruke, jedan
ispod drugog ?
Ja znam !
Evo primera:
text:="Ovo je prvi,;a ovo drugi red."
* └> Eto nama separatora !
opcije:={" Super "," Ne valja "}
a:=alert(text,opcije)
to je to.
Pozdrav from Toma.
ps. Ako ste ovo znali a niste rekli onda nije u redu :)))
clipper.809ndragan,
/ A äta mi to uspeva? :))
Ako me sećanje ne vara, počelo je od one priče o sortu u istu datoTETKU
(max, jel sad vidiš na šta sam mislio) iz koje se sortira... pa je
stiglo dovde. žak više ni ne znam da li se odnosilo na tebe -
jednostavno nisam odoleo šlagvortu. Bilo bi neskromno da očekujem sam od
sebe da pamtim trideset lanaca poruka i da kod svakog citata znam kako
je sve počelo. Korisnik SORa u glavi ima skraćenu verziju FIFO steka.
More, samo da smo mi živi i zdravi, a svaki programer ionako mora da
uništi dva mega podataka godišnje :)
clipper.810ndragan,
/ sinus(x) - sinus od x (rad)
Šta, kliper nema ugrađenu trigonometriju? Svašta.
BTW, danas smo imali dobar bag u svom generatoru za foks. Maska koja se
generisala zvala se log.fmt, i generišu se programi log_m, log_u itd, i
pomoćne funkcije log1, log2 itd. Prilikom pozivanja 'get ... valid ...
.and. log1()' javi 'invalid number of parameters'. Kolega koji je radio
se blago zabezeknuo. Stao mu mozak. Posle nekog vremena smo ukapirali
da je foks ono 'log1()' shvatio kao 'log10()' ugrađenu funkciju (foks
dozvoljava skraćivanje naredbi i funkcija do 4 znaka) koja _obavezno_
ima parametre :)
clipper.811janko,
Ako još niste skinuli NDraganove rutine za Ukras na Foxu, koje
se nalaze u SEZAM.3:yu.kod, skinite ih i uporedite sa onime što
biste morali da napišete na Kliperu! Između ostalog, program je
i sjajna reklama za Fox. :)
clipper.812nbatocanin,
Nedavno sam dobio neke diskete sa veoma interesantnim demo
programima firme QBS Software:
SNTXDEMO.COM SubNtx() Demonstration
OVLAYDEM.COM OverLay() Demonstration
SCOMMDEM.EXE SilverComm Demonstration
GFORCE_W.EXE GFORCE world map Demonstration
GFORCE.EXE GFORCE Big demonstration see GFREAD.ME too
FUNVDEMO.EXE FUNCky Summer '87 Demonstration
CFTSDEMO.EXE Fast Text Search Demo
DRSWITCH.EXE Dr Switch ASE demo
SCRIPTON.EXE Scripton printing demo
BLI15DEM.EXE Blinker 1.5 Demonstration
EDDEMO.EXE ED programmer's editor demo
BABELDEM.EXE BabelFish Paradox Data Driver demo
NETLIB.EXE NetLib demonstration
SPANTDEM.EXE Silverpaint Demonstration
Ima veoma lepih stvari: alternativni indeksi, pravljenje rezidentnih
Clipper programa, grafičke biblioteke, komunikacije, editor, itd.
Uglavnom se sve odnosi na Clipper, ali ima i za ostale xBase
proizvode.
Sve skupa ima oko 2.5M, pa ako ima zainteresovanih, mogu poslati
na Sezam.
clipper.813bulaja,
│Sad imam pitanje: da li je C rutini potrebno da zna duzinu
│stringa koji dobije iz Klipera 5.0, ili je string koji dobije
│SIGURNO ogranicen sa chr(0) ? Ja sam bio ubeden da je potrebno
│da uhvati i duzinu?
└───
Clipper ne koristi zero-terminated stringove, zato treba koristiti
funkcije _parclen() i _retclen() za odredjivanje duzine stringa.
clipper.814bulaja,
│Sve skupa ima oko 2.5M, pa ako ima zainteresovanih, mogu poslati
│na Sezam.
└───
Mislim da je preveliko, pogotovo zato sto je rec o obicnim demo (ne
previse korisnim) verzijama. Btw da li je SubNTX isti onaj koji (u
shareware verziji sa kojom se moglo ponesto i uraditi) stoji nakacen
uz neku od poruka u ovoj temi?
clipper.815d.petrovic,
Ă> Ima veoma lepih stvari: alternativni indeksi, pravljenje
Ă> rezidentnih Clipper programa, grafičke biblioteke, komunikacije,
Ă> editor, itd. Uglavnom se sve odnosi na Clipper, ali ima i za ostale
Ă> xBase proizvode.
Šalji nego šta! Samooooo, baš 2,5 M bi bilo mnogo, proberi ti korisnije
stvari od toga i šalji njih.
clipper.816pstojanovic,
Pozdrav,
trebalo mi je zbog specificnih menija, da ugradim neke f-je u kliperu koje
bar za sada kliper nema. Evo svima na uvid, zajedno sa demo-programom, pa
kome treba neka koristi.
Funkcija PEEK(Segment,Offset) -> NUMERIC (BYTE)
Segment,Offset : NUMERIC (WORD)
Vraca vrednost sa adrese odredjene sa SEGMENT:OFFSET
Procedura POKE(Segment,Offset,Value)
Segment,Offset : NUMERIC (WORD)
Value : NUMERIC (BYTE)
Menja vrednost na adresi SEGMENT:OFFSET u VALUE
Procedura PUTCOLOR(y1,x1,y2,x2,Color)
y1,x1,y2,x2,Color : NUMERIC (BYTE)
Menja kolor atribut na prozoru definisanom sa Y1,X1,Y2,X2 u COLOR.
Funkcija GETCLR(Foreground,Background) -> NUMERIC (BYTE)
Foreground,BackGround : NUMERIC (BYTE)
Vraca vrednost kolor atributa za definisanu boju i pozadinu,
zgodno za koriscenje u PUTCOLOR (Color); tj vrsi racunsku
operaciju Background*16+Foreground.
Funkcije AAD, AOR i AXOR (Vrednost1,Vrednost2) -> NUMERIC (BYTE)
Vrednost1,Vrednost2 : NUMERIC (WORD)
Vraca vrednost aritmetickog AND,OR ili XOR-a.
Funkcija SCRCHAR(y,x) -> NUMERIC (BYTE)
y,x : NUMERIC (BYTE)
Vraca vrednost karaktera sa ekrana na koordinatama Y,X.
spex50.arjclipper.817pjankovic,
> Clipper ne koristi zero-terminated stringove, zato treba
> koristiti funkcije _parclen() i _retclen() za odredjivanje
> duzine stringa.
žini mi se da ovo nije baš sasvim tačno. Ali da mi ne bi vjerovali
na riječ evo citata iz knjige
Clipper 5.0, Referentni priručnik, Computer Hit Biblioteka, Sarajevo:
..............................................................................
char *_parc(int br_poz,...)
===========================
Funkcija _parc() se koristi za prikupljanje znakovne vrijednosti
koja je prenesena kao parametar iz Clippera.
unsigned int _parclen(int br_poz)
=================================
Funkcija _parclen() vraća logičku dužinu znakovne vrijednosti koja je
prenesena kao parametar iz Clippera. Bajt koji sadrži null terminator se ne
================================
uključuje u logičku dužinu.
void _retc(char *string)
========================
Funkcija _retc() se koristi za vraćanje znakovne vrijednosti u Clipper.
Kasnije, kada vaša asemblerska ili C funkcija vrati ovu vrijednost, ona će
biti raspoloživa i u Clipper programu. Funkcija _retc() određuje logičku dužinu
znakovne vrijednosti tako što traži znak NULL u stringu. Ako vam je potrebno
===================
vraćanje binarnih podataka koji mogu sadržavati i NULL znak, koristite funkciju
_retclen().
void _retclen(char *string, unsigned int duzina)
================================================
Funkcija _retclen() se koristi za vraćanje znakovne vrijednosti u
Clipper. Kasnije kada vaša C ili asemblerska funkcija vrati ovu vrijednost
u Clipper, ona se može koristiti kao i svaka druga vrijednost.
...
Obzirom na to da funkcija _retclen() omogućava navođenje eksplicitne
logičke dužine znakovne vrijednosti, string koji navodite ne mora na svom
kraju imati NULL i može sadržavati NULL znakove.
...............................................................................
Uostalom, imate izvorni kod mojih funkcija za konverziju kodnih
rasporeda za Clipper pa provjerite kako to izgleda u praksi. :)
clipper.819bulaja,
││Clipper ne koristi zero-terminated stringove, zato treba koristiti
││funkcije _parclen() i _retclen() za odredjivanje duzine stringa.
│└───
│Cini mi se da ovo nije bas sasvim tacno. Ali da mi ne bi vjerovali
│na rijec evo citata iz knjige
└───
Dzabe ti citat (koji btw ne potvrdjuje ni moje ni tvoje misljenje :),
ali Clipper sigurno NE koristi nul-terminated stringove. Najbolje ces to
proveriti tako sto ubacis NUL u sred nekog stringa - Clipper ga tretira
kao i bilo koji drugi znak, tj. ne koristi ga kao terminator.
│Uostalom, imate izvorni kod mojih funkcija za konverziju kodnih
│rasporeda za Clipper pa provjerite kako to izgleda u praksi. :)
└───
Pretpostavljam (nisam jos pogledao) da nece raditi O;> ukoliko im
prosledis string koji sadrzi i NUL.
clipper.820dpaun,
Za one koji će (jednog dana) koristiti Clp za upravljanje tekstualnom
bazom podataka, pojaviće se delikatan problem prilikom kucanja teksta,
odnosno korišćenja MemoEdit() funkcije. Obrada obimnijeg teksta
skopčano je sa vremenom, samim tim duže smo izloženi mogućnosti da
nestane struja i slično. MemoEdit() obrađuje tekst u memoriji, a na
disk (odnosno u Bazu.DBT) snima ga tek kad dobije kod CHR(23) /CtrlW/.
Pošto svako snimanje MemoNiza u DBT bazu ovu povećava za više od
jedne veličine MemoNiza, to DBT raste ko kvasac.
Zadatak je, dakle, omogućiti povremeno spremanje MemoNiza u neku TMP
dadoteku, bez izlaženja iz MemoEdit(). Uz pomoć štapa, kanapa,
korisničke funkcije, dva tastera i malo homoljske mađije - ja sam to
rešio ovako (ovo je samo skica, naravno):
FUNC ObradaMema
USE Baza
Txt := MemoPolje
Kuci := Moze := .F.
SET KEY K_F4 TO SaveTmp
SET KEY K_F3 TO SaveMem
DO WHIL !Kuci
Txt := MemoEdit( Txt, 0,0,23,79,.T.)
nKey := LASTKEY()
DO CASE
CASE (nKey == 23 .AND. Moze)
REPL MemoPolje WITH Txt
Kuci := .T.
OTERW
ENDC
ENDDO
FUNC SaveTmp
KEYBOARD CHR(23)
MEMOWRIT( Putanja + 'DosIme.Tmp', Txt )
Moze := .F.
FUNC SaveMem
KEYBOARD CHR(23)
Moze := .T.
/*
Ako u toku rada želimo do tada otkucani tekst da sačuvamo u nekom
katalogu specificiranim pod 'Putanja', a u fajlu 'DosIme.Tmp' -
pritisnemo DVA PUTA(!) F4 ... Kad se rad završi, editor napuštamo sa F3
umesto standardnim CtrlW.
Ovo rešenje, braćo, izgleda mi dobro: mogu da čuvam tekst u toku rada bez
bojazni od nestanka struje, i bez straha da će mi DBT narasti ko Avala.
Nisu mi jasne samo dve stvari:
1. Zašto se mora taster F4 pritisnuti 2 puta (ako se pritisne jednom,
zapamti samo pretposlednje stanje!), //probao sam da 'dupliram'
chr(23) u proceduri, i opet ništa), i
3. Da li je sve ovo moglo i drugačije, a?
PS. Ako se ispostavi da nije, dajte čoveku aplauz ...
*/
dPaun.Tmp
clipper.821dvokshi,
> 1. Zašto se mora taster F4 pritisnuti 2 puta (ako se
> pritisne jednom, zapamti samo pretposlednje stanje!),
> //probao sam da 'dupliram' chr(23) u proceduri, i opet
To se desava zato sto Memoedit kopira promenljivu u neku svoju
memoriju i nju editira. Kad se editiranje zavrsi sa CTRL-W
promenljiva se zamenjuje novim tekstom.
Kad se pozove SaveTmp (u toku editiranja teksta) promenljiva
TXT jos ima stari tekst, a zamenjuje se novim tek posto SaveTmp
vrati kontrolu Memoedit -u, i CHR(23) izaziva izlazak iz
Memoedit -a.
Zato sledeci pritisak na F4 snima tacan tekst.
> 3. Da li je sve ovo moglo i drugačije, a?
Pa da probam
FUNC ObradaMema
USE Baza
Txt := MemoPolje
Kuci := Moze := .F.
DO WHIL !Kuci
Txt := MemoEdit( Txt, 0,0,23,79,.T.,'savemem')
if lastkey()=23
if Moze
replace memopolje with txt
kuci = .t.
else
MEMOWRIT( Putanja + 'DosIme.Tmp', Txt )
endif
endif
ENDDO
return NIL
FUNC Savemem
local key := lastkey()
do case
case key = K_F4
moze = .f.
keyboard chr(23)
case key = K_F3
moze = .t.
keyboard chr(23)
case key = K_CTRL_W
moze = .t.
enddo
return 0
Nisam testirao ali mislim da bi to bilo to. U grubim crtama.
d.v.
clipper.822pjankovic,
>> Clipper ne koristi zero-terminated stringove, zato treba
>> koristiti funkcije _parclen() i _retclen() za
>> odredjivanje duzine stringa.
> Dzabe ti citat (koji btw ne potvrdjuje ni moje ni tvoje
> misljenje :), ali Clipper sigurno NE koristi
> nul-terminated stringove. Najbolje ces to proveriti tako
> sto ubacis NUL u sred nekog stringa - Clipper ga tretira
> kao i bilo koji drugi znak, tj. ne koristi ga kao
> terminator.
Ja nisam htio da demantujem tvoje mišljenje da Clipper ne koristi
NULL terminated stringove (sa kojim se, uzgred rečeno, slažem).
Kada se takav string prenese u C funkcijom _parc() on ima NULL terminator.
Drugačiji je slučaj sa stringovima u Clipperu koji sadrže NULL. Oni se u C
prenose funkcijom _parclen() koja kao argument pored dotičnog stringa prima
i njegovu dužinu, a sve to da ne bi morala da je sama određuje.
> Uostalom, imate izvorni kod mojih funkcija za konverziju
> kodnih rasporeda za Clipper pa provjerite kako to izgleda
> u praksi. :)
> Pretpostavljam (nisam jos pogledao) da nece raditi O;>
> ukoliko im prosledis string koji sadrzi i NUL.
Pravo da ti kažem, nisam probao sa takvim stringovima, ali dijelim
tvoju pretpostavku. Pitanje je samo koliko Clipper programa na ekran ili
na štampač šalje stringove koji u sebi sadrže NULL.
clipper.823bulaja,
│Pitanje je samo koliko Clipper programa na ekran ili
│na stampac salje stringove koji u sebi sadrze NULL.
└───
Na ekran tesko, ali za stampac postoji dosta kontrolnih kodova koji
sadrze i NUL. Naravno, nije nikakav problem njih slati odvojeno
(nekonvertovano) od ostalog teksta.
clipper.824nbatocanin,
> Btw da li je SubNTX isti onaj koji (u shareware verziji sa kojom se
> moglo ponesto i uraditi) stoji nakacen uz neku od poruka u ovoj temi?
Ne znam šta ima u porukama. Ja imam v1.20, nisam detaljnije
isprobavao. Dat je OBJ, a ništa ne piše o ograničenjima.
clipper.825andrade,
Imam jedno pitanje za Clipper programere: proletos sam radio
jednu aplikaciju na Clipper-u 5.0 i, s obzirom da nisam od onih
koji poznaju sve njegove detalje, ovo mi je oduzelo dosta
vremena pa sam na kraju i odustao od resavanja i ostavio to
takvo kakvo je.
Radi se o biblioteci funkcija OMENU za rad sa menu-ima. Ona
kontrolise ESC taster i ako ga korisnik pritisne - odustaje od
zapocete akcije, sve do najnizeg nivoa na meniju. Problem je u tome
sto kod odustajanja od akcije, na nivou MenuBar-a, ESC osim prekida
zapocete procedure startuje poslednju koriscenu opciju MenuBar-a
pre te prekinute. Pokusavao sam razne stvari da bih ovo sprecio i
nije mi uspelo. Ako neko zna sta je trebalo uraditi neka pomaze!
Thanks!
clipper.826ppekovic,
>> Problem je u tome
>> sto kod odustajanja od akcije, na nivou MenuBar-a, ESC osim
>> prekida zapocete procedure startuje poslednju koriscenu
>> opciju MenuBar-a pre te prekinute.
Pošalji deo koda gde pozivaš procedure menubar-a.
Paya
clipper.827dpaun,
>> Nisam testirao ali mislim da bi to bilo to. U grubim crtama.
Hvala na objašnjenju i ideji. Kad uspem da ideju provedem kroz moju
mamutsku 'glavnu petlju' i monstruoznu korisničku funkciju, javiću.
Ostalima savetujem da ideju negde kovertiraju, jer kad se tržište zasiti
knjigovodstveno-baknarsko-maloprivredničko-itakodaljističko
artikulisanih softverskih proizvoda, doći će na red, nadam se, i
zadovoljenje potreba za skladištenje umnih proizvoda u vidu obimnijih
tekstualnih zapisa. Onda će problem na koji sam ukazao morati da se
stavi na dnevni red ...
Sada bih postavio sledeće pitanje koje se logički nameće:
ako MemoEdit kopira 'svoj' niz u taj novi niz, kako tom prilikom stvar
stoji sa memorijom? Dali taj novi niz, dok se ne smesti na disk, zauzima
novu količinu radne memorije, što će reći da se mora predvideti i
mogućnost da memorija može da 'presuši' u nekim trenucima ...
otPozdrav,
dPaun.
clipper.828dpaun,
Problem:
- Kada u GET var PICT "!" naiđu YU slova, ostaju 'mala', sem ako,
blagovremeno nije uključen CapsLock.
Pitanje:
- Postoji li neko 'gotovo' rešenje za ovo, ili se mora napisati posebna
funkcija koja će pročešljati uneti string u potrazi za malim YU
kodovima, pa secati, zamenjivati, krpiti, lepiti ...
dPaun.Cap
clipper.829bulaja,
│Problem:
│ - Kada u GET var PICT "!" naidu YU slova, ostaju 'mala', sem ako,
│ blagovremeno nije ukljucen CapsLock.
│Pitanje:
│ - Postoji li neko 'gotovo' resenje za ovo, ili se mora napisati posebna
│ funkcija koja ce procesljati uneti string u potrazi za malim YU
│ kodovima, pa secati, zamenjivati, krpiti, lepiti ...
└────
Preko PICTURE ces tesko (nikako :) uspeti da napravis neki YuUpper, ali
mozes npr. pre READ da stavis
SETKEY ( <malo slovo>, { || KEYBOARD <veliko slovo>} )
i tako redom za svih pet nasih malih slova. Posle READ samo ponisti ovo
dodeljivanje funkcije tasterima.
clipper.830ndragan,
/ biste morali da napišete na Kliperu! Između ostalog, program je
/ i sjajna reklama za Fox. :)
Očekujem sanduk šampanjca od Foks Softvera za ovo, čim prođe embargo :).
Obećavam da ću izjaviti da je '92 bila jako dobra godina.
clipper.831kanda,
>> Problem:
>> - Kada u GET var PICT "!" naiđu YU slova, ostaju 'mala', sem ako,
>> blagovremeno nije uključen CapsLock.
>>
>> Pitanje:
>> - Postoji li neko 'gotovo' rešenje za ovo, ili se mora napisati
>> posebna funkcija koja će pročešljati uneti string u potrazi za malim
>> YU kodovima, pa secati, zamenjivati, krpiti, lepiti ...
Svojevremeno sam radio nesto u smislu teranja klipera da radi sa nasim
slovima -> u biblioteci CLIPPER.LIB postoji modul NATION u kome su
koncentrisane 'nacionalne specificnosti' ; prepravkom ovoga se postize
da kliper smatra YU slova za *slova* a ne za 'kuke i kvake', da pravilno
poredi, sortira i indeksira po nasoj abecedi, da koristi nasa imena dana
i meseci itd.
Problem je u tome sto je resenje ocigledno prilicno prljavo - iako sve
radi kako treba, nesto mi se nikako ne da da to definitivno ugradim u
CLIPPER.LIB. Ako ima sezamovaca koji bi hteli da sve to testiraju i
ukazu na eventualne bagove, nek se prijave ovde.
Usput, probajte ? VERSION(1).
Kod mene daje "Clipper (R) 5.01 Rev. 1.29 ASCII".
clipper.832bulaja,
**** new file ****
\ibmpc\program\
clipgr21.zip (150 Kb)
Clip-Graf 2.1, graficka biblioteka za Clipper 5.x/S87
U direktorijumu je ranije vec bila verzija 1.2. Promene u odnosu na nju su:
1.2A Tried to prevent a user from making filled rectangle go off the screen.
When this happens, the computer would lockup.
06/29/90
1.2B Change of address in the opening screen.
Added g_col(), g_row(), g_xpos(), g_ypos() to get the text row col
or pixel position of the present cursor location.
01/01/91
2.0 Added read and write PCX formatted image files capability.
Added additional routines to check video equipment and status.
03/01/91
2.1 Fixed some problems with PCX information gathering functions.
Separated the libraries for S87 and Ver: 5.0.
Added screen dump utility function that supports Epson,
Toshiba, HP laser and other printers.
clipper.833janko,
> / biste morali da napišete na Kliperu! Između ostalog,
> program je / i sjajna reklama za Fox. :)
>
> Očekujem sanduk šampanjca od Foks Softvera za ovo, čim
> prođe embargo :). Obećavam da ću izjaviti da je '92 bila
> jako dobra godina.
:)
Dok nam ne prođe embargo, da li si primetio da si postao član
grupe UkrasPro (Ukras programeri) ? :) Jesi li pročitao priču
pisanu pre nego što si učlanjen?
clipper.838nbatocanin,
> Ako još niste skinuli NDraganove rutine za Ukras na Foxu,
> koje se nalaze u SEZAM.3:yu.kod, skinite ih i uporedite sa
> onime što biste morali da napišete na Kliperu! Između
> ostalog, program je i sjajna reklama za Fox. :)
Zaista mi nije jasno na osnovu čega to kažeš. Pregledao sam ovaj
program i čini mi se da sve osim zaista zgodne funkcije ChrTran
postoji i u Clipper-u.
clipper.839andrade,
*> Posalji deo koda gde pozivas procedure menubar-a.
Evo, saljem ti source OMENU.PRG i dva demo programa koji ilustruju
mogucnosti ovog menu sistema. Negde u programu se, osim odustajanja od
tekuce operacije izvrsava prethodno pozvana, sto meni nikako nije
odgovaralo, ali nisam to uspeo da ispravim. Ako te ne mrzi, pokusaj
da pronadjes sta treba ispraviti, ali nemoj mnogo da se maltretiras oko
toga.
Hvala ti!
omenu.zipclipper.840janko,
> Zaista mi nije jasno na osnovu čega to kažeš. Pregledao
> sam ovaj program i čini mi se da sve osim zaista zgodne
> funkcije ChrTran postoji i u Clipper-u.
Izvini na mom nedovoljnom poznavanju 5.0 verzije, ali Summer 87
nema ni fgets, (učitavanje linije iz tekst fajla). I to bi
moralo da se malo 'izmišlja.' U ovom konkretnom slučaju i ono
'učitavanje parčeta' što ima Kliper bi radilo posao, ali...
A nepostojanje ChrTran, je, inače, primoravalo na korišćenje
C-a ili mašinca u Kliper programu, samo da bi bilo razumno
efikasno korišćenje rutine, a već tako nešto je dovoljno da me
'zaboli glava.' Što opet ne znači da ne koristim par takvih
rutina koje sam sam napisao, ali... Za ovu primenu već samo
postojanje ChrTran je dovoljno značajno...
Priznajem da ne poznajem dobro Kliper 5.0, ni približno kao ti,
niti Fox približno kao NDragan. Ali, K.5.0 me i dalje nije
ubedio. O Fox-u samo čujem, kada nešto treba, 'ima i to.' A o
K.5.0 'to nema, ali, ima klase koje to nisu i tako sjajan novi
način za zamenu dbedit.'
clipper.841ndragan,
/ kodovima, pa secati, zamenjivati, krpiti, lepiti ...
Ma treba to samo prelemiti. Ako ne upali, veći čekić.
clipper.842dkalaba,
Da li neko zna šta znači kada se pod UNIX-om pokrene
VP/Xi i startuje program (konkretno pisan u Clipper-u)
a na ekranu se pojavi: redir 1107 comitt ?
clipper.843kanda,
>> ubedio. O Fox-u samo čujem, kada nešto treba, 'ima i to.' A o
>> K.5.0 'to nema, ali, ima klase koje to nisu i tako sjajan novi
>> način za zamenu dbedit.'
I ja se slazem sa ovim, uz par primedbi ;) :
"" K.5.0 'to nema (1)(2), ali, ima klase koje to nisu (3) i tako sjajan novi
"" način za zamenu dbedit (4).'
(1) ali se moze napisati u C-u za <4 minuta
(2) sto u foxu ne moze
(3) i koje fox nema
(4) sto fox nema
clipper.844bulaja,
U \IBMPC grani otvoren je poseban CLIPPER direktorijum.
U njega je prebacen deo datoteka koje su bile u PROGRAM
direktorijumu, a bice jos nekih novih stvari ovih dana.
clipper.845ndragan,
/ Dok nam ne prođe embargo, da li si primetio da si postao član
/ grupe UkrasPro (Ukras programeri) ? :) Jesi li pročitao priču
Izem ti SOR - ne videh nijednu poruku iz grupe. Pročitaću ovih dana.
clipper.846bulaja,
**** new file ****
\ibmpc\clipper\
expand2.zip (94 Kb)
Clipper 5.01 Expand Lib v2.0, biblioteka raznih funkcija
Spisak funkcija koje se nalaze u ovoj biblioteci je prikacen uz poruku.
clipper.847gristic,
Pisci (obično) prepoznaju svoje tekstove. A šta je sa programerima?
Da li i oni mogu da prepoznaju sopstveni program nakon nekoliko godina?
Pred vama je izvod iz jednog programčića od pre par godinica, a pisao ga
je jedan od eminentnijih korisnika Sezama. Ako prepozna čik nek' se javi,
neću mu ništa. ;) (u programu nisam nigde video (c) Copyright ili nešto
slično, pa pretpostavljam da ovo nije kažnjivo O;)
.
.
.
do pootvaraj
*
* sam glavni meni
*
do while .t.
clear screen
č 1, 6 to 3, 72 double
č 2, 24 say " APLIKACIJA FINANSIJSKOG POSLOVANJA"
č 4,6 to 12,52
č 5,8 prompt "1 RAD SA MATIžNIM DATOTEKAMA ";
message 'unos, pregled i ispravke podataka o zadrugarima';
+ ' i dobavljačima'
č 6,8 prompt "2 OPŠTA UPUTSTVA ZA RAD ";
message 'kratko uputstvo za operatera'
č 7,8 prompt "3 KNJIčENJE ";
message 'unos promena'
č 8,8 prompt "4 KONTROLE, PREGLEDI, KARTICE ";
message 'razni pregledi i izveštaji'
č 9,8 prompt "5 REZERVNE KOPIJE DATOTEKA ";
message ' snimanje i užitavanje rezervnih kopija '
č 10,8 prompt '6 REĐE IZVOĐENE OPERACIJE ';
message 'godišnje obrade, ažuriranje matičnih datoteka itd'
č 11,8 prompt "0 povratak u operativni sistem "
menu to g_meni
*
* kad budeš dodavao opcije povećaj ovo modulo
*
g_meni = g_meni % 7
dalje = .t.
izb = ' '
r1 = g_meni + 5
do case
case g_meni= 0
close all
return
case g_meni = 1
g1_meni = 1
.
.
.
*
* izmena tekućeg sloga
*
set index to xmatbr,prezime
clear screen
if .not. un_mbr()
č 23, 1 say 'nema ga'
wait wtmsg to kelner
else
do zad
clear gets
if da_ne("da se menja (da/ne)?",'n')
do zad
read
replace z->prez with yuupper(z->prez)
č 23, 1 say "ok. izmenjeno" clear
wait wtmsg to kelner
izmene = .t.
endif
endif
.
.
.
*******************************************************************************
procedure knal
clear screen
store 0 to rbr, kzar,uc,ul,kdug,kpot,oldnal, brst,zbirvd, ndug, npot
store .f. to zdug, zpot, ddug, dpot
locate for &filteriska
set filter to &filteriska
go top
.
.
.
wait "nema više"+wtmsg to kelner
set filter to
return
*
*******************************************************************************
.
.
.
case polje = 'KELNER' .or. polje = ''
sta = 'žEKANJE'
htxt = ;
'kad se pojavi poruka ' + wtmsg + ' u donjem ';
+ crlf + 'redu, znači da je operacija gotova; program ';
+ crlf + 'čeka da operater pogleda rezultate. čekanje ';
+ crlf + 'se prekida pritiskom na bilo koji taster na ';
+ crlf + 'tastaturi ili mišu'
otherwise
htxt = "pomoćni tekst za ovo polje joć nije napisan";
+ crlf + 'rutina:' + rutina + ' polje: ' + polje
endcase
.
.
.
*:EOF
Ima li "sumnjivog liceta" ? ;)
Napomena: namera nije da se neko diskredituje, već *isključivo* i *samo*
ono što piše na početku poruke.
clipper.848bulaja,
│Spisak funkcija koje se nalaze u ovoj biblioteci je prikacen uz poruku.
└───
Whoops, zaboravih da okacim file :). Here it is...
expand52.lstclipper.849nboskovic,
*> Izem ti SOR - ne videh nijednu poruku iz grupe. Pročitaću
*> ovih dana.
Pa ako nije bilo poruka od kad si učlanjen nije ni čudo da
ih nisi video u SOR-u.
(c) klap
nikola
clipper.850albor,
Možda nekom zatreba...
Pozdrav, Boris
clipindt.zipclipper.851ppekovic,
>> Možda nekom zatreba...
>> Pozdrav, Boris
>> ----------------------------------------------- 5.850 ---
>> ** Uz poruku 'clipindt.zip' (12987 bytes)
Uz poruku je program za "nazubljivanje" clipper programa. Takođe, arhiva
sadrži i makroe za dBase koji pozivaju program za nazubljivanje za tekuci .prg.
Program je pisao moderator clipper konferencije na BIX-u irae. Sam je u malom
doc-u napomenuo da program možda neće raditi kako treba sa linijama dužim od
255 karaktera-
Paya
clipper.852andrejl,
>│ Napomena: namera nije da se neko diskredituje, već
>│ *isključivo* i *samo* ono što piše na početku poruke.
Jednom prilikom gledam neki moj "istorijski" program, a
da prethodno nisam primetio da je moj u gomili nekih
sourceva i komentarišem: "koje gluposti, čemu ovo služi" i
sl. :), a kad sam shvatio da je program moj sve je dobilo
neki novi smisao :)
bye, andrejl
clipper.853toma,
■■>> Uz poruku je program za "nazubljivanje" clipper programa.
E, a uz ovu poruku je utility koji nazubljuje sve .prg u
tekućem dir-u i ta samo po potrebi. Program je, naravno,
rađen na Clipper-u (5.01), a autor sam lično ja!
Pozdrav from Toma.
tab.zipclipper.854ndragan,
/ "" način za zamenu dbedit (4).'
/ (4) sto fox nema
A čemu služi DBEdit? Jel' to nešto kao brauz?
/ (1) ali se moze napisati u C-u za <4 minuta
I onda bih morao da učim C, pa da nabacim neki kompatibilan (?) C
kompajler, i da dobijenu stvar obaška testiram, i da ne zaboravim da je
ubacim u mejkfajl ili gde to već ide, i kad prođem kroz to sve onda se
zaista svodi na manje od 4 minuta, što je i dalje mnooogo više od 10
sekundi (koliko mi u foksu treba dok skoknem do helpa da nađem sintaksu
za ređe korišćene naredbe), i plus dodatnih pet minuta za testiranje.
Zanima me, zaista, koliko kliperašima treba dok ubace novu rutinu
(recimo, dodavanje jedne kontrole datuma u valid) pa dok istestiraju
kako radi? Onako, u minutima.
clipper.855toma,
■■>> Zanima me, zaista, koliko kliperašima treba dok ubace novu rutinu
■■>> (recimo, dodavanje jedne kontrole datuma u valid) pa dok istestiraju
■■>> kako radi? Onako, u minutima.
Sve zavisi od dužine programa. Recimo, program od nekih 400
linija, kompajliranje + linkovanje = 21 sec (286/16) i onda
na to dodaš onih tvojih 5 za test :)))
Pozdrav from Toma.
ps. Naravno, linkovanje sa Rtlink-om i bez ram-diska.
clipper.856vili,
Postoji li nacin da se .LIB pretvori u .PLL?
clipper.857nbatocanin,
> Summer 87 nema ni fgets
5.0 ima FGets i slične rutine date kao demo program (FILEIO.PRG).
> Ali, K.5.0 me i dalje nije ubedio. O Fox-u samo čujem, kada nešto
> treba, 'ima i to.' A o K.5.0 'to nema, ali, ima klase koje to nisu i
> tako sjajan novi način za zamenu dbedit.'
Tu postoji više stvari:
Prvo, koncepcije Clipper-a i Fox-a su totalno različite. Fox ide
na zaokružen proizvod visokih performansi koji sadrži sve što će
korisniku zatrebati. Tu je i integrisana okolina, i sistem menija i
još dosta dobrih stvari. Uzmeš i imaš sve što ti treba i to vrlo
brzo. Odlična je i prenosivost na druge sisteme - očekuje se FoxPro
za Unix. Clipper ima potpuno drugi pristup: ne teži se da se sve
napravi na jednom mestu, ali se ide na maksimalnu otvorenost
arhitekture. To znači da se ide na *maksimalnu* mogućnost
prilagođavanja. I to je glavna prednost Clippera. On (možda) u startu
ima manje funkcija, ali se može proširiti na daleko više načina. Može se
zameniti skoro sve, pa čak i drajver za pristup datotekama. Jeste li
čuli za SIx drajver? To omogućava korišćenje FoxPro 2 kompatibilnih
datoteka. Za korisnički interfejs neću ni da pominjem - toga ima
toliko da skoro guši.
Drugo, može se raspravljati o onome što se dobija kao proizvod. Tu
ne vidim razliku između doplate za Fox LAN i kupovine Nantucket Tools
II ili neke slične biblioteke - a toga ima kao pleve. Takođe nije neka
razlika ako neki proizvod ima neku funkciju više ili manje - napisati
takvu funkciju, ubaciti u biblioteku i više nema razlike između te i
"fabričkih" funkcija. Naravno, dobro je ako to već postoji, ali je
zaista mala razlika da bi se nešto na osnovu toga zaključilo.
Najvažnije za korisnike, šta uzeti. Posao ćete uraditi i na jednom
i na drugom. Priče da može postojati neka značajna razlika između
napisanih programa je obična glupost. Prava istina je da su ovo
konkuretski proizvodi (mada različitih koncepcija) i da će uvek biti
"tu negde". Fox ima lepih prednosti: prenosivost, brzina, itd.
Clipper ima odličan jezik, mnogo više dodataka, itd. A šta će se
izabrati, zaista je stvar ukusa.
clipper.858kanda,
>> A čemu služi DBEdit? Jel' to nešto kao brauz?
Pa, ako brauz sluzi za pregled i menjanje baze, onda je dbedit isto sto
i brauz. U kliperu je stvar generalizovana, uveden je TBrowse koji
sluzi za pregled bilo cega sto se moze organizovati u redove i kolone
- najcesce baze podataka, ali i nizovi, matrice, tekstualne datoteke
(npr. izvestaji)...
>> / (1) ali se moze napisati u C-u za <4 minuta
>>
>> I onda bih morao da učim C, pa da nabacim neki kompatibilan (?) C
>> kompajler, i da dobijenu stvar obaška testiram, i da ne zaboravim da
>> je ubacim u mejkfajl ili gde to već ide, i kad prođem kroz to sve
>> onda se zaista svodi na manje od 4 minuta, što je i dalje mnooogo
>> više od 10 sekundi (koliko mi u foksu treba dok skoknem do helpa da
>> nađem sintaksu za ređe korišćene naredbe), i plus dodatnih pet minuta
>> za testiranje.
Ovde je rec o principu. Fox ima puno funkcija, i to je sjajno, ali
sigurno nema *SVE* koje ti trebaju. E kad ti zatreba neka koje nema,
mozes da je pises u Fox-u... sto je ponekad neprihvatljivo jer je
rezultat prespor, a moze biti i nemoguce... sta ces onda ?
A za kliper ima BRDO biblioteka raznih korisnih i nekorisnih
funkcija (i na sezamu ima par komada). Gotovo svaka ima Norton Guide,
pa kad ti nesto zafali pritisnes sift-f1, pa potrazis... pa ako nema
ni tamo, a znas C ili asembler sednes pa napises... Dakle, ne moras
da ODUSTANES od necega samo zato sto to osnovni jezik, tj. kliper
ne omogucuje.
>> Zanima me, zaista, koliko kliperašima treba dok ubace novu rutinu
>> (recimo, dodavanje jedne kontrole datuma u valid) pa dok istestiraju
>> kako radi? Onako, u minutima.
Pa evo, bas sam sada merio : prevodjenje + linkovanje = 11 sekundi na
386/25. U minutima ? 11/60 - 0.17 minuta ili tu negde.
clipper.859nbatocanin,
> A čemu služi DBEdit? Jel' to nešto kao brauz?
Da. Ova funkcija omogućava da osim definisanja kolona, prozora itd.
korisnik definiše svoju funkciju koja se izvršava uvek kad korisnik
pritisne neki taster. Time se postiže svašta. A TBrowse objekti su
nešto još generalnije i moćnije.
> I onda bih morao da učim C, pa da nabacim neki
> kompatibilan (?) C kompajler, i da dobijenu stvar obaška
> testiram, i da ne zaboravim da je ubacim u mejkfajl ili
> gde to već ide, i kad prođem kroz to sve onda se zaista
> svodi na manje od 4 minuta, što je i dalje mnooogo više od
> 10 sekundi (koliko mi u foksu treba dok skoknem do helpa
> da nađem sintaksu za ređe korišćene naredbe), i plus
> dodatnih pet minuta za testiranje.
Možeš i da nabaviš tu funkciju iz neke biblioteke. Za Clipper je
toliko stvari napisano da je vrlo verovatno da sve što ti zatreba već
negde postoji. Što se tiče procedure, kada je napišeš, otkucaš jedno
LIB i time tvoja procedura postaje ista kao fabrička - nema razlike.
A šta ćeš kad ti u Fox-u zatreba nešto što tu nema?
> Zanima me, zaista, koliko kliperašima treba dok ubace novu
> rutinu (recimo, dodavanje jedne kontrole datuma u valid)
> pa dok istestiraju kako radi? Onako, u minutima.
Ne previše, zavisi od mašine. Otprilike, bez kucanja teksta, oko
30-40s. Najveci deo je RTLink, a sa Blinkerom je oko 15s.
clipper.860janko,
> Zanima me, zaista, koliko kliperašima treba dok ubace novu
> rutinu (recimo, dodavanje jedne kontrole datuma u valid)
> pa dok istestiraju kako radi? Onako, u minutima.
:) Pogotovu 'na licu mesta,' gde je recimo XT sa 80ms diskom ;)
Samo linkovanje se meri minuuutima. Kada sam ispravljao program
na jednom XT-u, 'ladno sam stizao da tokom
prevođenja/linkovanja 1) odem do kisoska sa klopom 2) popijem
kaficu 3) odem do WC-a 4) Pročitam nešto... itd. itd. ;)
clipper.861d.petrovic,
Ă> Samo linkovanje se meri minuuutima. Kada sam ispravljao program
Ă> na jednom XT-u, 'ladno sam stizao da tokom
Ă> prevođenja/linkovanja 1) odem do kisoska sa klopom 2) popijem
Ă> kaficu 3) odem do WC-a 4) Pročitam nešto... itd. itd. ;)
Jedva sam se i odlučio da prokomentarišem !!! Pazi ! Ja imam 286/16 i
nisam baš presrećan brzinom (cca 15 sek prosečno programče od oko 5000 linija),
ali se i ne žalim. To što si ti u tom momentu bio mazohistički nastrojen ili
nisi imao mogućnosti (vremena, auto, stanuješ daleko od inkriminisanog mesta)
pa si sve to radio na XT-u ne znači da je to baš tako presporo. Uostalom za
fazu testiranja možeš da koristiš .PLL biblioteke ili neki drugi linker i to
onda kod mene traje oko 7-8 sek (prevođenje + linkovanje).
Pozdrav, Dejan
clipper.862d.petrovic,
Ă> Postoji li nacin da se .LIB pretvori u .PLL?
Daaaaaa. Ja trenutno to ne radim, ali imaš negde u ovoj temi od 01.08. pa
naovamo gomilu mojih pitanja, odgovora, mojih zaključaka...
Pozdrav, Dejan
clipper.863janko,
> Najvažnije za korisnike, šta uzeti. Posao ćete uraditi i
> na jednom i na drugom. Priče da može postojati neka
> značajna razlika između napisanih programa je obična
> glupost. Prava istina je da su ovo konkuretski proizvodi
> (mada različitih koncepcija) i da će uvek biti "tu negde".
> Fox ima lepih prednosti: prenosivost, brzina, itd.
Spolja značajna razlika između programa se može smatrati da ne
postoji, (svi moraju da imaju unos, obradu i prikaz, zar ne?)
ali kada gledaš programe IZNUTRA... I na to unutra valjda možeš
da primenjuješ neke estetske kriterijume... slažem se sa tobom
da je to stvar ukusa svakog programera posebno... ako pogledaš,
i ja sam tako napisao onu poruku, samo kao lični stav...
Naravno, drago mi je što sam čuo tvoje mišljenje. Ti si svakako
veoma kompetentan da govoriš o Kliperu, više nego ja (što sam
već pomenuo, nadam se?)
clipper.864dejanr,
>> Zanima me, zaista, koliko kliperašima treba dok ubace novu rutinu
>> (recimo, dodavanje jedne kontrole datuma u valid) pa dok istestiraju
>> kako radi? Onako, u minutima.
Ako pod testiranje misliš kompajliranje+linkovanje, 10-tak sekundi
za program osrednje veličine (zavisi, normalno, i od brzine računara,
diska itd, valjda je na XT-u "malo" više od toga ;). Ako misliš na neki
logički test, onda sve zavisi koliko ta izmena zadire u dubine programa
i, ako ništa drugo, koliko je meni u kome je vršena "daleko" od osnovnog
menija.
clipper.865gristic,
*> case polje = 'KELNER' .or. polje = ''
*> sta = 'žEKANJE'
*> htxt = ;
Gos'n ndragan, ždraknite poruku 5.847. ;)
1988 ? 1989 ? Inspiracija u kafani (na lap top salveti) ? ;)
clipper.866kvelkovski,
>> Postoji li nacin da se .LIB pretvori u .PLL?
Pogledaj u PLL\BASE50.LNK datoteci. Tamo se kreira BASE50.PLL koji je
sastavljen od CLIPPER.LIB, EXTEND.LIB ...
Kupe
clipper.867kvelkovski,
>> zameniti skoro sve, pa cak i drajver za pristup datotekama. Jeste li
>> culi za SIx drajver? To omogucava koriscenje FoxPro 2 kompatibilnih
>> datoteka. Za korisnicki interfejs necu ni da pominjem - toga ima
Koristim Clipper 5.01 vec poduzhe ali nisam nashao nachin da ukljuchim
.NDX indekse. Ima li uopshte nachina?
Kupe
P.S. Na mrezhi nisam uopshte radio pa me interesuje isplati li se (i jeli
moguce) da se napravi driver za onaj Novell-ov BTrieve (ili kako se vec
zove) ...
clipper.868nbatocanin,
> ali kada gledaš programe IZNUTRA... I na to unutra valjda
> možeš da primenjuješ neke estetske kriterijume...
Ako sudiš po jeziku (eleganciji, izražajnim mogućnostima, ...), onda
ćeš teško naći nešto bolje od Clipper-a. Da ne bude subjektivno,
nedavno sam čitao neki uporedni pregled u kome se između ostalog
bodovao i jezik DBMS proizvoda i sećam se da je Clipper bio daleko
iznad ostalih u toj kategoriji.
clipper.869ndragan,
/ jedan od eminentnijih korisnika Sezama. Ako prepozna čik nek' se javi,
Ko, jel' ja? Prisutan i na broju, ser. A za onu 'eminenciju' nemaš piće
- to što sam lajav još ne znači mnogo :).
/ Ima li "sumnjivog liceta" ? ;)
/ Napomena: namera nije da se neko diskredituje, već *isključivo* i
/ *samo* ono što piše na početku poruke.
Nasmejao si me do suza. Imam ja taj običaj da promenljivim dajem
blesava imena. Recimo, ako u Foksu koristim niske udarce (fread(),
fopen() i ostale niske funkcije), broj drške (handle) obično smeštam u
promenljivu Fridrih ili GFH. Tek da vidiš na šta je ličila 'zaštićena
verzija' sorsa, gde su sve promenljive bile (search/replace) zamenjene
šiframa tipa 'zx80','atari','quit_it','listaj', a one koje su imale
smislena imena imale su sasvim deseto značenje u odnosu na stvarno...
Baš sam neki dan pričao da ću možda i otići u penziju a da neću
prestati da ser*m u sorsovima. Imam jedan biser u sistemskoj rutini
koja poziva izradu/pregled/štampu izveštaja:
č lin+ 5,kol+1 PROMPT " uzano " MESSAGE "nabudži štampač na uzana slova"
...koji je dosad postao legenda među operaterima kod naših mušterija.
Među mojim drugarima se vodi nezvanični konkurs za nejblesavije ime
(promenljive, baze, programa...). Programeri su inače najveći kumovi -
krštavamo svakog dana na veliko. Zasad vode URSDSR (ukupan radni staž do
stupanja u RO), VRANA (indikator vrste analitike), INDIANA (indikator
prenosa u analitiku), OKKORAL.PRG (obračun), DIHTUNG.PRG (upozorenje da
će se baza isprazniti), KLISTA.PRG (spisak obračunatih kamata),
SUMPOR.DBF (suma poreza na jednoj fakturi). Pozivam Zezamovce da se
priključe.
BTW, odakle ti taj sors, trebalo je da bude zaštićen :). Ex, jednom
napišem nešto u kliperu i posle četiri godine me sustigne... pravi leš
iz ormana. Stidim se po čitavom telu (što sam radio u Kliperu :). I jesu
li ikad počeli da ga koriste? Nismo se rastali u nekim lepim odnosima
(mušterija i ja), al' se nismo ni posvađali (jedino nisu platili
poslednjih 30%). Odakle ti to, leba ti?
Bue_ Ndragan
P.S.
/ neću mu ništa. ;) (u programu nisam nigde video (c) Copyright ili
/ nešto slično, pa pretpostavljam da ovo nije kažnjivo O;)
Imaš pogrešnu verziju - pisala su (u zvaničnoj) naša imena (jedan drugar
i ja) i čak je bilo predviđeno da u slučaju da se nekakav čeksum naših
imena ne složi, program pobriše sve iza desetog sloga u matičnoj
datoteci pa onda istu spakuje i preindeksira.
Inače, nije kažnjivo al' će te košta - dođeš mi kriglu piva za ovo :).
Program takođe više nema nikakvu komercijalnu vrednost, postoji (jel
može malo reklame za sve ovo?) mnooogo bolja verzija aplikacije
stambenih zadruga rađena u Foks Prou gde sve šljaka kako bog zapoveda.
P.P.S.
/ replace z->prez with yuupper(z->prez)
=======
Ukrasovcima skrećem pažnju na ovaj detalj. Pisano '88 u leto.
clipper.870neman,
> Koristim Clipper 5.01 vec poduzhe ali nisam nashao nachin
> da ukljuchim .NDX indekse. Ima li uopshte nachina?
A zašto da koristiš .NDX ???
Zbog DBASEa ?????
Pa za te rabote imaš DBU kao pomagalo !
clipper.871janko,
> Ako sudiš po jeziku (eleganciji, izražajnim mogućnostima,
>ć ...), onda eš teško naći nešto bolje od Clipper-a. Da ne
>ć bude subjektivno,
E, kad smo već zašli u te vode, voleo bih da mi objasniš
opravdanost uvođenja onoga što se u Kliperu zove 'CODE BLOCKS'
u bilo kom jeziku koji se, za razliku od Klipera, pošteno
iskompajlira, a ne pretvara u interni interpreter...
Moguće da živim u zabludi, ali ti 'CODE BLOCKS' mi se nimalo
nisu svideli, kada sam ih video. Iskreno bih voleo da mi neko
pokaže da to nije samo 'zakrpa' pogrešno odabranog pravca
razvoja Klipera.
Zatim, ta igranja sa preprocesorom su, ipak, samo igranja sa
preprocesorom. I C ima preprocesor, ali se JAKO umereno
koristi, (u C++-u još umerenije ;) što mislim da je dobro --
ako ti sam pišeš i održavaš svoje programe, baš te briga, ali
kada bi radio u većem timu, baš me zanima kako bi ti se sviđalo
kada bi svako izmišljao svoju sintaksu za elementarne
naredbe... E, da, mana C preprocesora je što ne radi proveru
tipa parametara koji su prosleđeni markrou u toku prevođenja.
Kako to radi Kliper 5.0?
Hoćeš li mi objasniti i šta je to što Kliperov jezik čini
elegantnim? Ja sam uvek cenio estetske vrednosti i duboko ću ga
poštovati, ako shvatim tu eleganciju?
Ne bih želeo da me doživljavaš kao nekog 'mrzitelja Klipera.'
Nisam nikada napisao nijednu aplikaciju na 5.0 verziji, i ne
poznajem je tako kao ti, pa je moguće da sam nešto pogrešno
shvatio. Meni se učinilo da je Kliper sa tim 5.0 doneo masu
stvari koje mi ne trebaju, a praktično, nijednu koja mi je
trebala. I sve vreme čekam, možda ću konačno čuti o nečemu što
je stvarno jaaako korisno, ali nikako da čujem...
clipper.872bulaja,
│Ne previse, zavisi od masine. Otprilike, bez kucanja teksta,
│oko 30-40s. Najveci deo je RTLink, a sa Blinkerom je oko 15s.
└───
Ja nemam Blinker :), ali zato imam neki update za verziju 1.50.
To je neki exe koji patch-uje blinker.exe iz verzije 1.50, i
tako napravi v1.51. Patch nosi datum 16.01.92, pa ne znam da li
se ovde u medjuvremenu pojavila neka novija verzija. Btw, imam
cak i uputstvo za Blinker (.DOC file, 240Kb texta), al' i dalje
nemam Blinker :).
clipper.873vkrstonosic,
>> Najvaznije za korisnike, sta uzeti. Posao cete uraditi i na jednom
>> i na drugom. Price da moze postojati neka znacajna razlika izmedu
Ima cini mi se jos jedna stvar koja je plus kod Clippera. Mnogo
vise ljudi ga koristi (kod nas). Tako da sam ja za prve decije
bolesti, okretao par telefona i od prijatelja dobijao sve informacije
koje mi trebaju. Vrlo je zgodno kad ti neko kaze i da negde postoji
bug, pa da ne moras sam da dolazis do tog saznanja, to moze da boli :)
clipper.874vili,
Problem sa memo poljima.
-----------------------
Ako u memo polju ima vise od 480 karaktera posle svakog:
replace 'memo' with memoedit('memo',...)
fajl .DBT se povecava za 1024 bajta iako nista nije dodato u memo-u.
Ako u memo-u ima, recimo, 2567 bajtova .DBT se povecava za 3072
bajta, i tako unedogled sve dok taj .DBT postane tako veliki da
jednog dana postane veci i od samog Clipper-ovog .EXE-a.
Daklem, *.DBT fajlovi se povecavaju za ceo broj kB (ili za 512 bajta)
ako se koristi funkcija memoedit(). Isto se desava i iz DBU-a, ako se
izvrsi ctrl-W pri svakom ulasku u memo polje.
Iz PCTools-a se moze videti da se svaki put u .DBT-u ponavlja sadrzaj
memo-a pri svakom izlasku u memoedit-a.
Ovo se ne desava ako u memo-u ima manje od 480 karaktera.
E, sad, postoji li objasnjenje za ovo? Da li je ovo Clipper-ov 'bug'
ili sta?.
PS. Otkrio moj kolega sa posla Pedja, ciji je .DBT dobio neslucene
razmere od oko 105kB !, a u memo-u samo 800 karaktera!.
Vili
clipper.875nbatocanin,
> Koristim Clipper 5.01 vec poduzhe ali nisam nashao nachin
> da ukljuchim .NDX indekse. Ima li uopshte nachina?
Ne. Obećavaju da će biti ponovo u sledećoj verziji.
clipper.876d.petrovic,
Ă>> Koristim Clipper 5.01 vec poduzhe ali nisam nashao nachin
Ă>> da ukljuchim .NDX indekse. Ima li uopshte nachina?
Ă>
Ă> Ne. Obećavaju da će biti ponovo u sledećoj verziji.
Ajd, da ga bude. Ali šta li će nam sad pa opet to? Meni ni bazu Dbase ne
može kako treba uvek da pročita, nego se zaglupi. Nedavno sam ispravljao na
licu mesta jednu bazu kad su zajeboravili šifru (koje li muke ljudi božji, sve
što sam zbudžio preračunati peške ;(( ) i nisam moga da pročitam bazu iz
Dbase-a, a DBU nisam imao.
clipper.877dpaun,
Braćo Clipperaši i mile sestre Clipperašice, u vezi ranije istaknutog
problema podizanja YU slova (poruka 828), ja sam nešto petljao sa
asemblerskom idejom nBatocanina iz jednog broja Računara, i ta stvar
radi samo u slučaju 1, i to kada se, dok smo u polju Niz1, pritisne
donja kursorska strelica (što je mnogo efikasnije i elegantnije nego da
ganjamo kursor do yu slova, uključimo zaboravljeni CapsLock, ispravimo
grešku, pozajmimo pilulu za sniženje pritiska, pošaljemo zabrinutu
sekretaricu po čašu s vodom, etc ....)
Pošto sam ja kao programer naivac tutu za klipper a tutuban za
asembler, molim da se neko prihvati daljeg majstorisanja oko ovog
problema. Može se od njega napraviti čak i BajtLP.
Kako, dakle, urediti ovu stvar, da se i Niz1 i Niz2, pa sve tamo do
NizaEntog, pošalje jednoj istoj funkciji DigniGa() a ona da radi ono
što joj ovo sexy ime kaže.
dPaun.Yu
č x,1 get Niz1 pict "č!" valid DigniGa(Niz1) && Slučaj 1
č y,1 get Niz2 pict "č!" valid Yupper(Niz2) && Slučaj 2
read
...
FUNC DigniGa()
Niz1 := Yupper(Niz1)
return .t.
*********
* Asebmlerska paremija
* prema manuskriptu brata nBatocanina
* iz Računara
**********
INCLUDE EXTENDA.INC
DATASEG
CLpublic <YUPPER>
CLstatic <string smallyu "žčšćđ">
CLstatic <string bigyu "螊ĆĐ">
CLfunc char YUPPER <char str>
CLcode
PUSH ES
PUSH BP
PUSH SI
JMP begin
r_str DB 80 DUP(0)
begin: LES SI, str
MOV BX, 0
cikl: MOV AL, ES:ŠSI+BXĆ
MOV r_strŠBXĆ, AL
OR AL, AL
JZ kraj
CMP AL, 'a'
JL yu_letter
SUB BYTE PTR r_strŠBXĆ, ' '
JMP next_char
yu_letter:
MOV BP,0
tab: MOV AL, BYTE PTR smallyuŠBPĆ
OR AL, AL
JZ next_char
CMP BYTE PTR r_strŠBXĆ, AL
JNE next
MOV AL, BYTE PTR bigyuŠBPĆ
MOV BYTE PTR r_strŠBXĆ, AL
next: INC BP
JMP tab
next_char:
INC BX
JMP cikl
kraj: MOV AX, SEG r_str
MOV BX, OFFSET r_str
POP SI
POP BP
POP ES
Clret AX BX
END
clipper.878ndragan,
/ Sve zavisi od dužine programa. Recimo, program od nekih 400
/ linija, kompajliranje + linkovanje = 21 sec (286/16) i onda
Daa... otkad nisam pisao program u komadu... ex, jednom pređeš na foks,
i onda više nemaš osećaj. Moja mera nisu linije, nego kilobajt zipa.
Normalna aplikacija ima 100 - 350K, od čega 70% napravi generator, 20%
je prepisano iz slične ili iz verzije za drugog korisnika, i 10% je
tiha patnja na licetu mesta, kako neko ovde reče. Štos je ipak u tome
da FoxPro nema linker (osim za mamutski samostalni .EXE u 2.00),
kompajlira u hodu samo sveže fajlove i ne moram uopšte da izlazim iz
njega. Foks i kliper su zaista postali različiti po koncepciji.
clipper.879ndragan,
/ rezultat prespor, a moze biti i nemoguce... sta ces onda ?
Ubaci se parče rađeno u asembleru, u .obj formatu - učita se negde gore
i poziva sa CALL sa sve prenosom parametara. Tako smo svojevremeno
simulirali Scroll naredbu dok se nije pojavila.
/ 386/25. U minutima ? 11/60 - 0.17 minuta ili tu negde.
Izgradilo se to, zaista. Pamtim neke tamo stvari iz '88 - ono je bio
blagi užas.
clipper.880ndragan,
/ A šta ćeš kad ti u Fox-u zatreba nešto što tu nema?
Još nisam našao. Možda 'index while' da napravi delimični indeks dok je
aktivan drugi indeks... onako 'seek... copy while... index' ali u
jednom komadu :).
Na stranu želje puste - ostalo ima, a ako nešto primetimo da fali, uvek
nađemo rešenje. Možda ne uvek istog dana, ali ga nađemo, i to u foksu.
clipper.881ndragan,
/ Gos'n ndragan, ždraknite poruku 5.847. ;)
Ne izdrža srce vam junačko, a? Dva dana ne stignem na Sezam, i odmah se
smatra da nemam petlju da se oglasim?
/ 1988 ? 1989 ? Inspiracija u kafani (na lap top salveti) ? ;)
Ne, ali od lep top modela preporučujem kelnericu.
/*> case polje = 'KELNER' .or. polje = ''
/*> sta = 'žEKANJE'
"He waits while you wait." Ulysses, James Joyce.
clipper.882neman,
> Ne bih želeo da me doživljavaš kao nekog 'mrzitelja
> Klipera.' Nisam nikada napisao nijednu aplikaciju na 5.0
==============================================
> verziji, i ne poznajem je tako kao ti, pa je moguće da sam
========================================
> nešto pogrešno shvatio. Meni se učinilo da je Kliper sa
> tim 5.0 doneo masu stvari koje mi ne trebaju, a praktično,
> nijednu koja mi je trebala. I sve vreme čekam, možda ću
> konačno čuti o nečemu što
========================
Pljuvati po nečemu o čemu nemaš pojma u najmanju ruku nije korektno.
clipper.883janko,
> Pljuvati po nečemu o čemu nemaš pojma u najmanju ruku nije
> korektno.
Ako to smatraš za pljuvanje. ;) I ako smatraš da baš nemam
pojma. To što nisam pisao u Kliperu 5.0 ne znači da nemam
iskustva u ovim poslovima. I ne znači da nemam svoj stav o
tome, šta sam ja želeo da vidim da Kliper koji dolazi posle 87
ima, a šta je on doneo. Po meni, prašinu u oči... Ja to zovem
iznošenje stava, i pišem ono što si citirao (da nisam napisao
nijednu aplikaciju na Kliperu 5.0) upravo zato da bih se
ogradio od eventualnih osuda da sam tvrdio nešto što nije
tačno, time što preciziram da nemam previše iskustva, i možda
tvrdim nešto što nije tačno. Ipak, za ovo što sam tvrdio, još
uvek nisam dobio kontraargumente. A voleo bih da ih čujem... To
što nisam napisao nijednu aplikaciju na 5.0 ne znači ni da ne
bih umeo, niti da ne razumem koncepte koje koristi 5.0. O
pomenutim konceptima (i mom nezadovoljstvu njima) sam upravo i
pisao. I sasvim fino mogu da razgovaram i sa tobom o njima, ako
si na to spreman... :) Šta će ti diskusija u kojoj svi ISTO
misle? Samo iz sukoba mišljenja je moguće da proistekne nešto
novo...
clipper.884janko,
Neko je ovde pominjao Blinker linker. čeleo bih da čujem
iskustva nekog ko je radio sa njim. Kako se ponaša sa Kliper
5.0 specifičnostima (.PLL datoteke, DLL koncept, podrška Kliper
5.0 virtuelnoj memoriji i te stvari...)
Ili, da sažmem pitanje: može li POTPUNO zameniti RTLINK? I
koliko je brži od njega, ako je odgovor na prvo pitanje da?
clipper.885dpaun,
>> Ako u memo polju ima vise od 480 karaktera posle svakog:
>> replace 'memo' with memoedit('memo',...)
>> fajl .DBT se povecava za 1024 bajta iako nista nije dodato u
>> memo-u.
Ne razumem ovo, brate Vili! Radim dve-tri godine sa tekstualnim bazama,
tj. pretežno se rvem sa memo i DBT, i ovo nisam zapazio (tj. da se DBT
povećava iako ništa nije dodato u memo-u). Pre nego što zinem bilo šta,
molio bih te - ako druga braća ne skontaju o čemu je reč - da dopuniš,
odnosno preciznije opišeš uočenu pojavu. Možda i sa delom listinga u
kome se nalazi operacija sa memo poljem. Memo i DBT su zato i uvedeni
da "rastu" samo kada se nešto u memo polje unese. Kada se vrši izmena
već unetog teksta, Clipper ne prepisuje novi sadržaj preko starog, već
stari označi da je spreman za brisanje a novi doda na kraj dbt baze.
Zato DBT raste ko da je u metastazi. Suvišan tekst, samim tim i svođenje
DBT-a na njenu pravu veličinu, vrši se povremenim kopiranjem cele baze.
Najbolje je ovo kopiranje ugraditi u meni kao opciju, a procedura bi
izgledala ovako:
RENAME Baza.dbf TO Tmp.dbf
REBAME Baza.dbt TO Tmp.dbt
SET DELETE ON
USE Tmp
COPY TO Baza.dbf
CLOSE Tmp
ERASE Tmp.dbf
ERASE Tmp.dbt
>> .DBT postane tako veliki da jednog dana postane veci i od samog
>> Clipper-ovog .EXE-a.
DBT, da je živ i zdrav, to treba i da radi. Znam za testove sa DBT
veličine 20 MB; kod mene je trenutno negde oko 2 MB, i sve savršeno
radi.
>> Ovo se ne desava ako u memo-u ima manje od 480 karaktera.
Clipper za memo rezerviše blokove veličine 512 bajta. Tu negde može biti
odgovor, mada mi nije jasno da li govoriš o dodavanju novih slogova u
bazu, ili o izmenama unetih slogova. žim se nešto unosi u memo polje,
baza mora i da raste.
>> E, sad, postoji li objasnjenje za ovo? Da li je ovo Clipper-ov
>> 'bug' ili sta?.
Ovako na uvce, mislim da je problem u nepotrebnom ulaženju u memoedit.
Možda ček i o nepotrebnom korišćenju memo polja, ako je reč o kraćim
tekstovima. Ovaj problem je najbolje razrađen u knjizi:
Rick SPENCE: CLIPPER 5, Voduč za programere,
Mikro knjiga, Beograd, 1991, s.161 i dalje
Tamo su navedeni slučajevi kada je najoptimalnije koristii memo, a kad
je, pak, bolje "dugačka znakovna obeležja" kako ih on naziva. Ima i
listing programa za testiranje ove dileme.
Pozdrav,
dPaun
clipper.886gristic,
*> Ko, jel' ja? Prisutan i na broju, ser. A za onu 'eminenciju' nemaš piće
Na mestu voljno. Oslabili ti refleksi... ;)
*> BTW, odakle ti taj sors, trebalo je da bude zaštićen :). Ex, jednom
*> napišem nešto u kliperu i posle četiri godine me sustigne... pravi leš
*> iz ormana...
Izbunario iz arhive. Pravio sam Veliko_Spremanje_Mojih_1000_Disketa (redovno
svakih 125 godina po jedno) i ovo se pojavilo. Prvo sam i ja bio zbunjen, a
onda mi je sinulo: pre 2-3 godine dok još nisam imao mašinu pao mi je u šake XT
Šnajder 1620 (1640?) inkriminisane zadruge (nedokučivi su putevi kompjuterski).
Kao svaki savesni programer redovno sam pravio bekape, zipove, arcove, lhove,
žvrnjčšćove i tako ostade zakopano negde (...štooo ne voliiim da brišem arhive,
a tek što me mrziii da ih pregledaaam...tako da *sve* imam *najmanje* duplo ;<.
Tako mi je, npr., trebalo *godinu* dana da istrebim sa disketa onaj virus...
kako se ono zvaše... ah da, Tetris! (a onda instaliram DESQview/X (QEMM 6.03)
i ono DVX TETRIS !!!!). Što se zaštite tiče obožav(ao s)am da "razbijam" tuđe
zaštite i da posle toga obrišem programe, ali kod ovog *nisam* primetio nikakvu
zaštitu.
*> Stidim se po čitavom telu (što sam radio u Kliperu :).
I treba. Pored (već tada) živog Foxa... ;)
*> I jesu
*> li ikad počeli da ga koriste? Nismo se rastali u nekim lepim odnosima
*> (mušterija i ja), al' se nismo ni posvađali (jedino nisu platili
*> poslednjih 30%). Odakle ti to, leba ti?
Jok. Bio im komplikovan korisnički interfejs. Nije hteo sam da radi,
moralo je i da se razmišlja koja je razlika između strelice gore i
strelice dole, a i dobili žuljeve na laktovima. ;)
*> Imaš pogrešnu verziju - pisala su (u zvaničnoj) naša imena (jedan drugar
*> i ja) i čak je bilo predviđeno da u slučaju da se nekakav čeksum naših
*> imena ne složi, program pobriše sve iza desetog sloga u matičnoj
*> datoteci pa onda istu spakuje i preindeksira.
Misliš na ovo? O:)
č 2, 7 SAY "APLIKACIJA FINANSIJSKOG POSLOVANJA STAMBENE ZADRUGE"
č 3, 7 SAY '"***********" *************'
č 6, 35 SAY "AUTOR: Dragan Nedeljković, dipl. mat."
č 7, 24 SAY "STRUžNI SARADNIK: Branislav Grmuša, prof. inf."
č 9, 44 SAY 'nosilac posla: RO "CEMIK" NOVI SAD'
.
.
.
(z.doc)
OPIS APLIKACIJE FINANSIJSKOG POSLOVANJA
RAĐENE ZA STAMBENU ZADRUGU *************
***************
Autor: Dragan Nedeljković
Opis aplikacije
Aplikacija za praćenje finansikskog poslovanja do-
bavljača i zadrugara stambene zadruge ************* iz **-
*********** pisa=na je u bazi podataka Dbase II i prevedena
kompajlerom Clipper na računaru Amstrad/Schneider PC1640.
.
.
.
(Zvezdice sam ja stavio zbog konjspiracije ;)
*> č lin+ 5,kol+1 PROMPT " uzano " MESSAGE "nabudži štampač na uzana slova"
;)))) A ovako:
č lin+ 5,kol+1 PROMPT " uzano " MESSAGE "'Ajde spiči bre taj tvoj bedni
drndavi *ebeni štampač na ta prokleto tesna slova" (širina 79) :)))
*> Inače, nije kažnjivo al' će te košta - dođeš mi kriglu piva za ovo :).
Važi 'al neće me košta. Imam, hik, vezu u Jelen pivari. ;o)
*> / replace z->prez with yuupper(z->prez)
*> =======
*> Ukrasovcima skrećem pažnju na ovaj detalj. Pisano '88 u leto.
15.07/09.09.1988. Brrrr, mraaaaačni programerski srednji vek ;)
Za ovo (što sam izdvojio i taj red) *ti* častiš (Krigla ? Jel' to ono maaalo,
maleeecko stakleno sa drškom ? ;o))
*> Program takođe više nema nikakvu komercijalnu vrednost, postoji (jel
*> može malo reklame za sve ovo?) mnooogo bolja verzija aplikacije
*> stambenih zadruga rađena u Foks Prou gde sve šljaka kako bog zapoveda.
Eh, da sam ga našao prošle godine prodao bih im ponovo. ;) (šalim se)
Ovako sam se namučio u C-u da povežem Btrieve i Isam (ne pitaj zašto
*oba* !!!) i da štampam ćirilična trebovanja. Sada ću im (pro)dati novu
verziju u FoxPlusu pod Xenixom (FoxPro za *NIX? Eh, pusti snovi...).
Pozdrav
Goran
P.S.
Što se pića tiče: Odžaci ili Bečkerek (ili oba ;))?
P.P.S.
Jesi probao/uspeo da ukrstiš FoxPro 2.0 i Paradox Engine (štosa radi)?
P.P.P.S.
I gos'n MBP-cobol-guru jsalai ima(o je) iskustva sa njima (zadrugom). ;)
Naravno i
njegovi (stariji) cob sorsevi su tu negde (pretpostavljam). ;)))
clipper.887nbatocanin,
Najnovija verzija Blinkera je 2.0 i po rečima Rik Spensa to je
najbolji proizvod za Clipper.
clipper.888nbatocanin,
> E, kad smo već zašli u te vode, voleo bih da mi objasniš
> opravdanost uvođenja onoga što se u Kliperu zove 'CODE
> BLOCKS'
Probaću da što kraće objasnim osnovnu ideju i prednosti. Kodni blok
je, u stvari, funkcija. E sad, zašto se uvodi još nešto pored
standardnih funkcija? Kodni blokovi su *tip podataka*, što znači da
nad njima možete vršiti i obradu. Doduše, ne previše složenu, ali
dovoljnu: kodni blok možeš dodeliti promenljivoj, proslediti kao
parametar proceduri, vratiti kao rezultat ili izvršiti.
Zašto je to odlično? Zato što na taj način možete proceduri,
funkciji ili objektu proslediti osim podataka i *akciju*, tj. možete
reći ne samo "ovo je toliko, ovo toliko, ...", nego možete da kažete
"ovo uradi ovako". Mislim da teorijske posledice ovoga ne treba
naglašavati. Sećaš se mog primera za niz koji bi se teško deklarisao
u strogo tipiziranom jeziku? E, zamisli sad niz (slog, u stvari) u
kome jedan element kazuje *kako* nešto treba uraditi. Primena? Pa,
objekti su, u stvari, takvi nizovi: slog koji sadrži obične podatke i
akcije.
Zašto je zgodno procedurama prosleđivati i akcije? Uzmimo jedan
jednostavan primer: funkcija za sortiranje niza:
ASort (aArray)
vraća sortiran niz. Ali *kako* da sortira? Pa, najjednostavnije je reći:
"OVAKO"! Time obezbeđuješ visoku univerzalnost programa.
ASort (aArray, { |x,y| x >= y } )
Može se reći da se to isto postiže makroima: prosledi se string koji
predstavlja izraz za poređenje, pa se sa &cString računa. Štos je što
sa kodnim blokovima prevodilac u trenutku prevođenja zna koju akciju
treba izvršiti, pa se može napraviti prevod, dok se makro uvek mora
interpretirati iznova.
Drugo, moglo se rešiti kao u C-u: pokazivač na funkciju, pa bi se
onda pisalo "uradi onako, kako je zadato u funkciji PPP()". Onda bi se
pisalo nešto ovako:
ASort (aArray, PPP() )
Pogledajte koliko se ovim smanjuje preglednost programa: ko hoće da
zna šta radi program, mora tražiti funkcija PPP u listingu. Ali, ima i
nešto drugo. Rešenje pomoću funkcija bi saseklo mogućnost realizacije
nekih komandi. Na primer, kada se napiše
LOCATE FOR x > 4
pretprocesor to prevede u
DBLocate ( { || x > 4 }, ... )
a u slučaju funkcija bi se morala generisati posebna funkcija za
računanje izraza X > 4. Napominjem da je glupo, a ne realizovati
LOCATE preko neke funkcije.
> Zatim, ta igranja sa preprocesorom su, ipak, samo igranja
> sa preprocesorom. I C ima preprocesor, ali se JAKO umereno
> koristi
Ovde jok. Pretprocesor predstavlja pluća Clipper-a 5.0. On je
dosta moćniji od C-ovog i to ne bez razloga: skoro sve standardne
naredbe su rešene kao pozivi funkcija maskirani pretprocesorom.
> -- ako ti sam pišeš i održavaš svoje programe, baš te
> briga, ali kada bi radio u većem timu, baš me zanima kako
> bi ti se sviđalo kada bi svako izmišljao svoju sintaksu za
> elementarne naredbe...
Da, ali šta ako dobiješ/napraviš novu biblioteku funkcija? Pa moraš
da koristiš nešto ovako:
CrtajMaskuBre (Id, Row, Col, Top, Bottom, Shadow, Blink, Cvrc)
Mislim da nikog ne treba ubeđivati da se ovo daleko lakše pamti kao
CrtajMaskuBre Pos 1,2 SHADOW BLINK
Ključne reči se daleko lakše pamte, a ne moraš sve ni navoditi. Može
se i zameniti redosled parametara - ključna reč je dovoljna da se
odredi šta je to.
> E, da, mana C preprocesora je što ne radi proveru tipa parametara
> koji su prosleđeni markrou u toku prevođenja. Kako to radi Kliper
> 5.0?
U standardnim makroima radi isto kao C - nema nikakve provere.
Samo, mislim da je to standardno za pretprocesore: njihov jedini
tip podataka je TEXT. žak i u strogo tipiziranim jezicima (Clipper to
naravno nije) bi pretprocesor koji razlikuje tipove morao da radi
najpliće posle leksičke analize, a čini mi se (odoka) da to ne bi bilo baš
tako jednostavno.
Direktive #translate se mogu uslovno nazvati nekim makroima. One
umereno prepoznaju tipove, ali pružaju daleko moćnije preslikavanje
ulaznih parametara od makroa. One su potpuno nova tema.
> Hoćeš li mi objasniti i šta je to što Kliperov jezik čini
> elegantnim? Ja sam uvek cenio estetske vrednosti i duboko
> ću ga poštovati, ako shvatim tu eleganciju?
Pa evo, na stranu lični ukus. Gornje stvari (i mnoge druge) su
mogle biti rešene na 1000 drugih načina. Ja vidim lepotu u ovim
rešenjima. Krajnje čistim principima je omogućena izvanredno
jednostavna nadgradnja svih sistema: od jezika pa do kontrole
tastature. I pored velike balasti zvane kompatibilnost.
Mislim da bi se mogao napraviti sasvim dobar klasičan programski
jezik na osnovu koncepcija jezika u Clipper-u: ako se izbace delovi
koji se odnose na rad sa bazom, moglo bi se značajno ubrzati
računanje izraza i uopšte poboljšati prevod. Kodni blokovi bi mogli
da se stvarno prevode (nema pristupanja poljima), i ne vidim razloga
da se tako ne napravi jezik sasvim blizak po performansama C-u. žak,
čudi me što to još nije urađeno. A C-u svakako ne bi smetalo nešto
poput kodnih blokova.
Saznao sam da se Clipper grana u dva proizvoda, Jedan će se zvati
Aspen i biće to Win proizvod brzinskih performansi oko 60% od C-a.
Druga grana je za tekst programere i ide na dalje usavršavanje jezika
i potpunu objektnu implementaciju.
> Ne bih želeo da me doživljavaš kao nekog 'mrzitelja Klipera.'
Ma ne! Zar misliš da bi se onda raspravljao s tobom? Ja sam uvek za
čist i koristan razgovor. A možda će ovo nekom i koristiti?
P.S. Svojevremeno sam se raspitao i kazaše mi da se kaže
*pretprocesor*, a ne *preprocesor*.
clipper.889nbatocanin,
> Ako u memo polju ima vise od 480 karaktera posle svakog:
> replace 'memo' with memoedit('memo',...)
Može i samo REPLACE memo WITH Space(512) ;( Sistem je jedan od
glupljih.
clipper.890bulaja,
│Neko je ovde pominjao Blinker linker. Zeleo bih
│da cujem iskustva nekog ko je radio sa njim.
└───
Ako te toliko interesuju mnoge stvari vezane za Clipper 5, zasto ne
uzmes i malo da ga koristis? Ovo pitam zbog tvojih poruka gde se toliko
interesujes za Clipper 5, a tvrdis da ga uopste nisi koristio. Verovatno
ce ti mnoge stvari tako biti jasnije, ovako izgleda kao da proucavas
samo teoriju Clippera na papiru :).
clipper.891janko,
> Ako te toliko interesuju mnoge stvari vezane za Clipper 5,
> zasto ne uzmes i malo da ga koristis? Ovo pitam zbog
> tvojih poruka gde se toliko
Zato što mi je lakše da pročitam neko iskustvo o Blinkeru, nego
da ga jurim program po gradu, eksperimentišem i zaključim da
nisam morao ni da se trudim. Pitanje je bilo vrlo konkretno:
> Kako se ponaša sa
> Kliper 5.0 specifičnostima (.PLL datoteke, DLL koncept,
> podrška Kliper 5.0 virtuelnoj memoriji i te stvari...)
>
> Ili, da sažmem pitanje: može li POTPUNO zameniti RTLINK? I
> koliko je brži od njega, ako je odgovor na prvo pitanje
> da?
Dakle, ako nema sve ono gore, ne vredi ga koristiti! Onda ne
vredi ni da se trudim da ga nabavljam i zezam se sa njime...
Sa 5.0 sam baš eksperimentisao (nisam samo čitao ;) ali me nije
tada ubedio da mi je mnogo koristan... ;) Seti se još i
nepouzdanosi 5.00 verzije itd...
clipper.892janko,
> Drugo, moglo se rešiti kao u C-u: pokazivač na funkciju,
> pa bi se onda pisalo "uradi onako, kako je zadato u
> funkciji PPP()". Onda bi se pisalo nešto ovako:
>
> ASort (aArray, PPP() )
Jeste, tu si u pravu, lepše je da je sve na jednom mestu, u
ovakvoj primeni. Priznajem da je lepše sa kodnim blokovima...
> LOCATE FOR x > 4
>
> pretprocesor to prevede u
>
> DBLocate ( š đđ x > 4 ć, ... )
>
> a u slučaju funkcija bi se morala generisati posebna
> funkcija za računanje izraza X > 4. Napominjem da je
> glupo, a ne realizovati
Pa, i ovako se generiše funkcija, samo je sakrivena u istu
liniju?
Ili se blokovi koda ne prevode kao funkcije?
> CrtajMaskuBre Pos 1,2 SHADOW BLINK
>
> Ključne reči se daleko lakše pamte, a ne moraš sve ni
> navoditi. Može se i zameniti redosled parametara - ključna
> reč je dovoljna da se odredi šta je to.
Odrastao sam na jezicima koji imaju jako malo ključnih reči,
ukupno, pa na ovakve koncepte nisam navikao. Da ne govorim o
tome da mi ovo miriše da moram dva puta da testiram funkciju --
prvi put kada je pišem i realizujem, a drugi put i da li sam
napisao dobro 'izmišljenu' naredbu. Problem je i kada razvijaš
više aplikacija -- obično se trudiš, tokom razvoja, da ne pišeš
sto puta isto. Održavanje funkcija je relativno lako -- ako si
je ispravio, a koristiš je u više programa, bez problema ćeš je
nadalje koristiti u svima. Ali ako menjaš ove 'translacije,'
šta onda? Kako ti to radiš? Da li uz svaku aplikaciju vučeš
posebno sve fajlove sa translacijama ili...?
Drugi problem je još fundamentalniji -- translacije treba da ti
obezbede da ako ONO U ŠTA SE TRANSLIRA tvoj program budu
promenili, ti i dalje možeš da ga prevodiš bez brige.
Ako počneš i sam da daješ 'niske udarce,' programi ti još više
postaju zavisni od verzije kompajlera.
> Direktive #translate se mogu uslovno nazvati nekim
> makroima. One umereno prepoznaju tipove, ali pružaju
> daleko moćnije preslikavanje ulaznih parametara od makroa.
> One su potpuno nova tema.
To sam te i pitao: koliko su robusne? Da li time što uvodiš
translate trikove i strukturno slabiš program (u smislu da ti
je više dozvoljeno nego pre, a ne proverava se u toku
prevođenja?) Zato sam te i pitao, jer ti imaš ISKUSTVA. U onim
tekstovima koje su pisali tipovi koji su ga pravili, oni neće
da iznose ružne stvari, nego ga samo hvale...
> jednostavna nadgradnja svih sistema: od jezika pa do
> kontrole tastature. I pored velike balasti zvane
> kompatibilnost. Mislim da bi se mogao napraviti sasvim
> dobar klasičan programski jezik na osnovu koncepcija
> jezika u Clipper-u: ako se izbace delovi koji se odnose na
> rad sa bazom, moglo bi se značajno ubrzati računanje
> izraza i uopšte poboljšati prevod. Kodni blokovi bi mogli
> da se stvarno prevode (nema pristupanja poljima), i ne
> vidim razloga da se tako ne napravi jezik sasvim blizak po
> performansama C-u. žak,
Šta to znači 'kodni blokovi bi mogli stvarno da se prevode?'
Zar se sada ne prevode? U čemu je onda trik?
Što se tiče sintakse, danas je prilično lako realizovati jezik
sa kakvom god hoćeš sintaksom, ako se ona može napisati kao
BNF. Krajem šezdesetih pa do početka osamdesetih svi su
izmišljali jezike -- to je bio glavni sport. Ali se, hvala
Bogu, iz toga svega nešto iskristalisalo... jedna od tekovina
tadašnjih bura je upravo saznanje da kompajler treba da štiti
programera od njega samog. Neki jezici su preterivali takvim
idejama (Virtovi) a neki ih zanemarivali (stari C). Na kraju se
ipak došlo do neke 'razumne sredine.' Ta razumna sredina je da
jezik treba da ima što manje ključnih reči, što uniformniju
sintaksu, dobro rešen 'scope' promenljivih, i kontrolu tipa
prosleđenih parametara...
A šta meni najviše smeta kod Klipera? Po meni, baš to što nije
dovoljno kompajler -- a mogao je da bude...
Znam, kada se Kliper pojavio, najbitnija osobina mu je bila:
'Uzmite dBase program, propustite ga kroz Kliper, i sve će da
radi, a imaćete .EXE verziju.' (Mada, ni S87 verzija nije baš
tu bila dosledna -- bilo je nekih nepotrebnih odstupanja.)
Jezik koji je fino funkcionisao u interpreterskoj okolini,
prilično je rogobatno realizovati za kompajler. Na primer,
makro supstitucije se nikako nisu mogle koristiti onako divlje
kao u dBase programima.
Moram da napomenem da sam radio na dBase-u još od vremena
kada je najveća postojeća verzija bila II (što je i prva
verzija -- autori dBase nisu nikada napravili dBase I -- ovo je
bio marketinški trik) i sve to na CP/M-u, na kome je na disketu
(ako se još sećam) stajalo manje nego na današnju DD disketu, a
hard disk nije imao poddirektorijume (bilo je zabavno kucati
DIR tada). dBase je stvarno bilo nešto najkorisnije što je
postojalo na tim mašinama -- bilo je i za njih dovoljno brzo,
i, opet, za njih je izgledalo prilično 'bez ograničenja.' Hoću
da kažem, pratio sam razvoj di-bejz-lajk jezika dosta dugo, i
mislim da ipak imam pravo da iznosim svoje mišljenje o tome
kako izgledaju ti pravci koji su se razvili iz svega toga...
I šta su dizajneri Klipera trebali da urade sa 5.0 verzijom?
Da, umesto izmišljanja preprocesora (kojim su, opet, zakopali
sebe time što za taj jezik nikada neće moći da se napravi
čvrsta sintaksna provera -- pričao sam ti da sam želeo čak i
sam to da realizujem -- sada je to nemoguće...) i 'svođenja na
isto,' ako su već želeli da izmišljaju novi jezik (a 5.0 je,
faktički, novi jezik) naprave kompajler koji radi 'u dva moda:'
'Kompatibiliti' i 'Pravom.'
'Pravi' bi bio jedan čvrst jezik, primeren kompajliranju, koji
bi radio SVE MOGUĆE provere u toku kompajliranja, a
'kompatibiliti' bi služio onima koji ne žele da iskoriste
čitave procedure pisane u starom maniru (ali, šta će im onda
novi prevodilac O:) ?) Sad sam se setio -- za te stare
aplikacije najbolnija tačka bila je nemogućnost svapovanja
samih sebe pre startovanja eksternog programa. 5.0 to nije
donela. Donela je virtuelnu memoriju. Ali ako je stara
aplikacija radila bez virtuelne memorije, šta će mi onda
virtuelna? Sve u svemu, što bi neko staru aplikaciju uopšte
prevodio novim prevodiocem?
Verovatno su se plašili da urade nešto tako drastično, kao, da
bi ljudi mogli U ISTOJ funkciji/proceduri da mešaju stare i
nove fore... Ali od tog mešanja je više štete nego koristi...
što i ja i ti znamo... što se grbavo rodi...
Ovako, sve je, ipak, ostalo nekako nedovoljno... 5.0 je
nedovoljno interpreter (ni oni pre to nisu bili) ali, što je
još nezgodnije, i nedovoljno kompajler...
Što opet ne znači da Kliperom nije moguće uraditi puno lepih
stvari. Danas već postoji puno softverskih proizvoda kojima se
realizuju prilično složene stvari, a da oni ne poštuju
elementarna pravila 'pravih jezika.' Danas je čitavu aplikaciju
moguće razviti čak, naprimer, i popunjavanjem raznoraznih
ćelija u spredšitovima, pa silnim manipulacijama redova, kolona
(skrivanje, otkrivanje, proširivanje, idimi dođimi) i pisanjem
nekih kao makroa. A počelo je od tabela koje je trebalo da ti
sračunaju relativno proste stvari... Ono zbog čega ja nisam
previše srećan sa takvim stvarima je što da bi stvarno dobro
koristio mogućnosti jednog takvog paketa, moraš da jako dobro
proučiŠ BAŠ TAJ paket i BAŠ TU njegovu verziju, gde one
'najkorisnije' stvari nikada nisu iste u različitim
verzijama... S druge strane su 'regularni' programski jezici,
gde naučiš jezik, a onda ocenjuješ kompajler po tome koliko
dobro poštuje standard... i gde, hvala bogu, ne učiš sve
ispočetka svaki put kada se pojavi nova verzija... ili kad
preĆeŠ na prozvod druge firme. E sad, možda je moje očekivanje
da Kliper uđe u onu drugu kategoriju bila nerealna? Možda
Kliper nikad nije ni želeo da bude tako nešto, nešto što će
moći da pravi više nego jedna jedina firma, i da se koristi bez
obzira na 'okolinu?'
Ufff. Baš sam se raspisao... Priznajem, opet, da iznosim lični
stav, zasnovan na ličnim predubeđenjima, i da ne očekujem da se
svi slažu sa onim što pišem. :) Drugačija mišljenja su više
nego dobrodošla... Uz sve to, Nenade, hvala na strpljenju. Znaj
da sam te uvek duboko poštovao kao stručnjaka za Kliper.
PS. Hmmm. Pretprocesor ili preprocesor? Priznajem da je ovo
drugo pod uticajem strane literature. Ali ne znam ni neku
referencu na osnovu koje bih tvrdio da li može da se koristi?
Kad smo već kod jezika, da li se slažeš da bolje zvuči 'blokovi
koda' nego 'kodni blokovi?'
clipper.893ppekovic,
>> Seti se još i
>> nepouzdanosi 5.00 verzije itd...
Već duže vreme je aktuelna verzija 5.01 koja, kao se pokazala kao pouzdana.
>> I šta su dizajneri Klipera trebali da urade sa 5.0 verzijom?
Kompatibilnost sa prethodnim verzijama kompajlera je jako lepa stvar ali i
velika kočnica pri stvaranju novih verzija. Da su napravili kompajler kakav bi
ti želeo da vidiš, onda bi se našao neki pera, marko, sima i sl. koji bi rekao:
šta se zezaju ovi u Nantucket-u, zar ću za svaku verziju sve morati da pišem iz
početka (zato sam ja digao ruke od Turbo Pascal-a, svaka verzija novi format
unit-a). Ne zaboravi i da su programeri veoma konzervativna sorta. Da bi se
navikli na novi proizvod potrebno je vremena i vremena. A ako im pružiš
komaptibilnost sa starom verziom oni počnu da korste novu sa mogućnostima
stare, pa polako "kupuju" jednu po jednu novost nove.
Naravno, i ljudi iz Nantucket-a razmišljaju o onome o čemu mi ovde pričamo,
pa ako si video poruku nbatocanin-a, tamo lepo piše da će da razvijaju clipper
u dva pravca. Jedan, ka jeziku koji bi vidim u globalu i ti želeo da vidiš, a
drugi u pravcu u kome su išli do sada.
Paya
clipper.894dpaun,
Suđeno mi je, izgleda, na opšte YuZadovoljstvo, da rečeni problem sam
rešim, i time se plasiram u uži izbor za neki od narednih BajtovaLP.
Rešenje je bilo u prenosu argumenata po referenci, tj. nizu koji se
prosleđuje opštoj funkciji Dig() mora da prethodi operator č. Iz niže
navedenog primera može se videti kako to izgleda u praksi. Kada
zaboravimo da uključimo CapsLock, a primetimo da nam se provukao neki
MaliYu, pritisnemo "strelicu na dole" i stvar će biti u redu; možemo,
takođe, bez brige napustiti get-read sa <enter>, MaliYu će automatski
postati VelikiYu. Za braću koja nemaju Masm prilažem ovde yu.obj. Da
podsetim da se i asem obj linkuju kao i svi drugi obj fajlovi, u ovom
slučaju, recimo:
RTlink Fi MojProg,Yu Lib ...
I još nešto. Ovo nikako nije homoljski hir. Zamislite da je korisnik
nepažnjom uneo "žIVKOVIć" a traži "čIVKOVIĆ"-a?
Ja toliko po "tem pitanju". Hvala braćo, drži tata; odoh ja u šumu da
spremam drva!
****
*
cNiz:=cNiz1:=cNiz2:=cNiz3:=SPAC(30)
č 1,1 GET cNiz1 pict "č!" VALID Dig(čcNiz1)
č 2,1 GET cNiz2 pict "č!" VALID Dig(čcNiz2)
READ
č 3,1 GET cNiz3 pict "č!" VALID Dig(čcNiz3)
READ
*
FUNC Dig(vNiz)
vNiz := YUPPER(vNiz)
RETURN .T.
********************
* yu.asm
* prema nBatocaninu
* kao što rekoh
********************
INCLUDE EXTENDA.INC
DATASEG
CLpublic <YUPPER>
CLstatic <string smallyu "žčšćđ">
CLstatic <string bigyu "螊ĆĐ">
CLfunc char YUPPER <char str>
CLcode
PUSH ES
PUSH BP
PUSH SI
JMP begin
r_str DB 80 DUP(0)
begin: LES SI, str
MOV BX, 0
cikl: MOV AL, ES:ŠSI+BXĆ
MOV r_strŠBXĆ, AL
OR AL, AL
JZ kraj
CMP AL, 'a'
JL yu_letter
SUB BYTE PTR r_strŠBXĆ, ' '
JMP next_char
yu_letter:
MOV BP,0
tab: MOV AL, BYTE PTR smallyuŠBPĆ
OR AL, AL
JZ next_char
CMP BYTE PTR r_strŠBXĆ, AL
JNE next
MOV AL, BYTE PTR bigyuŠBPĆ
MOV BYTE PTR r_strŠBXĆ, AL
next: INC BP
JMP tab
next_char:
INC BX
JMP cikl
kraj: MOV AX, SEG r_str
MOV BX, OFFSET r_str
POP SI
POP BP
POP ES
Clret AX BX
END
yu.objclipper.895ndragan,
/ :) Pogotovu 'na licu mesta,' gde je recimo XT sa 80ms diskom ;)
Ih te bi trebalo zakonom zabraniti.
clipper.896ndragan,
/ bodovao i jezik DBMS proizvoda i sećam se da je Clipper bio daleko
/ iznad ostalih u toj kategoriji.
Bogami, mora da žiri intimno voli Ce. Ovo primera iz 5.01 koje ste
okačili u ovoj temi me je i navelo da kažem da mi kliper sve više liči
na pretprocesor za Ce kompajler.
clipper.897ndragan,
/ što sam zbudžio preračunati peške ;(( ) i nisam moga da pročitam bazu
/ iz Dbase-a, a DBU nisam imao.
Peške? No, za pešačke preračune sa neprekidnim zavirivanjem u bazu (da
vidimo šta smo napravili) posle svakog koraka, foks je ipak nenadjebiv.
clipper.898vili,
> vec unetog teksta, Clipper ne prepisuje novi sadrzaj preko starog, vec
> stari oznaci da je spreman za brisanje a novi doda na kraj dbt baze.
> Zato DBT raste ko da je u metastazi. Suvisan tekst, samim tim i svodenje
> DBT-a na njenu pravu velicinu, vrsi se povremenim kopiranjem cele baze.
> Najbolje je ovo kopiranje ugraditi u meni kao opciju, a procedura bi
> izgledala ovako:
Pa ovo je idiotski! (Mislim na memo polja) Ocigledno je da Clipper
ima BIG BUG sa memo poljima.
> DBT, da je ziv i zdrav, to treba i da radi. Znam za testove sa DBT
> velicine 20 MB; kod mene je trenutno negde oko 2 MB, i sve savrseno
> radi.
>
A kako bi taj DBT od 2MB radio na mom disku od 42MB? Posle nekih
dvadesetak memoedita (u kojima se samo vrsi izmena odredjenih
karaktera) javio bi da nema mesta na disku.!!!
> Ovako na uvce, mislim da je problem u nepotrebnom ulazenju u memoedit.
^^^^^^^^^^^
Sta znaci nepotrebno ulazenje u memoedit???? Ako u programu postoji
opcija za izmenu ili unos memo podatka da li treba korisniku da
'napomenem' da tu opciju koristi samo 2 puta ili 7 puta ili koliko puta?
Vili
clipper.899nbatocanin,
@ x,y GET cProm1 VALID DiziBre()
@ x,y GET cProm2 VALID DiziBre()
itd....
READ
FUNC DiziBre
GetActive():varPut(YUpper(GetActive():buffer))
RETURN .T.
A!!???
Koga ne mrzi da se bakće, može se vrlo lako postići da se YU slova
dižu i *za* vreme kucanja (kao sa PICTURE "!!!") - pogledajte
GetApplyKey() u GETSYS.PRG.
xNenad
clipper.900d.petrovic,
Ă> Sta znaci nepotrebno ulazenje u memoedit???? Ako u programu postoji
Ă> opcija za izmenu ili unos memo podatka da li treba korisniku da
Ă> 'napomenem' da tu opciju koristi samo 2 puta ili 7 puta ili koliko
Ă> puta?
Postade zanimljivo pitanje. Možda pri startovanju (ne nikako pri ulasku u
memoedit, tek bi posle pričali da je Kliper spor :)) ) programa proveriti
koliko ima mesta na disku, pa upozoriti, pa ponuditi pakovanje, pa...
clipper.901d.petrovic,
Ă> Peške? No, za pešačke preračune sa neprekidnim zavirivanjem u bazu
Ă> (da vidimo šta smo napravili) posle svakog koraka, foks je ipak
Ă> nenadjebiv.
Grrrrrrrr ;))) Ko je pominjao Blafa i Floka ? ;)
Ma ja sam morao da izvadim iz polja u bazi neke gluposti, da pofaćam
brojeve Ascii kodova i sve to izpreračunavam na digitrončetu mu da bih nekako
ukapirao šifru za ulazak u program. Sva sreća što sam se malo pre toga opametio
pa za sve aplikacije mrsim brojeve na isti način pa sam znao šta da bockam na
digitrončetu. Mrrrrrzelo me da idem kući, pa da vadim moju bazu, pa... . Sad
imam bolji fazon, znam napamet šta treba da se upiše da bih ga startovao MOJOM
šifrom :))
clipper.902dpaun,
Ko o čemu, dPaun o memu!
Poznato je da MemoEdit() može da obrađuje niz dužine 64K; Ako se proba
nešto veće, on to neće i u DOS izleće. Takođe veći fajl ne da ni da se
pregleda. Tada će, doduše, učitati deo fajla, ali u praksi ima
situacija kada je neophodno da iz našeg Clp programa listamo txt
fajlove neograničene veličine. Ovaj slučaj detaljno razmatra, uz
listinge primera, Rick Spence u knjizi "Clipper 5, vodič za
programere", u delu "Prikazivanje velikih datoteka ili niza znakova".
Kako sam zbog lenjosti propustio da blagovremeno naručim disketu sa
listinzima, ja sam pomenute primere prekucao, ali taj moj brikolaž nikako
da oživi. Pa sad pitam braću uzduž i popreko: da li je to rešio neko?
Brže s odgovorom, dosta sam čeko!
dPaun.
PS. Znate li kakva je šuma u jesen,
kad njome čovek hoda zanesen!
clipper.903ppekovic,
>> Peške? No, za pešačke preračune sa neprekidnim zavirivanjem u bazu (da
>> vidimo šta smo napravili) posle svakog koraka, foks je ipak nenadjebiv.
Da, a ja sam čuo da u SCO-u pripremaju novu verziju UNIX-a
pisanu na clipper-u, clipper je nenadmašiv u pisanju rezidentnih
programa, kao i za programiranje CNC mašina.
Ovako možemo dokle god hoćeš, ali je zaista bez ikakvog
smisla. Valjalo bi ipak prvo da se raspitaš kakve su mogućnosti
clipper-a za praćenje stanja baze posle svakog koraka pa da onda
ocenjuješ šta je nenadjebivo a šta nije.
Da ti pomognem, clipper jednu lepu stvar koja se zove clipper
debuger.
Paya
clipper.904dpaun,
>> može se vrlo lako postići da se YU slova
>> dižu i *za* vreme kucanja (kao sa PICTURE "!!!")
Bio bi to mali korak za tebe a veliki za Yužovečanstvo. A još ako bi to
zakačio ovde, znao bi o tebi i Vita šumar iz Ravne Reke, i moj komšija
Vlasta Bačilo, s kojim koljem drva u šumi, i njegova žena Vilarija, i ...
>> pogledajte GetApplyKey() u GETSYS.PRG.
Ja gledao, ništa ne video,
što video - nisam razumeo,
pa sam onda čarne oči kleo -
čarne oči, nek vam vid iskoči
>> xNenad
yPaun.žovekIzŠumeKojiNeRazume
clipper.905dpaun,
>> Sta znaci nepotrebno ulazenje u memoedit????
Ne samo nepotrebno ulaženje, već i nepotrebno korišćenje memo tipa.
Je si li pročitao navedeo poglavlje kod R. Spensa?
>> Pa ovo je idiotski! (Mislim na memo polja) Ocigledno je da Clipper
>> ima BIG BUG sa memo poljima.
>>
Ja ne mislim da je reč o bagu, već o još nedorađenom alatu. Kada bude
tekstualna baza postala pomodna stvar, kao sada DBF, tada će i to morati
da se uredi. Što se tiče DBF-a, stvar je rešena tako što ti kažeš koliko
ti iznosi polje, i program ti, kod dodavanja novog sloga toliki prostor
rezerviše na disku, bez obzira da li nešto piš(n)eš u njega ili ne.
Dužina takvog polja, koliko se sećam, ne može da bude veća od 255
karaktera, ili se i ovde nešto promenilo u međuvremenu? I ova baza, tj.
DBF, raste isključivo prema mustri koju si skrojio na početku.
DBT, odnosno memo, predviđen je za upisivanje većih nizova čija se
dužina ne može unapred predvideti. Jedino ograničenje je, zasad, na 64K.
Bitnije od ovoga jeste sam koncept: DBT će se povećavati samo kada se
nešto unese u memo polje baze, a ne uvek kada se sa APPEND BLANK doda
novi slog. Kako reče brat Nenad, kad god pipneš REPLACE memo WITH
memo_polje ... Zato je veoma važno proceniti, prilikom krojenja baze, da
li je memo polje neophodno, ili se stvar može rešiti na drugi nači.
Kod unošenja novog teksta u bazu nema problema; novi tekst će biti
upisan u DBT, ona će se povećati u skladu sa tim unosom plus još neki
sitniš preko toga. Problem, po meni, nastaje kod izmena u već unetom
tekstu. Kada, na primer, nekim tekst procesorom ili editorom menjamo
tekstualni dos fajl, on će biti vraćen na disk u skladu sa izmenama.
Bolje reći, zauzeti prostor na našem disku neće se povećavati posle
svake izmene u nekom tekstualnom fajlu. Ali, o tome brine DOS. Clipper,
očigledno, nije smatrao da treba da ima mali DOS u sebi (bar ne zasad),
koji će ovu stvar voditi u skladu sa komunalnom logikom.
Moja iskustva sa Memo i DBT, pored svih očiglednih nedostataka, jesu
ohrabrujuća. Nedostatke ne vidim u ovom kancerogenom konceptu DBT-a, već
u siromašnim i oskudnim opcijama koje su ugrađene u MemoEdit(). Nešto
se, doduše, može uraditi preko korisničke funkcije, ili, čak, potpunim
isključenjem MemoEdita i korišćenjem spoljnog editora.
>> A kako bi taj DBT od 2MB radio na mom disku od 42MB? Posle nekih
>> dvadesetak memoedita (u kojima se samo vrsi izmena odredjenih
>> karaktera) javio bi da nema mesta na disku.!!!
Po ovome zaključujem da se, možda, pomalo i ne razumemo. Moje MemoEdit
seanse su, na primer, između 1 i 30 KB. Reč je o tekstovima koji nastaju
u toku terenskih istraživanja, o ispisima iz literature, o ... itd.
Izmene i dopune u već unetim tekstovima moram da vršim čak češće od
unosa nove građe. Naravno, ždraknem bar jednom nedeljno DBT i startujem
opciju za sažimanje prema potrebi. To sažimanje (naveo sam primer u
prošloj poruci), traje sve duže što je DBT veći. Ranije mi je to
smetalo, sada to vreme koje čekam nazivam humanim vremenom koje mi
bezdušna mašina daruje. Pa podignem pogled, pa primetim ljubičastu
šminku na mladoj koleginici, pa primetim obline na čistačici, pa ...
Pokušavam da zamislim problem koji te je naveo na memo, ali ne mogu. Ako
ti nije mučno, opiši tu situaciju. Brate Vili, niko te bolje od mene
neće razumeti, jer sam svu svoju sudbinu predao u ruke Clipperu baš zbog
njegovog memo koncepta.
dPaun
clipper.906pjankovic,
O problemu pregleda tekstualnih fajlova vecih od 64 Kb:
Svojevremeno je NBatocanin u "Racunarima" objavio asemblerski program
kojim se mogu listati datoteke proizvoljne duzine, ali ne samo to. Direktno iz
listanja se moze fajl odstampati, moze se izabrati kvalitet stampe i tako
dalje. Medjutim poslije nekoliko uzaludnih pokusaja da asemblerski listing
prilagodim svojim potrebama (naizgled je sve dobro radilo, ali je poslije
izvjesnog vremena pocinjao da se "brlja" ekran) i posto me je mrzjelo
da se dalje bakcem sa asemblerom, napisao sam to isto u Clipperu. Naravno,
NE sve u Clipperu. Funkciju za ispis na ekran sam napravio u C-u (direktno
u video memoriju). E sad, znam sta vas najvise interesuje: Koliko je to brzo
(ili sporo). E pa, brze nego sto sam ocekivao. Na samu brzinu skrolovanja
nemam zamjerki: sasvim je zadovoljavajuca. Jedino se malo duze ceka na prenos
bloka u memoriju ( u memoriju ucitavam samo odredjen broj linija). Na primjer,
da bi se ucitalo 1000 linija potrebno je oko 2 sekunde. Sigurno da su moguca
ubrzanja ali me je mrzjelo da tome posvetim vise vremena.
I u biblioteci NFLib (ima na Sezamu) postoji funkcija za pregled
fajlova neogranicene duzine. Medjutim, ona izgleda nije bas cisto napisana.
Cini mi se da nesto brlja po memoriji jer se poslije dva-tri njena poziva
u ostalom dijelu pisanom u cistom Clipperu javljaju cudne greske tipa
" varijabla nije definisana".
clipper.907toma,
Uz poruku zakačen spisak fajlova sa Rhinoceros BBS-a koji imaju
neke veze sa Clipper-om. Pošto sam video dosta lepih stvari,
zamolio bih organe da organizuju neko eventualno prebacivanje
istih u CLIPPER direktorijum SEZAM-a.
Pozdrav from Toma.
za_clip.zipclipper.909snemcev,
Pazi ovo:
Deklarišem ja danas neke promenljive za jednu proceduru,
i koristeći modućnost Clipper-a 5.01 da odjednom inicijalizujem
više promenjljivih pišem ovo:
...
PRIVATE bla_bla := tra_la_la := tandara_broc := šć
...
i nizove popunjavam kasnije iz programa u stilu
...
AADD( bla_bla, 'prvi niz' )
AADD( tra_la_la, 'drugi niz' )
AADD( tandara_broc, 'treci niz' )
...
i neće da radi ono što treba, pa to ti je. Elem, pokrenem ja
isterivač duhova, pardon bubica i na jedno ?LEN( bla_bla ) posle
izvršenja ove tri instrukcije on odgovara 3! Ja se ne dam
zbuniti, i pitam ?LEN( tra_la_la ), a on: 3! E sad već počinjem
da brinem. Zatražim ja ?bla_blaŠ1Ć, a on kaže "prvi niz", kao
što i treba da bude. Iznenađenje tek sad dolazi: ?bla_blaŠ2Ć
daje "drugi niz", a ?bla_blaŠ3Ć "treci niz".
Jel to zdravo imati tri niza koji su u stvari jedan niz?
Očigledno da im Clipper prilikom inicijalizacije dodeljuje isti
memorijski prostor. Još jednom, u malo izmenjenom obliku
hamletovsko pitanje 'Bug or feature'? Ili to ipak piše negde u
dokumentaciji kojoj nisam posvetio baš previše pažnje?
snemcev
P.S. Sorry zbog uglastih zagrada, koristim YUSCII standard.
clipper.910nbatocanin,
> Održavanje funkcija je relativno lako -- ako si je
> ispravio, a koristiš je u više programa, bez problema ćeš
> je nadalje koristiti u svima. Ali ako menjaš ove
> 'translacije,' šta onda?
E, pa tu je kvaka: ovako je još bolje! Gledaj to malo i sa druge
strane: ta nova naredba može biti dragocen tampon između funkcije i
programa. Evo na šta mislim: ako promeniš poziv funkcije (parametre),
moraćeš da menjaš to po svim programima. Ako si koristio
pretprocesor, možeš samo dodati nove opcije koje pokrivaju nove
parametre, a može se koristiti i stari oblik! Tako si samo izmenom
definicije naredbe uradio ceo posao. Ovo je odlična stvar.
> Drugi problem je još fundamentalniji -- translacije treba
> da ti obezbede da ako ONO U ŠTA SE TRANSLIRA tvoj program
> budu promenili, ti i dalje možeš da ga prevodiš bez brige.
> Ako počneš i sam da daješ 'niske udarce,' programi ti još
> više postaju zavisni od verzije kompajlera.
Da, ali ako pogledaš u šta se translira (bazični Clipper), to nema
šanse a i potrebe da se promeni. Osnovne konstrukcije i pozivi
funkcija. Kritični su jedino pozivi funkcija, a tu je kompatibilnost
strašno lako sačuvati: ne diraš staru funkciju, već je označiš kao
zastarelu. Uostalom, Clipper 5.0 ima mnogo prostiji osnovni jezik od
s'87.
> Da li time što uvodiš translate trikove i strukturno slabiš program
> (u smislu da ti je više dozvoljeno nego pre, a ne proverava se u toku
> prevođenja?)
Tačno je da se tako zaista malo slabi analiza, jer se
pretprocesiranjem gube informacije o polaznoj naredbi, ali kao
posledicu tu vidim jedino slabije poruke o greškama. Kada bi se u
definisanje novih naredbi uključila i obrada grešaka, sve bi se mnogo
iskomplikovalo. Ono što sam ja radio (ne previše), veoma lepo radi i
ne pravi probleme. Nemam ideju gde bi moglo biti problema, jer je
princip po kome radi #translate veoma prost.
> Šta to znači 'kodni blokovi bi mogli stvarno da se
> prevode?' Zar se sada ne prevode? U čemu je onda trik?
Koliko je meni poznato, u interni Clipper p-kod. Ako je pitanje zašto,
mislim da je zbog konstrukcija tipa { || &expr } i pristupanja
poljima baze. Kako da generiš kod kad se referišeš na nešto za šta ne
znaš ni šta je za vreme prevođenja?
> Na kraju se ipak došlo do neke 'razumne sredine.' Ta razumna sredina
> je da jezik treba da ima što manje ključnih reči, što uniformniju
> sintaksu, dobro rešen 'scope' promenljivih, i kontrolu tipa
> prosleđenih parametara...
Pazi, Clipper nije klasičan programski jezik: ko je video jezik sa
*naredbom* za tabelarni pregled podataka? Ovo je specijalan jezik, a
u njemu je štos dodati bezbolno more funkcija, a čini mi se da je za
to uvođenje ključnih reči najbolji način.
> A šta meni najviše smeta kod Klipera? Po meni, baš to što
> nije dovoljno kompajler -- a mogao je da bude...
Ja bih najviše voleo da naprave mogućnost nekih "brzih" delova
programa. Na primer, označiš markerima "brz" deo programa, tu smeš da
koristiš redukovani jezik (bez makroa i sl. gluposti), ali se
generiše pravi prevod: time bi se potpuno izbegla potreba za stalnim
skokovima u C i u ASM.
> Da, umesto izmišljanja preprocesora (kojim su,
> opet, zakopali sebe time što za taj jezik nikada neće moći
> da se napravi čvrsta sintaksna provera -- pričao sam ti da
> sam želeo čak i sam to da realizujem -- sada je to
> nemoguće...)
Ne bi rekao. BASIC Clipper nema pojma ni o kakvom pretprocesoru i
ništa lakše nego uz svaku promenljivu čuvati i tip i kad se napiše X
:= "A", a X je broj, on da se buni. Ali, pravi problem su tu run-time
operacije: makroi i podaci u bazi. Ko će ovde da kontroliše tip za
vreme prevođenja:
&cTmp := &cStr
a kad bi se uvela kontrola za vreme rada to bi tek bila katastrofa od
sporosti!
> 'Pravi' bi bio jedan čvrst jezik, primeren kompajliranju,
> koji bi radio SVE MOGUĆE provere u toku kompajliranja, a
> 'kompatibiliti' bi služio onima koji ne žele da iskoriste
> čitave procedure pisane u starom maniru (ali, šta će im
> onda novi prevodilac O:) ?)
Ja i dalje mislim da je 90% Clipper koda dovoljno brzo. Kad bi se
dodala mogućnost onih "brzih" delova, bilo bi savršeno.
> Sad sam se setio -- za te stare aplikacije najbolnija tačka bila je
> nemogućnost svapovanja samih sebe pre startovanja eksternog programa.
Ima dosta tih programčića od nekoliko K koji svopuju sve na disk ili u EMS,
pa startuješ šta oćeš. Mislim da je glupo kresati performanse da bi
se ovo postiglo u samom jeziku tako što se smanji zauzeće memorije.
Ono, mogli bi da ugrade neku takvu funkciju u CLIPPER.LIB.
> Donela je virtuelnu memoriju. Ali ako je stara aplikacija radila bez
> virtuelne memorije, šta će mi onda virtuelna? Sve u svemu, što bi
> neko staru aplikaciju uopšte prevodio novim prevodiocem?
Zato što imaš novi kvalitet. Pre je stalno bila frka ako upotrebiš
veliki niz ili string - Out of memory! A sada, možeš bez problema da
kreiraš "memorijske datoteke" - nizove: ako ima memorije biće vrlo
brzo, ako nema radiće sa diskom i biće kao da je sa datotekama.
> Ovako, sve je, ipak, ostalo nekako nedovoljno... 5.0 je
> nedovoljno interpreter
Zašto? Ja i ovo malo interpretatorskih mogućnosti slabo koristim.
> ali, što je još nezgodnije, i nedovoljno kompajler...
To jeste.
> A počelo je od tabela koje je trebalo da ti sračunaju relativno
> proste stvari...
Jeste. Treba samo videti evoluciju programskih paketa. Prvo naprave
nešto (v1.0). Onda naprave to upotrebljivo (v1.1 ;). Zatim ugrade
zahteve korisnika (v2.0), upotrebljivo (v2.1 ;), itd. Na kraju
dobijaju proizvod sa brdom funkcija, a da time *još* nisu zadovoljili
ni blizu sve korisnike. I onda posežu za spasonosnom (?) idejom -
programski jezik kojim se to čudo programira. I onda kažu: "Jeste,
toga nema, ali uz pomoć makro-jezika...". Tako danas i najgluplji
proizvodi imaju svoj makro jezik. Da li se time definitivno dokazuje
da je programiranje jedini efikasan način za rešavanje problema?
> E sad, možda je moje očekivanje da Kliper uđe u onu drugu
> kategoriju bila nerealna?
Ni meni nije jasno zašto nisu probali da prebace Clipper na neki
drugi OS do sada. Mislim da bi to bilo dosta jednostavno.
> Kad smo već kod jezika, da li se slažeš da bolje zvuči
> 'blokovi koda' nego 'kodni blokovi?'
Nisam neki stručnjak, pa ne znam šta da kažem. Ja sam "code blocks"
prvo preveo kao "kod blokovi", što je J. Regasek u mom tekstu
prepravio u "kodni blokovi", to mi se učinilo dobro i sad to
koristim. Kad pričam ja kažem "kod blokovi".
clipper.911neman,
> Pošto sam video dosta lepih
> stvari, zamolio bih organe da organizuju neko eventualno
> prebacivanje
Pa da ti malo smanjim doživljaj. I ja sam tako mislio dok nisam počeo da
ih skidam. Veeelika većina stvari je stara 1987-1990, neke su još za Clipper86.
Neke su SHAREWARE pa su u aplikaciji neupotrebljive (ispisuju poruke o tome).
Neke postoje na SEZAMU. Ima par interesantnih funkcija, ali su one
razbacane po raznim datotekama, neke su više puta definisane.
Uglavnom su pokrivene NANFOR-om.
Ako ste zainteresovani, spremiću pregled sadržaja datoteka.
clipper.912janko,
Ne mogu a da na početku ne izrazim veliko zadovoljstvo što se
diskusija jako lepo (po meni) razvila...
> Da, ali ako pogledaš u šta se translira (bazični Clipper),
> to nema šanse a i potrebe da se promeni. Osnovne
> konstrukcije i pozivi funkcija. Kritični su jedino pozivi
> funkcija, a tu je kompatibilnost strašno lako sačuvati: ne
> diraš staru funkciju, već je označiš kao zastarelu.
> Uostalom, Clipper 5.0 ima mnogo prostiji osnovni jezik od
> s'87.
Pod pojmom bazični Kliper smatraš direktne pozive funkcija (tj.
drugu stranu translejt direktiva)? Da li si negde pročitao
garanciju Nantuketa da jezik ni na tom nivou neće da se
promeni?
Nisam razumeo narednu rečenicu. Kako se to 'ne dira stara
funkcija nego označi kao zastarela?'
>> Šta to znači 'kodni blokovi bi mogli stvarno da se
>> prevode?' Zar se sada ne prevode? U čemu je onda trik?
>
> Koliko je meni poznato, u interni Clipper p-kod. Ako je
> pitanje zašto,
Nije mi ni palo na pamet! Hvala na objašnjenju.
> Ja bih najviše voleo da naprave mogućnost nekih "brzih"
> delova programa. Na primer, označiš markerima "brz" deo
> programa, tu smeš da koristiš redukovani jezik (bez makroa
> i sl. gluposti), ali se generiše pravi prevod: time bi se
> potpuno izbegla potreba za stalnim skokovima u C i u ASM.
Eto, tu se slažemo. Proširi 'brze' delove na CEO program i eto
čvrstog programskog jezika. Samo, onda ne otpadaju samo
makroi, već još štošta... Ono gde bi sigurno trebalo ostaviti
neku interaktivnost su upiti -- na neki način bi i dalje bilo
fundamentalno da mogu da se formiraju u toku izvršavanja.
>> 'kompatibiliti' bi služio onima koji ne žele da iskoriste
>> čitave procedure pisane u starom maniru (ali, šta će im
Ovde sam ja pogrešio -- ono 'ne žele' je trebalo, valjda, da
bude 'žele?'
>> Ovako, sve je, ipak, ostalo nekako nedovoljno... 5.0 je
>> nedovoljno interpreter
>
> Zašto? Ja i ovo malo interpretatorskih mogućnosti slabo
> koristim.
Možda zato što si tzv. 'ful tajm Kliper programer?' Ili se ja
nisam dobro izrazio na temu interpretiranja? Jednostavnost
interaktivnosti je mnogo lepa stvar -- da li koristiš diBejz UZ
Kliper? Kako 'sređuješ' stvari ručno, 'iz glave' kreiraš baze i
tako to? Sve Kliperom ili...?
>> Donela je virtuelnu memoriju. Ali ako je stara aplikacija
>> radila bez virtuelne memorije, šta će mi onda virtuelna?
>> Sve u svemu, što bi neko staru aplikaciju uopšte prevodio
> novim prevodiocem?
>
> Zato što imaš novi kvalitet. Pre je stalno bila frka ako
> upotrebiš veliki niz ili string - Out of memory! A sada,
> možeš bez problema da kreiraš "memorijske datoteke" -
> nizove: ako ima memorije biće vrlo brzo, ako nema radiće
> sa diskom i biće kao da je sa datotekama.
Koliko je virtuelna ta virtuelna memorija, usput? Da li si
primetio neka ograničenja koja su ti se pojavila u praksi? Za
kod mi je jasno da ga može da 'preklapa' koliko hoće... ali
kako se ponaša baš sa varijablama? Gde su kod njih granice?
Da li je, generalno, njih manje bolno koristi umesto manjih
datoteka?
clipper.913kanda,
>> proba nešto veće, on to neće i u DOS izleće. Takođe veći fajl ne da
>> ni da se pregleda. Tada će, doduše, učitati deo fajla, ali u praksi
>> ima situacija kada je neophodno da iz našeg Clp programa listamo txt
>> fajlove neograničene veličine. Ovaj slučaj detaljno razmatra, uz
>> listinge primera, Rick Spence u knjizi "Clipper 5, vodič za
>> programere", u delu "Prikazivanje velikih datoteka ili niza znakova".
Pa vidi DPaune, ako ti treba samo pregled datoteke, recimo pregled
izvestaja pre stampanja, napravi TBrowse, i nabudzi mu GoTopBlock,
SkipBlock i GoBottomBlock da se pomeraju po linijama teksta u
datoteci, i definisi jednu kolonu da prikazuje sadrzaj aktuelne linije. Stvar
radi prihvatljivo brzo i kad se sve napise u kliperu.
clipper.914snemcev,
>> Program se kod mene nije hteo kompajlirati na clipper 87.
>> Ispravio sam par sitnica i dodao pred-program za testiranje i
>> još preveo na standard "Računari"... I evo ga!
Probao sam i dobio malo čudne rezultate. Recimo:
11000 - jedanaesthiljad ( gde je a? )
12000 - dvanaesthiljade ( treba hiljada a ne hiljade )
13000 - trinaesthiljade ( isto )
14000 - četrnaesthiljade ( isto )
15000 - petnaesthiljada ( OK )
11000000 - jedanaestmilion ( gde se dede a? )
Objašnjenje?
snemcev
clipper.915snemcev,
>> Ja gledao, ništa ne video,
>> što video - nisam razumeo,
>> pa sam onda čarne oči kleo -
>> čarne oči, nek vam vid iskoči
Ovo treba u VICEVI:najbolji! Do suza sam se ismejao!
snemcev
clipper.916pjankovic,
> Jel to zdravo imati tri niza koji su u stvari jedan niz?
> Ocigledno da im Clipper prilikom inicijalizacije dodeljuje
> isti memorijski prostor. Jos jednom, u malo izmenjenom
> obliku hamletovsko pitanje 'Bug or feature'? Ili to ipak
> pise negde u dokumentaciji kojoj nisam posvetio bas
> previse paznje?
Tacno je da ova tri niza zauzimaju isti memorijski prostor. Svaka
izmjena u jednom automatski mijenja i druge. Prema tome : "It's a feature!".
clipper.917ciki,
Procitah malopre neke malo starije porukice i videh da je aktuelna
rasprava u semi oko dizanja YU slova u toku unosa GET/READ.
Ok imamo source u asm-u i to radi OK.
Aj sada da probamo ko sto rece nb da malo caprkamo po getsys-u,kada
ono
problema i problema.
Sva sreca to sam pokusavao odavno da uradim pa vam prenosim svoja
isku-
stva.
GET klasa ima mnogo svojih metoda(startujte samo NG pa vidite),od
kojih
je za nas narocito zanimljiva picture, jer get:picture daje picture
niz koji je korisnik definisao.(Ovo svi znamo ali ipak)
Naizgled evo naseg resenja ali to moze da upali u 25-40% slucajeva
ako se bas ne bacimo u analizu GET klase.
Ako je picture niz "č!" to je Ok jer dovoljno je to ispitati i
ubaciti
u getsys nesto kao
.....................
if ( Set(_SET_INSERT) )
if (get:Picture == "č!")
do case
case cKey == "š"
get:Insert("Š")
.....................
(Moze krace ali radi slikovitosti)
Ali zamislite picture u semi "99!!!X!999" (Ima sadista pa moras na
sve racunati.).
Sta sada ostaje.Pronaci uz pomoc neke metode get klase trenutni
polozaj
kursora unutar picture stringa pa ga usporediti sa ! itd...
Puno srece
onome
ko ovo radi.
Pozdrav Kikile!
P.S. Ako neko uradi neka ga UL.
clipper.918nbatocanin,
> Dužina takvog polja, koliko se sećam, ne može da bude veća od 255
> karaktera
Može do 64K.
> Bitnije od ovoga jeste sam koncept: DBT će se povećavati samo kada se
> nešto unese u memo polje baze, a ne uvek kada se sa APPEND BLANK doda
> novi slog.
Na žalost, nije tako :((. Probajte ovo:
FOR i := 1 TO 1000
REPLACE Memo WITH Space(600)
NEXT
> Nedostatke ne vidim u ovom kancerogenom konceptu DBT-a, već u
> siromašnim i oskudnim opcijama koje su ugrađene u MemoEdit().
Ja suprotno: ništa mi se ne sviđa rad MEMO sistema, ni MemoEdit nije
nešto, ali se da dosta učiniti. Biće tekst o tome u narednim
"Računarima".
Trebalo bi nabaviti neku od zamenu za memo polja, ima ih prilično.
clipper.919nbatocanin,
Nećete verovati koliko je prosto: treba samo dodati jednu naredbu u
GETSYS.PRG (zbog orijentacije sam dodao i okolni kod):
...
// --- Ovo je dodato
IF "@!" $ get:picture ; cKey := YUpper(cKey) ; END IF
// --- Ovo je dodato
if ( Set(_SET_INSERT) )
get:Insert(cKey)
else
get:Overstrike(cKey)
end
...
> A još ako bi to zakačio ovde, znao bi o tebi i Vita šumar iz
> Ravne Reke, i moj komšija Vlasta Bačilo, s kojim koljem
> drva u šumi, i njegova žena Vilarija, i ...
Držim te za reč :))
clipper.920nbatocanin,
> Ili to ipak piše negde u dokumentaciji kojoj nisam posvetio baš
> previše pažnje?
Piše, i tako je. Ponekad je i korisno.
clipper.921ciki,
Ho!
Na pocetku da kazem da pod metodama podrazumevam vidljive
promenljive instanci!!
Opet ja, ali samo sada sam uradio da se tokom pisanja dizu nasa
slova,
caprkajuci po getsys.prg-u. Ako ima zaintresovanih mogu priloziti i
listing sa sve izmenama(iako je to zabranjeno (zar ne?)).
Za one koji hoce i dalje da se muce evo pomoci.
Primenjujte metodu get:Pos koja daje trenutno mesto get bafera, pa ga
vezite za picture,tj. na primer:
CIKI____
ž --> sada je get:pos daje 5(cudo jel da?)
E sada ako imas picture oblika "!!!!!!!!" a ti jedno
┌────────────────────────────────────────┐
│ if substr(get:picture,get:pos,1) == "!"│
└────────────────────────────────────────┘
primenis i onda jos malo izmenis GetApllyKey() da bi mala slova za-
menio velikima...
Normalno ako ti je picture izraz "č!", onda izostavi ono uokvireno,
vec odmah predji na dizanje slova.
Koliko muke, a kako prosta stvar.
Pozdrav Ciki!
P.S. Moram izraziti zahvalnost I dpaun-u,pa nbatocaninu na ideji,i
muci
da mi podobno objasni svoj view program.
clipper.922ciki,
Eh sada procitah odgovor nbatocanina(krace za 20 linija nego moje,
ali se oslanja na assembler.
Pozdrav Ciki!
clipper.923dejanr,
>> Probao sam i dobio malo čudne rezultate. Recimo:
>> 11000 - jedanaesthiljad ( gde je a? )
>> Objašnjenje?
I ja sam malo pogledao, i jedino objašnjenje je logička greška
koju je autor napravio. Naime, on kada vidi hiljade, milione itd,
tretira sve prema istom algoritmu, a raspon 10-19 je specijalan.
Recimo kaže se dve hiljade, tri hiljade ali i dvanaest hiljadA,
trinaest hiljadA, a posle opet dvadeset dve hiljade, dvadeset
tri hiljade itd. Program ovaj izuzetak naprosto nije predvideo.
Dakle, ostaje da neko sam pokuša da ispravi program ili da se
nadamo da će autor to čuti i "srediti", pa nam poslati ispravnu
verziju.
clipper.924d.petrovic,
Ă> Eto, tu se slažemo. Proširi 'brze' delove na CEO program i eto
Ma ljudi bre, preterujete više sa tom sporošću klipera !!! Za šta se
Kliper koristi nego za baze podataka i šta rade nego komuniciraju sa nekom
prosečno obdarenom ženskom. E, sad: Ako takva prosečna ženska stiže da prati
šta program radi i još da čeka da program svoj deo posla završi (osim pri
reindeksiranju, pakovanju i sl.) onda to ne valja. Ali, ako maalkice iskusniji
i domišljatiji (namerno kažem domišljatiji, jedino treba da zamisli operatera
pri radu, koji trese cigaru u pikslu između unosa dveju stavki, mada je retko i
toliiiiiko vremena potrebno da se izvrši deo programa, recimo da izvrši commit
što ja radim češće, kad god menja vrstu rada) programer iskoristi vreme između
dve reakcije programera niko se neće žaliti da mu kliper spor. Pa radi ti isto
to i u asembleru pa će ti "skoro" isto vreme trebati ako je vreme pristupa HD-u
27 ms !! Bilo bi stvaaaarno puno da sad nastavim bla, bla kako to realizovati,
ali uopšte nije teško. Ja pri testiranju najčešće ne mogu da stignem da unesem
sve što traži iako unapred znam šta će sve desiti ako pritisnem....itd.
Pozdrav, Dejan
clipper.925d.petrovic,
Ă> Na žalost, nije tako :((. Probajte ovo:
Ă>
Ă> FOR i := 1 TO 1000
Ă> REPLACE Memo WITH Space(600)
Ă> NEXT
Ma to smo već zaključili ! Izgleda da si ti samo nešto preskočio. E, sad
(lakše mi ovde da pitam nego da časkom probam ;)))) ) jel se to beše eliminiše
sa PACK ?
Pozdrav, Dejan
clipper.926janko,
> Ă> Eto, tu se slažemo. Proširi 'brze' delove na CEO
> program i eto
>
> Ma ljudi bre, preterujete više sa tom sporošću klipera !!!
:) Speed was not an isue here, što kažu... NB je pominjao 'brze
delove' ali je ideja bila u tome da nije nužno da se sve
interpretira, već da bi bilo lepše da se stvarno prevodi... A
ja sam o tome pričao ne zbog brzine, već zbog sigurnosti
programera... o čemu sam napisao kilobajte i kilobajte pa ne
bih da sad ponavljam... ima sve u ovoj konf...
> reindeksiranju, pakovanju i sl.) onda to ne valja. Ali,
> ako maalkice iskusniji i domišljatiji (namerno kažem
> domišljatiji, jedino treba da zamisli operatera pri radu,
> koji trese cigaru u pikslu između unosa dveju stavki, mada
> je retko i toliiiiiko vremena potrebno da se izvrši deo
> programa, recimo da izvrši commit što ja radim češće, kad
> god menja vrstu rada) programer iskoristi vreme između
:) Tipično ponašanje programera koji NE koriste svoje programe
je da prave prilično slabašne (da ne kažem teško upotrebljive)
korisničke interfejse. Tako da ono 'znam šta nailazi' retko ima
smisla ako je interfejs slab... jer nije isto unositi
proizvoljne vrednosti i unositi bitne podatke. No, skrenuo sam
sa teme... žak i to, što je odziv spor, neki koriste da uliju
veće strahopoštovanje... ako ti kompjuter preračunava plate za
petsto ljudi dva sata, a na ekranu je poruka 'sačekajte malo,'
amater ga gleda kao boga... ako to isto uradi za manje od
minuta na XT-u, ljudi misle 'pih, pa to je * dim.' Ipak, oni
koji koriste ovaj drugi posle ovog prvog, već umeju da cene taj
drugi program.
Ova ideja da programu ne smeta da radi dugo nije pala na pamet
samo domaćim programerima (i 'programerima,' onim koji pišu
aplikacije na Turbo Bejziku, ili nekom UKPC Paskalu (koji se
interpretira), na primer). Tip iz američke firme koja pravi
programe za dekriptovanje komercijalno zaštićenih datoteka
tvrdi da su u svoje rutine dodali i petlje 'koje ne rade ništa'
da ne bi izgledalo to dekriptovanje 'isuviše jednostavno.' ;))
clipper.928toma,
■■>> Ako ste zainteresovani, spremiću pregled sadržaja datoteka.
Ajd bar pregled da vidimo, kad si mi već smanjio doživljaj. :))
Pozdrav from Toma.
clipper.929dpaun,
>> Koliko muke, a kako prosta stvar.
Ima još jedno rešenje, bez ijedne programske linije:
da se napusti YU prostor ...
dPaun
clipper.930dpaun,
>> Nećete verovati koliko je prosto: treba samo dodati jednu naredbu
>>
Nije znanje znanje znati, već je znanje znanje dati!
Nama iz prvog Clipper razreda fali mnogo očiglednosti, mejeutike i sl.
Ohrabren tvrdnjom da je prosto, ja pokušao ...
-> Ritao se dok nisam kompajlirao getsys sa /m/n/w (kao što piše);
-> sada je sve u redu, i YuVilajet može da odahne.
-> zato valja rezimirati:
Za podizanje MalihYu u toku kucanja, dakle kad je PICT "č!",
valja uraditi sledeće:
1) iz poruke 5.894 skinuti yu.obj;
2) iz poruke 5.899 videti način pozivanja preko VALID-a
3) iz poruke 5.919 videti koju prepravkicu treba uneti u GETSYS.PRG
4) ulinkovati yu.obj i getsys.obj u aplikaciju;
5) osećati se konačno kao YuEuroPPejac!
>>> A još ako bi to zakačio ovde, znao bi o tebi i Vita šumar iz
>>> Ravne Reke, i moj komšija Vlasta Bačilo, s kojim koljem
>>> drva u šumi, i njegova žena Vilarija, i ...
>>
>> Držim te za reč :))
Ma saznala je i cela Šumska uprava, i pola Majdanpečke Domene ...
A Laza Tufan, kozar amater iz Todorove Reke, dobio vrtoglavicu od
neverice ...
clipper.931dpaun,
>>> Bitnije od ovoga jeste sam koncept: DBT će se povećavati samo kada
>>> se nešto unese u memo polje baze, a ne uvek kada se sa APPEND
>>> BLANK doda novi slog.
>>
>> Na žalost, nije tako :((. Probajte ovo:
>>
>> FOR i := 1 TO 1000
>> REPLACE Memo WITH Space(600)
>> NEXT
>>
Dobro sam mislio, ali sam kuso objasnio. Mislio sam na onu situaciju kada
se sa APPEND BLANK dodaje novi slog u bazu radi popunjavanja OSTALIH
polja, a ne i Mem-a ... Da, da. Baš sam krečana! (Ne ide, izgleda,
DrVosečstvo i ova suptilna Clipper problemtika).
>>> Nedostatke ne vidim u ovom kancerogenom konceptu DBT-a, već u
>>> siromašnim i oskudnim opcijama koje su ugrađene u MemoEdit().
>>
>> Ja suprotno: ništa mi se ne sviđa rad MEMO sistema, ni MemoEdit
>> nije nešto, ali se da dosta učiniti. Biće tekst o tome u narednim
>> "Računarima".
Nekoliko puta sam podsećao na (nailazeći) problem tekstualnih baza;
jednom sam čak i pitao kako se to rešava u svetu, kako kod nas, ali je
na moje pitanja pala prašina ... žekaću s nestrpljenjem "Računare".
>> Trebalo bi nabaviti neku od zamenu za memo polja, ima ih prilično.
>>
Vidi ti njega: zna a ćuti! Ovo na dobro ne sluti.
clipper.932ndragan,
/ makro supstitucije se nikako nisu mogle koristiti onako divlje
/ kao u dBase programima.
A upravo divlje makro supstitucije čine lepotu ovakvih jezika. To je
ono što nijedan jezik pre DiBejza, Klipera i Foksa nije imao. Dobro,
imao je Spektrumov bejzik - tamo je u običnoj Input naredbi umesto
broja mogao da se ukuca algebarski izraz sa nekoliko promenljivih, i
bio bi izračunat i primljen. DB jezici su takođe doneli neverovatnu
novost: znaju kako im se šta zove.
Normalan kompajlirani jezik pamti imena promenljivih do objektnog
modula, i još imena javnih promenljivih i procedura predaje linkeru; u
linkeru sve to postaju nekakve adrese i od onih blesavih imena koje smo
nadenuli promenljivim u svom programu ne ostaje ništa. Da ne spominjem
da je nemoguće izmisliti novu promenljivu u toku izvršavanja programa,
predati _ime_ procedure kao parametar drugoj proceduri... što sve može
da se radi u DB jezicima. Možda se ljubiteljima klasičnih jezika kosa
postrojava kad čuju za tako nešto, ali to _radi_, i kad se navikneš, ne
možeš bez toga.
Evo jednog primera programa koji nikad neće raditi (?) ni u jednom
jeziku osim foks proa. Radi denominaciju:
close all
set safe off
set head off
_decc='2'
do upiti with 'na koliko decimala','_decc' && proc. koja radi READ
fsp=curd()+'*.dbf'
fajl=sys(2000,fsp)
do while ''#fajl
use (fajl) alias radna excl && otvara redom .DBF
if recc()>0 .and. fajl#'DUM'
copy stru exte to dum
sele 0
use dum
count to t for field_len>7 .and. field_dec=2
if t>0
do pron with 'dum.prg' && radi set print to fajl itd
?? '*',(fajl)
list off '* '+field_name,field_len,field_dec ;
for field_type='N'
? 'sele radna'
? 'set talk on'
? ' ? dbf()'
? ' replace all'
scan for field_len>6 .and. field_dec=2
?? ';'
? trim(proper(field_name)) at 3,;
'with round('+trim(proper(field_name))+'/10,'+_decc+')'
ends
? 'set talk off'
? 'retu'
do proff && set print off itd
sele dum
use
clea prog
* poziva se editor da se ručno dotera generisani program
modify command dum
* pa kompajler da uradi svoje
compile dum
* i, pošto nema linkovanja, odmah se izvršava
do dum
else
sele dum
use
sele radna
endif
endif
fajl=sys(2000,fsp,1)
endd
clea all
erase dum.dbf
erase dum.prg
Ovde se baš nisam pretrgao od makro zamena, s tim da je (fajl) isto što
i &fajl, samo radi brže i ograničeno je na imena fajlova. Poenta je u
tome što je za mene nezamislivo da mi ovako nešto padne na pamet u nekom
od klasičnih jezika.
Bue_ Ndragan
clipper.933ndragan,
/ Jok. Bio im komplikovan korisnički interfejs. Nije hteo sam da radi,
A i operaterka imala neograničeno bolovanje...
/ *** pisa=na je u bazi podataka Dbase II i prevedena
Ovo tek koliko da se vidi koliko sam se '88 doznavao u razliku između
Dbašića i Klipera :). Dbejz nisam ni pogledao, a kliper sam usput učio.
/ Važi 'al neće me košta. Imam, hik, vezu u Jelen pivari. ;o)
A ti si ona ekipa što je pogodila poso za pet tona piva :).
/ maleeecko stakleno sa drškom ? ;o))
Onda ga ne vredi ni dizati sa stola. Pola kile pa naviše može 'a prođe.
/ Ovako sam se namučio u C-u da povežem Btrieve i Isam (ne pitaj zašto
/* oba* !!!) i da štampam ćirilična trebovanja. Sada ću im (pro)dati
Oderi ih onda i u moje ime. Zaslužili su :). Znaš da su otvorili
filijalu i ovde - onaj bos što ima iks oči je odavde, pa... malo biznisa
u starom kraju. Imaju i nekakvo stovarište, rade... pričaj im malo o
modemima, transferu podataka itd, može još dobro i da prođe. Pa kad
budeš instalirao ovde, svrati na tu kriglu.
/ novu verziju u FoxPlusu pod Xenixom (FoxPro za *NIX? Eh, pusti
/ snovi...).
O, neee. Naježim se kad čujem za zeniks samo zbog toga što na njemu
neće foks pro. Jes' da dobro radi i f+, al' ni nalik.
/ I gos'n MBP-cobol-guru jsalai ima(o je) iskustva sa njima (zadrugom).
/ ;)
Na kraju će se ispostaviti da se u onom golubarniku izređalo pola
Sezama.
Bue_ Ndragan
clipper.934ndragan,
/ Najbolje je ovo kopiranje ugraditi u meni kao opciju, a procedura bi
... u foks prou 2.0 bila nepotrebna, jer postoji naredba PACK MEMO.
clipper.935ndragan,
/ brojeve Ascii kodova i sve to izpreračunavam na digitrončetu mu da
Nisam mislio na digitron - čak, toliko daleko od toga, da sam morao da
proverim da li je ono gore baš moj tekst što si citirao, da ne
repliciraš možda nekom drugom.
Mislio sam na muljavine tipa " copy to radna for 'maca' $ upper(animal +
pet) .and. starost > 3 .and. between(rodjenje, š01.03.90ć, š31.03.90ć)",
pa vidiš da ti ne treba to, jer su zeznuli godinu, pa staviš " copy to
radna for 'maca' $ upper(animal + pet) .and. starost > 3 .and.
month(rodjenje) = 3 ", pa onda uvatiš radnu i daš 'calculate
avg(date()-rodjenje) to prosek' tek zato što te neko preko ramena
pitao kolko su stari oni mačići iz marta devedesete. Ili postepene
konverzije datoteka: prvo pretabaš jedno od sumnjivih polja, pa drugo i
tako redom, i svaki put otkucaš samo dva tri reda i pogledaš šta si
uradeo.
A digitron se ionako nalazi u sistemskom meniju.
clipper.936ndragan,
/ Da ti pomognem, clipper jednu lepu stvar koja se zove clipper
/ debuger.
Sećam ga se, i veoma je dobar (S87). Jel možeš da izmisliš novu
promenljivu dok singl stepuješ kroz program? Da prošetaš kroz baze
(brauz tek da vidimo šta se događa), da pratiš promene u kritičnim
promenljivim i da im menjaš vrednosti? Jel' vidiš i sors dok radi? Ne
sećam se šta je sve imao, pa zato pitam. Al' nikad neće imati komandnu
liniju (tj komandni prozor) za vreme trebljenja, a to me spaslo više
puta - zaboravim da inicijalizujem neku promenljivu, pa između dva
koraka to uradim. Ili zaboravim da otvorim neku bazu, ili da kreiram
indeks. To mogu da uradim čak i u sred rutine za obradu greške; lepo
sve sredim i gledam šta se dalje događa. Naravno, ako mi se isto desi i
drugi put, opsujem sebe i opet produžim na opisani način.
/ smisla. Valjalo bi ipak prvo da se raspitaš kakve su mogućnosti
To i radim, samo sam izabrao ovaj način, nadam se da nije previše
potpaljivački. Ja se 'nako malo frljam sa "šta sve ima foks", pa onda
neko napiše kako to izgleda u kliperu itd - nekako mi se više sviđa
od uporednog testa i sličnog.
Mislim, posle Telix vs Telemate, Windows vs Gem, St vs
PC, mogli bismo da odvalimo jedno FoxPro 2.00 vs Clipper 5.01...
clipper.937nbatocanin,
> Pod pojmom bazični Kliper smatraš direktne pozive funkcija
> (tj. drugu stranu translejt direktiva)? Da li si negde
> pročitao garanciju Nantuketa da jezik ni na tom nivou neće
> da se promeni?
Ne samo "drugu stranu", jer se pretprocesiranje vrši iterativno, sve
dok postoje složene komande. Nisam pročitao garanciju Nantucketa, ali
sam više nego siguran da funkcije koje ne počinju sa __ neće biti
izmenjene: one se koriste i u normalnom radu i čak i minimalna
kompatibilnost podrazumeva netaknutost tih funkcija. Uostalom, tako
je bilo S87->5.0 (sa malim packama), pa ne vidim razloga da ne bude i
dalje. Ako ne bude, to je skoro samoubistvo. Funkcije koje počinju sa
__ možda neće ostati, ali to i nije važno, jer ih korisnik ne mora
koristiti. Ukratko, Clipper pretprocesor je sjajno sredstvo za
zadržavanje kompatibilnosti.
> Nisam razumeo narednu rečenicu. Kako se to 'ne dira stara
> funkcija nego označi kao zastarela?'
Pa, DBEDIT je stara funkcija koja je ostala samo zbog kompatibilnosti
- označena je kao "obsolete".
> Jednostavnost interaktivnosti je mnogo lepa stvar -- da li
> koristiš diBejz UZ Kliper? Kako 'sređuješ' stvari ručno,
> 'iz glave' kreiraš baze i tako to? Sve Kliperom ili...?
Imam neke svoje alatke, koristim samo DBU ponekad. Nekako mi se čini
da razvoj u interpeterskoj okolini imaju i nekih slabo uočljivih
mana. Na primer, kada je ciklus ispravka-proba-ispravka mnogo kratak,
korisnik se razmazi i *manje* razmišlja, po sistemu "valjda je ovako,
probaću", umesto da angažuje mozak, a tako se obično produžava
razvoj. Sećam se kad sam radio na veoma sporim računarima da sam
daleko pažljivije pisao programe nego na bržim. Ali, eto. Možda sam
staromodan ;)
> Koliko je virtuelna ta virtuelna memorija, usput?
Teorijski oko 64MB, a trpi dok imaš memorije na disku. Ja veoma
drsko kreiram velike nizove i stringove, ali mi 5.01 *nikad* nije
iskočio sa "Out of memory".
> ali kako se ponaša baš sa varijablama? Gde su kod njih
> granice? Da li je, generalno, njih manje bolno koristi
> umesto manjih datoteka?
Clipper ima poseban podsistem za rad sa velikim varijablama. Memorija
se alocira po potrebi, troši se EMS ili disk ako nestane prostora.
Poseban sistem skuplja neiskorišćen prostor i ponovo ga uvlači u
igru. Recikliranje se radi kad se obavlja neka od naredbi za čekanje
(InKey, ...). Po mom iskustvu, sve radi veoma lepo. Izgleda da 5.01
ima manje bagova od S87.
clipper.938nbatocanin,
Tačno je da nedostaje neki metod za analizu picture stringa. Ali
mislim da se stvar može srediti. Ovako, od oka padaju mi na um dva
rešenja:
1) Ako ima "@!" u picture, očisti se od funkcijskih oznaka i dobije
nešto kao "XX!!XXAA". Sa oGet:pos se može dobiti pozicija otkucanog
simbola, onda se nađe odgovarajući u picture stringu i poveća ako je
tamo "!".
2) Pustiš Clipper da radi umesto tebe: YU slovo pre upisivanja u
bafer zameniš sa "a", pa posle upisa pročitaš šta je u baferu. Ako je
"A", znači da tekući simbol treba aperovati, pa vratiš kursor i to i
uradiš!
clipper.939coja,
Interesujeme da li je moguce vezivati polja u Clipper-u (pre svega
memo-poljaa) preko hyper-teksta ili hyper-regiona.
Pozdrav, Coja
clipper.940d.petrovic,
:))))))))))))))))))))))))))))))))
Ă> A digitron se ionako nalazi u sistemskom meniju.
Citirano tek da se setiš da je na tvoju poruku :)
E, baš je zanimljivo s tobom o načinima i načinčićima. Pazi, tamo je bio
samo .EXE i aplikacija se startuje pod šifrom koja je šifrine šifre šifra, može
da se menja i drži se u polju u bazi. E, kad je neko izmenio i nije mogao da je
startuje, ja sam morao da pročitam to polje u bazi pa da odgonetnem šta treba
upisati pri startovanju programa. Svaćaš ?
Pozdrav, Dejan
clipper.941fric,
> Ako ste zainteresovani, spremiću pregled sadržaja datoteka.
Može, naročito onih koje smatraš upotrebljivim & vrednim pažnje.
Mene zanimaju 50ngch.zip (kakav li je to sad ng fajl ?) i
cl_yusrt.zip
p.s. Sad sam se logovao na Rhinoceros i video da su uveli pretplatu
tako da nema ništa od downloada.
clipper.942ppekovic,
>> Sećam ga se, i veoma je dobar (S87).
Govorim o CLD-u iz 5.01 verzije koja je u upotrebi već par
godina.
>> Mislim, posle Telix vs Telemate, Windows vs Gem, St vs
>> PC, mogli bismo da odvalimo jedno FoxPro 2.00 vs Clipper 5.01...
Pa to već traje x meseci, samo FOX-u nešto slabo ide ;))),
šalu na stranu,...
Da bi neko prešao sa jednog kompajlera koji koristi godinama,
ima veliku biblioteku svojih rutina za njega, o iskustvu da ne
govorimo, potrebno je da se pojavi proizvod koji je suštinski
bolji od njega. Sve što si do sada naveo o FOX-u je zaista
zanimljivo i ima zanimljivih rešenja, ali na žalost ničeg
revolucionarno novog, ničeg toliko dobrog zbog čega bi neko
ostavio clipper i sve ono što sam pomenuo na početku poruke.
I ne zaboravi nije stvar u clipper vs. FOX Pro, nego u
clipper+iskustvo+biblioteke+korisnici vs. FOX Pro+šta?
Paya
P.S. Ne koristim clipper već više od godinu dana, dakle celu stvar
posmatram dosta objektivno i ono što sam rekao nisu navijačke
parole nego podsećanje da kad se priča o nekom proizvodu onda ne
sme da se zaboravi i njegovo okruženje.
clipper.944janko,
> / makro supstitucije se nikako nisu mogle koristiti onako
> divlje / kao u dBase programima.
>
> A upravo divlje makro supstitucije čine lepotu ovakvih
> jezika.
Ja nisam pisao ništa protiv njih, kada se koriste tamo gde im
je to 'prirodna' (ili neizbežna) okolina. Konkrteno, u dibejzu
(na foksu još nisam radio) mogu biti vrlo korisne. Sećam se
kako sam, svojevremeno, u vojsci, pisao 'generator POV
predavanja' ;> (po narudžbini oficira, naravno). Makroi su
radili pola posla. :) Druga polovina je bila popuniti baze
podacima, naslovima i međunaslovima, a onda izmišljati
tekstove. Rezultat: mogao sam da naštancujem odjednom ohoho
tekstova. :) Vuk kod Špiljka je za mene bio malo dete. ;)
> linkeru sve to postaju nekakve adrese i od onih blesavih
> imena koje smo nadenuli promenljivim u svom programu ne
> ostaje ništa. Da ne spominjem
E, to sa blesavim imenima... Da znaš da mi se ne sviđaju te
fore... Ako svi u firmi to radite, kako popravljate aplikacija
koje nista pisali sami? Ja, bogami, bih i svoju teško umeo da
popravim, posle onih zamena koje si opisao skoro...
clipper.945janko,
> razvoj. Sećam se kad sam radio na veoma sporim računarima
> da sam daleko pažljivije pisao programe nego na bržim.
> Ali, eto. Možda sam staromodan ;)
Možda sam i ja. :) Slažem se sa tobom. A kada još napraviš
dovoljno programa, onda konačno ukapiraš da je koncept 'nemam
vremena da uradim kako treba, ali imam, da uradim još jednom
ispočetka ako primetim greške' isto tako nezgodan... Uz sve to,
ove poslovne aplikacije su nezahvalne za neka noramlna
planiranja, jer niko živ ne zna šta će mušteriji pasti na pamet
sutra (pa ni ona)... Tu je vrlo značajno da aplikacija koju
pišeš može lako da se menja... (to uglavnom zadovoljavaju ovi
dibejzlajk jezici) a ako još hoćeš da si siguran da nećeš
morati da dolaziš i sutra, kada oni i probaju da primene
program, da ti jezik u kome pišeš obezbedi i da si siguran da
je on već proverio sve što može da proveri -- to ovi jezici
slabo zadovoljavaju. E sad, ovi pravi interpreteri (sa
okolinom) nema šanse da to ikad rade, po prirodi stvari... a
kandidat za tako nešto bio je Kliper, ali... Sad mi pade na
pamet, sa Klarionom nisam nikad radio, da li je on pravi
kompajler ili...?
>> Koliko je virtuelna ta virtuelna memorija, usput?
>
> Teorijski oko 64MB, a trpi dok imaš memorije na disku. Ja
> veoma drsko kreiram velike nizove i stringove, ali mi 5.01
> *nikad* nije iskočio sa "Out of memory".
>> ali kako se ponaša baš sa varijablama? Gde su kod njih
>> granice? Da li je, generalno, njih manje bolno koristi
>> umesto manjih datoteka?
>
> Clipper ima poseban podsistem za rad sa velikim
> varijablama. Memorija se alocira po potrebi, troši se EMS
> ili disk ako nestane prostora.
A kada mašina nema EMS (286 čegrtaljke)? Da li je i dalje bolje
od pravih datoteki? Mislim, da li ti se događalo da ti upadne u
'thrashing' (ono: ovo svapuje na disk, treba mu ono, a onda ono
svapuje na disk, treba mu ovo, pa skoro do sudnjeg dana...), u
koji ne bi upao da si 'sve držao pod kontrolom?'
Ovi BC++ 3.0 programi su, naprimer, pisani tako da imaju nešto
kao virtuelni kod (a podaci moraju da su u memoriji, ako sam
shvatio koncept, za razliku od ovog Klipera) pa se nekad
zaglupe i kad imaju na raspolaganju napr. 1.7MB. A takav
simptom zaglupljivanja opisuje i ZZ na MSC 7.0 i (valjda) 4MB,
u nekim slučajevima?
clipper.946pjankovic,
> Pa vidi DPaune, ako ti treba samo pregled datoteke, recimo
> pregled izvestaja pre stampanja, napravi TBrowse, i
> nabudzi mu GoTopBlock,
A šta ako su linije u tom tekstu duže od 80 karaktera? To može da
se desi ako se na papiru A4 štampa CONDENSED ili ako se koristi papir A3
(136 karaktera u liniji bez CONDENSED).
clipper.947bdm.,
## (lakse mi ovde da pitam nego da caskom probam ;)))) ) jel se to bese
## eliminise sa PACK ?
Nisam probao ali po Spence NE. Zato on preporucuje umesto PACK
koriscenje COPY...
BDM.
clipper.948dusanp,
=> Da ne spominjem da je nemoguće izmisliti novu promenljivu
=> u toku izvršavanja programa, predati _ime_ procedure kao
=> parametar drugoj proceduri... što sve može da se radi u
=> DB jezicima.
Zar u C-u ako mi zatreba nova promenjljiva ne mogu da je
alociram? Ili, zar se ne moze predati pointer na proceduru
kao parametar drugoj proceduri? Ispravi me ako gresim, ali
mislim da sve mogucosti koje si nabrojao postoje u C-u i
rade na sasvim legalne nacine...
clipper.949snemcev,
>> Piše, i tako je. Ponekad je i korisno.
Jel može jedan primer za ovo 'ponekad'? Ja uz najbolju volju ne
mogu da se setim ni jedne korisne primene ove mogućnosti.
clipper.950ciki,
**>> Koliko muke, a kako prosta stvar.
**
** Ima još jedno rešenje, bez ijedne programske linije:
** da se napusti YU prostor ...
**
** dPaun
******************
Eh nije to zanimljivo. Fino je to uraditi u assembleru ali ja sam
"Clipper programer", pa kad su ljudi dali ceo
listing, rekoh daj da probam, nista nemam da izgubim.
P.S. Moze li tvoja metoda da digne nesto u fori "!9999X!!XX!"
Đ1231đŠžčćč,
znaci bez obzira kakav je PICTURE ?
P.P.S Smanjio sam listing,pa sada dodatak sve skupa iznosi
10 linija.
P.P.P.S. Tek sada procitah nbatocanin-ovo resenje. Koja
zadivljujuca slicnost.
Pozdrav Kikile!
Deo listinga---------
......................
..................
if (get:Picture == "č!" .or. SUBSTR(get:Picture,get:Pos,1) == "!")
if at(cKey,"žčćšđ") > 0
get:Overstrike(substr("čžĆŠĐ",at(cKey,"žčćšđ")),1)
else
get:Overstrike(cKey)
endif
.................................................
clipper.951d.petrovic,
Ă> l' znaš koliku sam ribu upecao pre neki dan? ;)
A, jel ovoliiiiiiiiiku ? ;)) To bre nisu hiperbole, to je iživljavanje. Pa
sad će me nateraš da nađem neku bazu od xx000 radnika pa da pušćim ovu 286/16
sa jaaaadnim diskom od 27 ms pa da ti šaljem testove :)
clipper.952broker,
> / replace z->prez with yuupper(z->prez)
> =======
> Ukrasovcima skrećem pažnju na ovaj detalj. Pisano '88 u
> leto.
Da nije pisano u leto '88 optuzio bih te za kradju imena funkcije.:)))
clipper.953nbatocanin,
> Ma ljudi bre, preterujete više sa tom sporošću klipera !!!
> Za šta se Kliper koristi nego za baze podataka i šta rade
> nego komuniciraju sa nekom prosečno obdarenom ženskom.
Nisam ni rekao da je spor u operacijama sa bazom podataka: spori su
pozivi funkcija, što u većini slučajeva ne smeta, ali kao pišeš neku
analizu dužeg stringa (konverzije, ...) ili nešto sl., to se mora
raditi na C-u ili asembleru.
clipper.954nbatocanin,
> Ma to smo već zaključili ! Izgleda da si ti samo nešto
> preskočio.
Nismo se baš najbolje razumeli, ali dovoljno. Ipak, ona naredba ne
*dodaje* memo, zar im je bilo teško da provere da li nova vrednost
(uzgred, potpuno ista kao i stara) može da stane u stari prostor?
> E, sad (lakše mi ovde da pitam nego da časkom
> probam ;)))) ) jel se to beše eliminiše sa PACK ?
Jok!
clipper.955nbatocanin,
Evo programčića koji ja koristim za to. S obzirom na izgovor, pre je
čarapanska nego piroćanska varijanta ;)
ntoc.zipclipper.956kanda,
>> A šta ako su linije u tom tekstu duže od 80 karaktera? To može da
>> se desi ako se na papiru A4 štampa CONDENSED ili ako se koristi papir
>> A3 (136 karaktera u liniji bez CONDENSED).
Naravno, u praksi retko kad ceo izvestaj stane na ekran. Problem je resen
kao kod tekst-editora, strelicama levo i desno pomeras 'prozor'.
Kodni blok za tu (jedinu) kolonu ustvari izgleda ovako :
{|| PadR(SubStr(_ReadLn(), nPos), nWi)}
Gde je nWi sirina prozora, recimo 80. Kada pritisnes strelicu desno,
nPos se uveca za npr. 16, kad pritisnes strelicu levo umanji se za isto
toliko. Prilikom ovih horizontalnih pomeranja treba poslati i
RefreshAll() poruku.
clipper.957dpaun,
>> 5) osećati se konačno kao YuEuroPPejac!
Braćo i sestre, #$%$%#%ž&*&&&pičkr!!!!!!!!!
x,y Get Niz PICT "č!" VALID Dig() //Radi
x,y Get Niz1 //Ne radi !!!!
READ
*
FUNC Dig
GetActive():varPut(YUpper(GetActive():buffer))
RETURN .T.
/***
* GetApplyKey()
*/ .
.
if "č!" $ get:picture //Ovo domentuto po savetu brata Nenada
cKey:=YUpper(cKey)
endif
.
.
A ovako psuje Clipper kada se pokuša ukuc u Niz1:
BASE/1109 Argument error: INSTR
GETAPPLYKE(268) //Ovde je izmena nBatocanina u GETSYS.PRG
GETREADER(130)
READMODAL(88)
Prema NG BASE/1109 se odnosi na $.
Predragi $ brate Nenade: uzmi ovaj GETSYS, pa s njim na kanal i doradi ga
da me sada pusti ljudski da čukam i MaliYu kad mi se ćefne. Al požuri dok
komšika Vilarija ima onakvo mišljenje o tebi. (Kad sam joj onomad pričao
kakav si ti Klipper majstor, tako su joj oči bljesnule da je Vita šumar
pomislio da se šuma upalila).
dPaun.$
clipper.958janko,
> A, jel ovoliiiiiiiiiku ? ;)) To bre nisu hiperbole, to je
> iživljavanje. Pa sad će me nateraš da nađem neku bazu od
> xx000 radnika pa da pušćim ovu 286/16 sa jaaaadnim diskom
> od 27 ms pa da ti šaljem testove :)
Ma, svašta. Ja ne kažem da ne može brže od onoga što sam rekao,
čak, suprotno! Moja rečenica je bila 'jedan radi dva sata a
drugi za jedan minut na XT-u.' E, ako te zanima da vidiš taj
što radi dva sata, mogu da ti obezbedim taj program, pa da
vidiš koliko će tvoj AT da se muči (a onda sve podeli bar sa
šest, pa vidi koliko je na XT-u ;) Ne, nisam ga ja pisao. Ali
treba ga videti da bi se verovalo. ;)
clipper.959d.petrovic,
Ă> drugi za jedan minut na XT-u.' E, ako te zanima da vidiš taj
Ă> što radi dva sata, mogu da ti obezbedim taj program, pa da
Fala ti lepo, video sam već jedan takav. Davno je to bile ali je odprilike
:
select 1
use radn
select 2
use sta
go 1
select 1
zbir=0
mrdrpr=lastrec() ;>>>>> šta ako je zapis obrisan
for i = 1 to mrdrpr
select 1
go mrdrpr
x=NEKO_TAMO_POLJE
select 2
y=NEK_TAMO_POLjE
zbir=zbir+(x * y)
next
prosek=zbir/mrdrpr
....
Da ne kažeš da tvrdim da je Kliper brz, samo kažem da treba kritične
delove ljudski napisati.
Pozdrav, Dejan
clipper.960neman,
Evo konačno obećanog pregleda.
P.S.
50NGCH.ZIP je NORTON GUIDE za *.CH datoteke
spisak.arjclipper.961nbatocanin,
> A kada mašina nema EMS (286 čegrtaljke)? Da li je i dalje
> bolje od pravih datoteki? Mislim, da li ti se događalo da
> ti upadne u 'thrashing' (ono: ovo svapuje na disk, treba
> mu ono, a onda ono svapuje na disk, treba mu ovo, pa skoro
> do sudnjeg dana...), u koji ne bi upao da si 'sve držao
> pod kontrolom?'
Dosta dugo sam radio na 286/12 sa 640K RAM-a i nije mi se to desilo.
Dešavalo se da neke operacije budu spore, ali nikakve mrtve petlje.
Doduše, nisam to nešto posebno testirao: samo sam, osim redovnih
problema, radio i ovako nešto:
FOR i := 1 TO 4000
a[i] := Space(40000)
NEXT
Drlja po disku, ali radi! Crkava kad nestane prostora za swap.
clipper.962nbatocanin,
> Jel može jedan primer za ovo 'ponekad'? Ja uz najbolju
> volju ne mogu da se setim ni jedne korisne primene ove
> mogućnosti.
Na primer, radiš parče programa koje radi nešto sa nizom. Svuda se na
niz referišeš sa NIZ[]. Onda ti se ukaže potreba da radiš sa nekim
drugim nizom. Tada jednostavno napišeš na početku bloka NIZ := NOVI
(pod nekim uslovom, verovatno). Pošto je ovo samo izmena pokazivača,
operacija je maksimalno brza. Ovo se mnogo često koristi koda rada sa
objektima, koji su veoma slični po strukturi. Verovatno bi se mogao
smisliti i "čistiji" primer.
clipper.963janko,
> FOR i := 1 TO 4000
> aŠiĆ := Space(40000)
> NEXT
>
> Drlja po disku, ali radi! Crkava kad nestane prostora za
> swap.
Taj disk je bar 200 MB?
Inače, ovo me već fascinira, ako radi kako treba. Izuzetno
zgodna stvar!
clipper.964snemcev,
>> Piše, i tako je. Ponekad je i korisno.
Jel može jedan primer za ovo 'ponekad'? Ja uz najbolju volju ne
mogu da se setim ni jedne korisne primene ove mogućnosti.
clipper.965nbatocanin,
> {|| PadR(SubStr(_ReadLn(), nPos), nWi)}
Odlična ideja! Jesi li isprobao koliko ovo brzo radi? Ako DejanR ovo
ne objavi u Bajtovima, obavezno ide u Savetnik.
clipper.966nbatocanin,
> Prema NG BASE/1109 se odnosi na $.
Prvo, nije ti potrebna funkcija Dig ako izmeniš GETSYS.PRG. Clipper
se buni ako je oGet:Picture NIL, pa se računa "@!" $ NIL, sto je
neispravno. Znači, treba izmeniti GETSYS.PRG ovako:
IF get:picture <> NIL .AND. "@!" $ get:picture
cKey := YUpper(cKey)
END IF
a kad koristiš:
@ x,y GET cVar PICTURE "@!"
Ovo naravno neće raditi za složenije picture stringove, kao što je
rečeno.
clipper.967ciki,
Ho!
Pisem ovo a ruka mi drhti od tuge i bola, barabo jedna ovakvog si
coveka nasao da falsifikujes,...
Eh sada, da li je tacno ili je greska u mome sorsu da LIB
SUBNTX(preuzeto sa sezama) radi samo 3-4 puta u toku izvrsavanja 1
programa?
P.S. Kako napreduje menjanje GETSYS-a bruder dpaun-e ? ;>>>
clipper.968bulaja,
│Eh sada, da li je tacno ili je greska u mome sorsu da LIB
│SUBNTX(preuzeto sa sezama) radi samo 3-4 puta u toku izvrsavanja 1
│programa?
└───
Skoro tacno. Mozes je koristiti samo 5 puta.
clipper.969dpaun,
>> P.S. Kako napreduje menjanje GETSYS-a bruder dpaun-e ? ;>>>
žini mi se da je stvar konačno rešena sa amandmanom brata nBatocanin-a.
Bar za PICTURE "č!" (vidi nove poruke vezane za ovaj problem).
dPaun
clipper.970dpaun,
>> treba izmeniti GETSYS.PRG ovako:
>>
>> IF get:picture <> NIL .AND. "č!" $ get:picture
>> cKey := YUpper(cKey)
>> END IF
>>
Pa kaže, konačno:
Za podizanje MalihYu u toku kucanja, dakle kad je PICT "č!",
valja uraditi sledeće:
1) iz poruke 5.894 skinuti yu.obj;
2) iz gornjeg primera videti kako izgleda kompletna izmena i prepravka
GETSYS.PRG-a; videti i poruku 5.919;
3) GETSYS clipperovati obavezno sa /m/n/w;
4) ulinkovati yu.obj i getsys.obj u aplikaciju;
5) nikakve druge kerefeke nisu potrebne (funkcije DigniGa i slično);
6) radi sigurno u slučajevima kad je get klot, i kad je pcture "č!";
7) za ostale slučajeve pitajte i vi malo, braćo. Ima valjda još koja
neznalica ovde, a?
dPaun.VelikiYu!
clipper.972ratman,
Na koji se nacin moze niz sacuvati u .MEM file?
Nizovi se, kako mi se cini, ne mogu direktno sa SAVE-ovati...
Pozdrav,
Dejan
clipper.973goxx,
■ Na koji se nacin moze niz sacuvati u .MEM file?
■ Nizovi se, kako mi se cini, ne mogu direktno sa SAVE-ovati...
Pogledaj malo funkcije FT_SAVEARR i FT_RESTARR u Nanfor biblioteci, ali
pazi da nemaš kodne blokove u nizu koji snimaš. Ime fajla u koji se
snima odredjuješ sam pa prema tome može se zvati i *.MEM.
Goran
clipper.974kanda,
>> Odlična ideja! Jesi li isprobao koliko ovo brzo radi? Ako DejanR ovo
>> ne objavi u Bajtovima, obavezno ide u Savetnik.
Ne samo da sam isprobao, nego to koristim vec 6-7 meseci. Sto se brzine
tice, nalazim da je prihvatljiva; istini za volju, gotop, gobottom i skip
funkcije sam za svaki slucaj napisao u C-u.
clipper.975kanda,
Juce sam bio kod jednog kolege, i primetio da covek koristi neke
neverovatne egzibicije kako bi naterao RMAKE da prevede SVE datoteke.
Dovoljno je dodati prekidac /f. Usput, tek posle sam primetio da se
u NG prekidac /f i ne pominje; ipak, RMAKE /? ga pokaze.
clipper.976bulaja,
│Juce sam bio kod jednog kolege, i primetio da covek koristi neke
│neverovatne egzibicije kako bi naterao RMAKE da prevede SVE datoteke.
│Dovoljno je dodati prekidac /f.
└───
Dovoljno je i obrisati sve .OBJ :).
Inace koristim Borland-ov make, tamo je make -B (build).
clipper.977dpaun,
Imam jedno (dopunsko) pitanje, vezano za GETSYS.PRG.
Kada se izvrši BiloKojaIzmena u GETSYS.PRG - na šta inače vlasnici
Clp-a imaju poravo - da li je neophodno da se ceo GETSYS.PRG prevede i
linkuje, ili ima neki (kulturniji) način da se samo ta promenjena
funkcija uključi u MojProg, ili u neku od službenih biblioteka.
I kako.
dPaun
clipper.978ndragan,
/ nadamo da će autor to čuti i "srediti", pa nam poslati ispravnu
/ verziju.
Bravo! Rutina je dosad odradila bar desetak hiljada puta i niko nije
primetio. Preneo sam autorima, rekli su 'jel? jeeeebo te bog, aj sredi
to ako stigneš'. Mislio sam danas, ali sam zaglavio u SORu... pa, ovih
dana.
Inače, prolaze i gore stvari. U ovdašnjem komunalnom štampaju obračun
vazdušarine na predštampanim obrascima, na kojima je otisnut i faksimil
onog četvorojezičnog pečata velikog kao šolja za kafu. E, taj pečat je
naopako - kao u ogledalu. Za nekoliko godina niko nije primetio.
clipper.979ndragan,
/ korisnik se razmazi i *manje* razmišlja, po sistemu "valjda je ovako,
/ probaću", umesto da angažuje mozak, a tako se obično produžava
Pa baš i ne. Kritično parče lokalizujem u neku manju rutinu, pa je
isprobam u nekoliko ubrzanih ciklusa. Ako ne proradi iz prve, proradi
iz najviše pet-šest iteracija, što u principu znači da buljim u editor
minut-dva (mentalno debagiranje), parkiram 'set step on' na mesto gde
sam uočio da me rutina ne sluša, pokrenem aplikaciju (ili samu rutinu,
ako je nezavisna) i posmatram šta se događa od onog mesta. Tako uspevam
da rasturim i logički vrlo komplikovane situacije, i najveći bag koji
ostaje posle svega je što zaboravim da iz završne verzije obrišem onaj
'set step on'.
Dakle: 'valjda je ovako, da vidimo', ali na užim delovima, tamo gde ima
smisla, i gde je brže od ručne analize.
Bue_ Ndragan
clipper.980ndragan,
/ je on već proverio sve što može da proveri -- to ovi jezici
/ slabo zadovoljavaju. E sad, ovi pravi interpreteri (sa
U jezicima koji dozvoljavaju makro zamene za vreme izvođenja (dakle ne
za vreme kompajliranja!) uvek imaš mogućnost da iznenadiš interpreter;
jedina varijanta za kompletno testiranje je da _prođeš_ kroz sve
budžake ;(.
clipper.981ndragan,
/ fore... Ako svi u firmi to radite, kako popravljate aplikacija
/ koje nista pisali sami? Ja, bogami, bih i svoju teško umeo da
Pa, ono što si video bi trebalo da ti da ideju - sve je u menijima,
unosima i izveštajima; problem unakrsnog održavanja je samo tamo gde
postoje (čak i van menija, iz opravdanih razloga) procedure koje melju
podatke - preračuni, obrade, kao što je u LD i u nekim varijantama
materijalnog: to ne diram. A postoje konvencije o tome šta se kako
zove; rutina koja obrađuje ceo dokument posle unosa svih stavki u
jednoj grupnoj masci ima tačno određeno ime; imena svih izveštaja su
dostupna iz generatora dokumentacije za meni itd. Sve je vrlo jasno, a
sama imena... pa jeb* ga, i programeri imaju dušu.
clipper.982ndragan,
/ mislim da sve mogucosti koje si nabrojao postoje u C-u i
Hteo sam da kažem da u skroz kompajliranim jezicima ne možeš da kažeš
da se, recimo, izgeneriše slučajno ime promenljive... evo ovako:
x=rand()
x1='T'+strr(x) && neka funkcija STRR od broja izvadi prvih 6 cifara
&& i neka je sad x1='T457455'
&x1='nešto'
I posle ovoga u programu postoji string promenljiva T457455 koja ima
vrednost 'nešto'. Ako je to izvodljivo u Ceu, tim bolje. Od Cea znam
samo ono što sam pre 4 godine pročitao (K&R) i što tu i tamo pročitam
na Sezamu; u to vreme još nisam sasvim shvatao kakvo oružje su makro
zamene.
Vidi i ovaj primer:
sn=metod && polje iz baze; sadrži '0','1' ili '2'
do racun&sn && poziva se rutina racun1, racun2 ili racun0
Da bude još lepše, racun2.prg uopšte ne mora da postoji kad se pokrene
aplikacija; aplikacija može sama da ga napiše, a integraljena okolina
će ga kompajlirati u trku.
Dobro je ako je ovo takođe izvodljivo u Ceu (za ovo drugo sumnjam);
alatka je moćna, a u ruke Mandušića Vuka...
Bue_ Ndragan
P.S. Ovo mi je promaklo:
/ alociram? Ili, zar se ne moze predati pointer na proceduru
Pointer, ok. Ja predajem ime procedure u string promenljivoj ili u
izrazu; procedura to prima kao string parametar; negde u njoj se nalazi
makro koji raspakuje sadržinu tog stringa i to mu je ime procedure koju
će ova pozvati. Ovako:
prg='zzv'
...
do proc1 with 'bz'+prg
...
procedure proc1
para _what
...
do &_what && e sad negde treba da postoji procedura bzzzv
&& i ona će se izvršiti
clipper.983ndragan,
/ startuje, ja sam morao da pročitam to polje u bazi pa da odgonetnem
/ šta treba upisati pri startovanju programa. Svaćaš ?
Kad mi život postane nedovoljno komplikovan, zvaću te :)
clipper.984ndragan,
/ revolucionarno novog, ničeg toliko dobrog zbog čega bi neko
/ ostavio clipper i sve ono što sam pomenuo na početku poruke.
Nije mi ni bila namera da preobraćujem. Uostalom, bivši kliperaši budu
loši foksovci, bivši foksovci loši kliperaši i obratno. Ovo je više
bilo "komšija, šta ima novo kod tebe? evo nama se omacila mačka".
/ clipper+iskustvo+biblioteke+korisnici vs. FOX Pro+šta?
To isto na drugom kraju, isto takođe. To što većina korisnika foksa
pokušava da radi bez biblioteka, jeste njihov problem. Biblioteka je
nužna i važna. Znam to, jer nas dvojica (manje više) održavamo našu
zvaničnu biblioteku u firmi, i veoma mi je poznata problematika tipa
'jel da pišem lokalnu verziju il da čačkam sistemsku, a da li to još
neko koristi pa da mu ne pokvarim...' i potreba za kompatibilnošću itd.
Na kraju ću ja znati sve što me zanimalo o kliperu (opet ne dovoljno) i
kliperaše o foksu, a može tu da kresne i koja idejica... nije na odmet.
clipper.985ndragan,
/ for i = 1 to mrdrpr
/ select 1
/ go mrdrpr
Jel' ovaj hormonalan što je to pisao? N puta množi polje iz entog sloga
u jednoj bazi poljem iz jednog istog sloga u drugoj bazi, to sabira i
deli opet sa n? Ili nije korektno prekucano?
žak i da nije, ovo je stvarno bez veze.
clipper.986d.petrovic,
Ă> / for i = 1 to mrdrpr
Ă> / select 1
Ă> / go mrdrpr
Ă>
Ă> Jel' ovaj hormonalan što je to pisao? N puta množi polje iz entog
Ă> sloga
Mrzi me da tražim, da vidim da li sam BAŠ TAžNO prekucao, BAŠ to
ili nešto BAŠ SLIžNO sam video svojim očima kad sam se posle pitaj
boga koliko vremena vratio i video da DBase (to je radilo u Dbase
III) još nije završio. To sam dao samo kao primer da ne treba suditi
o brzini po NEKIM programima koje vidiš.
Pozdrav, Dejan
clipper.987janko,
> / je on već proverio sve što može da proveri -- to ovi jezici
> / slabo zadovoljavaju. E sad, ovi pravi interpreteri (sa
> U jezicima koji dozvoljavaju makro zamene za vreme
> izvođenja (dakle ne
Nijedan _pravi_ jezik koji se kompajlira to ne dozvoljava. ;)
A interpreteri su interpreteri...
clipper.988bcetina,
Kako kreirate maske za ekran, mislim peške sa SAY ili neki UTL i koji?
clipper.989d.petrovic,
Ă> Kako kreirate maske za ekran, mislim peške sa SAY ili neki UTL i
Ă> koji?
Ja sve pešice kroz ceo program (ne svaki put isto, sve u
delovima u par funkcija), a možda bi trebalo sa .FMT datotekama. O
njima nemam pojma, u svemu što sam do sada radio (nije baš malo :)) )
išao sam pešice.
Pozdrav, Dejan
clipper.990dusanp,
=> x=rand()
=> x1='T'+strr(x) && neka funkcija STRR od broja izvadi
=> prvih 6 cifara && i neka je sad x1='T457455'
=> &x1='nešto'
=>
=> I posle ovoga u programu postoji string promenljiva
=> T457455 koja ima vrednost 'nešto'.
Vidi, to jeste lepo i efektno, ali je još uvek
funkcionalno zamenljivo sa alociranjem promenljivih.
=> sn=metod && polje iz baze; sadrži '0','1' ili '2'
=> do racun&sn && poziva se rutina racun1, racun2 ili
&& racun0
Takođe, kada ovako nešto zatreba, jednostavno se unapravi
struktura koja sadrži adrese rutina za obradu, a onda se pozi-
va rutina broj sn, znači dosta slično ovome.
Ja razumem moć i lepotu makrozamene u toku rada programa,
ali jednostavno smatram da je usporenje rada programa (navodno
zbog toga ?) preveliko da bi bilo opravdano. To pričam iz onoga
koliko sam radio sa kliperom.
Pa da, reći ćeš ti, tako mi i treba kad radim u kliperu.;))
clipper.991nbatocanin,
Ako želiš da podeliš svoju ideju sa drugima, pošalji kratak opis i
listing. Znači, ne treba sve, nego samo osnovne stvari.
clipper.992djoskovski,
-> PRIVATE bla_bla := tra_la_la := tandara_broc := sc
-> ...
Posle ovog dobijemo plus tri pointera koji pokazuju
na isto memorisko podrucje u kojem se nalazi JEDAN NIZ
->
-> i nizove popunjavam kasnije iz programa u stilu
->
-> ...
-> AADD( bla_bla, 'prvi niz' )
Bez razlike kojim pointerom pristupamo JEDNOM nizu
posle ovog LEN(bilo_koji_niz)=1 , odnosno niz dobija
svoj prvi element.
-> AADD( tra_la_la, 'drugi niz' )
Pristupamo ISTOM nizu preko drugog pointera
posle ovog LEN(bilo_koji_niz)=2
-> AADD( tandara_broc, 'treci niz' )
Pristupamo istom nizu preko treceg pointera
posle ovog LEN(bilo_koji_niz)=3
It is FEATURE
Za kopiranje niza u Clipper-u se koristi funkcija ACLONE
koja kreira kopiju kompletne strukture niza
Pozdrav, D.Joskovski
clipper.993djoskovski,
Clipper,Fox i video trake
Vec duze vremena pratim diskusije u okviru ove teme u stilu
FOX vs CLIPPER, dBASE vs CLIPPER ,kompajleri ili interpreteri i sl.
mislim da je to u redu, ali da se sa tim ne treba preterivati,
pa evo ukratko mojih stavova:
1. Verzija Clipper 5.0 (5.01) "pretstavljanjem" "kodnih blokova",
predefinisanih objekta, napustila je stari kurs Clippera 87 i pored
vertikalne kompatibilnosti.
2. Usvajanjem STATIC i LOCAL deklaracija ,switceva pri kompajliranju
/w/a/n ostvaren je KORAK prema jezicima koji se kompajliraju. (ko razume
shvatice ;) )
3. Usvajanjem mocnog preprocesora, ostvaruju se dva cilja
- lakse programiranje i citliv kod (lakse odrzavanje)
(vazno korisnicima CLIPPERA)
- lakse unapredjenje citavog sistema
(vazno NANTUCKET-u)
4. Fox-BASE , FOX-pro ,FOX-pro for LAN ( pa ti ljudi su i ime promasili
pa su posle morali da menjaju, dobro ostalo je ono FOX, lukavo zar,ne? )
Dobro, salu na stranu fox je pre 4-5 godina bio jedino resenje za
zaradu, ako korisnik vise korisnicke aplikacije nije hteo da plati LAN
hardver (Ko je pre 4-5 godina kupovao softver ? a i danas?), ali svatam
Fox-ovce, nemaju ljudi temu a bogami ni direktorijum, pa nam dolaze u
goste a kad dodjes u goste, zna se hvalis se.
toliko, interesuje me vase misljenje o prva tri stava, cetvrti je ..
(i programeri imaju dusu)
Pozdrav svima ( i gostima)
D. Joskovski
clipper.995dpaun,
>> 7) za ostale slučajeve pitajte i vi malo, braćo. Ima valjda još
>> koja neznalica ovde, a?
Ova neznalica - čekajući da sine sunce pa da ode u šumu na drva -
igrala se sa picture ovih dana. Bilo je to pravo otkriće, jer nigde ne
piše da se picture može menjati do mile volje. A moja mila volja imala
je jedan ozbiljan razlog da to radi: u delu MojeAplikacije, koja
obrađuje bibliografske jedinice, reference autora standardizuju se
tako što se prezime unosi velikim slovima, a ime po šablonu "prvo
slovo veliko a ostala mala". Međutim, kod imena se javljaju razne
situacije (inicijali obični, pa inicijali tipa Lj.Nj., pa dvodelna
imena kao "Paun Es", pa Ana-Marija itd.). Koristeći već stečeno
iskustvo i rešenja obrazložena u ranijim porukama (vidi 5.970), stvar
sam rešio na sledeći način:
č .. GET prezime PICT "č!"
č .. GET ime PICT "č*" //ovo je MojaMaska
Niže je navedena dopuna listinga getsys.prg-a da bi ovo radilo.
/***
* GetApplyKey()
//ovo je originalni kod
if (get:type == "N" .and. (cKey == "." .or. cKey == ","))
get:ToDecPos()
else
// ovo je dopuna nBatocanina
if get:picture <> NIL .AND. "č!" $ get:picture
cKey:=YUpper(cKey) //YUpper() se nalazi u Yu.Obj
endif
// ovo je dopuna dPauna
if get:picture <> NIL .AND. "č*" $ get:picture
if get:pos == 1
cKey := DigniYu(cKey)
else
if get:pos>2.and.substr(get:buffer,get:pos-1,1)=="."
cKey := DigniYu(cKey)
elseif get:pos>1.and.;
(substr(get:buffer,get:pos-1,1)==" ".or.;
substr(get:buffer,get:pos-1,1)=="-")
cKey := DigniYu(cKey)
else
cKey := Lower(cKey)
endif
endif
endif
...
...
func DigniYu(cKey)
do case
case cKey == "đ"
cKey := "Đ"
case cKey == "ć"
cKey := "Ć"
case cKey == "š"
cKey := "Š"
case cKey == "ž"
cKey := "č"
case cKey == "č"
cKey := "ž"
otherwise
cKey:=UPPER(cKey)
endc
return (cKey)
dPaun.ProgramerNaturalista
clipper.996ndragan,
/ Nijedan _pravi_ jezik koji se kompajlira to ne dozvoljava. ;)
Jako sam lepo zadovoljan lažnjakom dok radi bolje od pravog :).
clipper.997ndragan,
/ Kako kreirate maske za ekran, mislim peške sa SAY ili neki UTL i koji?
FMT iz dBašića pa onda naš generator čita te .FMT fajlove i još neke
naše .DBF fajlove i generiše sorsove za unos. Zvuči gadno, ali šljaka.
clipper.998andrejl,
>│ FMT iz dBašića pa onda naš generator čita te .FMT fajlove
>│ i još neke naše .DBF fajlove i generiše sorsove za unos.
>│ Zvuči gadno, ali šljaka.
Meni zvuči lepše od glupog UI-a pa onda prođe kroz mene,
pa onda prođe kroz mene, pa onda ...
bye, andrejl
clipper.999fric,
> /w/a/n ostvaren je KORAK prema jezicima koji se kompajliraju.
> toliko, interesuje me vase misljenje o prva tri stava,
Sve je to krasno, ali džabe Nantucketu i vertikalna
kompatibilnost, i pretprocesor, blokovi, objekti
i ostalo, kad radi pomenute kompatibilnosti
nije uveo strogu tipiziranost promenljivih
i kontrolu istih pri kompajliranju.
Mislim da bez toga nema govora o ozbiljnijem
jeziku - u smislu lakoće i efikasnosti
programiranja i održavanja.
Menjam makroe za tipiziranost !
clipper.1000kanda,
>> Ja razumem moć i lepotu makrozamene u toku rada programa,
>> ali jednostavno smatram da je usporenje rada programa (navodno
>> zbog toga ?) preveliko da bi bilo opravdano. To pričam iz onoga
>> koliko sam radio sa kliperom.
To da li je opravdano, zaista zavisi od namene. Kliper je namenski
jezik i tamo gde se on koristi brzina obicno nije toliko bitna koliko
mogucnost da se odgovori na egzoticne zahteve korisnika, da se radi
sa bazama nepoznate strukture itd.
clipper.1001kanda,
>> Ako želiš da podeliš svoju ideju sa drugima, pošalji kratak opis i
>> listing. Znači, ne treba sve, nego samo osnovne stvari.
Evo saljem listing funkcije VText(). Ovakva kakva jeste je vise
ilustracija tehnike, fali stosta da bi mogla da sluzi za pregled
izvestaja. Naime izvestaji obicno sadrze kontrolne sekvence za stampac,
markere pocetaka strana, itd itd, takve stvari se naravno ne prikazuju,
sto zahteva C ili asembler da ne bi bilo suvise sporo.
U TBrowse sistemu ima jedna falinka : pri iscrtavanju kolone, sistem
1) pozove metod koji mu vrati sadrzaj kolone koju treba ispisati
2) postavi kurzor na mesto ispisa, i 3) ispisuje. Da su autori zamenili
mesta koracima 1) i 2), bilo bi moguce da metod koji treba da vrati
sadrzaj kolone ujedno i ispise kolonu. Ovo bi moglo *mnogo* da ubrza
ispis ako bi metod bio napisan u C-u i pisao direktno u video memoriju.
vtext.zipclipper.1002nbatocanin,
> Dakle: 'valjda je ovako, da vidimo', ali na užim delovima,
> tamo gde ima smisla, i gde je brže od ručne analize.
Mislim da se nismo razumeli: mislio sam na situacije kada treba
izračunati (pogoditi) granične vrednosti indeksa kod petlji i sl. Ko
će da razmišlja da li je a[i+2*j-3*k-4] ili nešto drugo - ako ciklus
izmene kratko traje probaću pa ću "nabosti" rezultat :)
clipper.1003nbatocanin,
> To isto na drugom kraju, isto takođe.
Ipak bih rekao da za Clipper ima dosta više toga, bar po reklamama i
katalozima koje sam video. A to je zato između ostalog što je mnogo
jednostavnije napraviti novu funkciju za Clipper: napišeš na C-u,
ubaciš u lib i gotovo.
clipper.1004ciki,
Procitah malopre da oces nesto za pravljenje maskica.
Evo ti pokusaj sa ovim.Posto sam duze razmisljao o tome
ja sedoh i napravih nesto za cirka 45min.
Iako radim sa 5.01, ovo je radjeno sa S'87 jer je Tlink
nenadj*biv tj. nenadmasiv u brini.
Znaci kompajliraj, prevedi pa rokaj.
Inace program ce ti posle rada kreirati maska.txt datoteku,
koju ces posle obradjivati u nekom txt. editoru.
Evo malo help-a:
Strelice pomeraju tekuci kursor.
Sa Alt-a dobijas ascii tablu.
Sa O ili o crtas okvire ili linije.Posto nacrtas, a ti lepo
opali Enter, pa posle izaberi kojim ces box type-om iscrtati,
ili ces tu oblast obrisati.
Sa alt-t cini mi se dobijas tekuce koordinate kursora
Sa B ili b brises na mestu crsr-a.
Sa T ili t ispisujes text i to posto uneses broj karaktera,
pojavi ce ti se █████...██ gde ces ispisivati txt.
Sa alp-p menjas kursor.
Enter - stavlja kursor na tekucu koordinate crsr-a
Kraj rada Esc i stvara taj maska.txt
P.S. Zbog brzine, i listing je ugly, ali radi svoj posao.
Pozdrav Ciki!
maska.arjclipper.1008boris.,
Da li je neko naišao na ovaj problem sa funkcijom
int()?
?int(0.2*10) // 2
?in(1.2-1.0)*10) // 1
a=(1.2-1.0)*10
?a // 2.0
?int(a) // 1
BorisT
clipper.1009d.petrovic,
Ă> Da li je neko naišao na ovaj problem sa funkcijom
Ă> int()?
Pređi na Kliper 5.01 i koristi Nanfor biblioteku, sve radi.
clipper.1010zdiv,
U datoteci subntx2.zip su dva fajla koja su zapakovana sa lozinkom
konkretno xtr_lib.exe i xtr_src.exe
da li je to neka greska ili sta?!
clipper.1011ndragan,
/ Takođe, kada ovako nešto zatreba, jednostavno se unapravi
/ struktura koja sadrži adrese rutina za obradu, a onda se pozi-
Da, to bi bilo to, izuzev slučaja kad rutina za obradu još ne postoji -
dakle, kad forsiram grešku da bih pohvatao snimak stanja neposredno pre
poziva, ili me baš mrzi da pišem tu rutinu a hoću da propustim ostatak
programa posle poziva, ili aplikacija sama piše tu rutinu za vreme
rada. U tim slučajevima bi ta adresa bila nedefinisana. No, to nije
nikakvo 1:0 ili 6:5 za mene, nego samo razlika u metodu.
/ ali jednostavno smatram da je usporenje rada programa (navodno
/ zbog toga ?) preveliko da bi bilo opravdano. To pričam iz onoga
Pa i nije, jer su obetri :) rutine koje se pozivaju na taj način već
učitane i pri ruci su; foks ima neki interni spisak već pozivanih
rutina i dosta ih brzo ponovo nalazi. Drugo, za makro zamene koje
daju imena (fajlova, a kod 2.00 bilo kakva imena) umesto &var piše se
(var), što radi desetak puta brže, jer dobar deo analize otpada -
rantajm zna da to nije opcija ili šta ti ja znam, već ime nečega što na
tom mestu može da dođe, te ga raspakuje iz odma'.
/ Pa da, reći ćeš ti, tako mi i treba kad radim u kliperu.;))
To si ti rekao :)
clipper.1012ndragan,
/ goste a kad dodjes u goste, zna se hvalis se.
1. ja napisah jednom aplikaciju na kliperu, što je dokumentovano u ovoj
temi
2. ja sam kod kuće na celoj teritoriji sezama sa pokrajinama osim amige,
koje i vama od sveg srca želim (od obatri, i 286 i 68000 i Z80)
3. da vas ne podbada neko sa strane, nikad ne bi isplivalo šta je to
zaista novo u 5.0; večito bismo čitali neke detalje a manje o suštini
4. i onda bi kroz nekoliko verzija došlo dotle da su programi na foksu i
kliperu uzajamno nečitljivi (to će se desiti), a takođe da više ne znamo
šta koji ima šta nema. I onda više ne bismo mogli da razgovaramo. A to
može da se izbegne.
clipper.1013ndragan,
/ to ako stigneš'. Mislio sam danas, ali sam zaglavio u SORu... pa, ovih
/ dana.
Po datumu kad sam poslao poruku prošlo je samo tri dana, međutim pisana
je mnooogo ranije (negde od četvrtka nisam stigao da se okačim, ili sam
se kačio ali nisam imao egzek pri sebi...)
Elem, evo nove verzije SLOVIMA.PRG, ovog puta nije bilo druge nego da
je uzmem sam u ruke i doteram štogod. Testirao sam na nađene greške,
ali svi znamo koliko to vredi. Istestirajte me dobro, pa ako valja,
kažite, ako ne, opet kažite, i obratno.
Bue_ Ndragan
slovim2.arjclipper.1014bulaja,
│U datoteci subntx2.zip su dva fajla koja su zapakovana sa lozinkom
│konkretno xtr_lib.exe i xtr_src.exe. da li je to neka greska ili sta?!
└───
Nije greska, sifru dobijes posle registracije. Unutra se nalazi source
i potpuno funkcionalna biblioteka.
clipper.1015ndragan,
/ Mislim da se nismo razumeli: mislio sam na situacije kada treba
Jesmo, samo principski, a ne i u pojedinostima, ali to je već manje
bitno. To šacometrijsko programiranje mi zvuči kao ono dPaunovo
'programiranje na uvce'. Ima i toga, kad naiđem na situaciju koju nisam
imao - napišem ga odokativno, pa kad me iznenadi rezultatom, onda singl
step kroz sumnjivi deo. U principu opet traje kraće nego da se gnjavim
da iz glave pokušavam da predvidim sporedne efekte komandi i da sâm
sebi ručno (iz glave) teram neku rigoroznu kontrolu. Glavna kontrola je
da proteram program kroz očekivane situacije, i da prođe kroz njih zdrav
i čitav. Možda zvuči kao pomalo prljava tehnika, ali radi i na kraju se
dobija dosta čist tekst.
/ će da razmišlja da li je aŠi+2*j-3*k-4Ć ili nešto drugo - ako ciklus
/ izmene kratko traje probaću pa ću "nabosti" rezultat :)
Kalkulator je uvek pri ruci - ili on lajn dibager, te se sve to može
isprobati. Opet nemam potrebu da proračunavam unapred bilo šta. Za
primere kao što je taj tvoj opekli smo se svi bar po jednom, bez obzira
na jezik u kome radimo. Stvari kod kojih ima šanse da program zaglavi u
kombinatornom bumu ili da probije neke razumne granice (broj vrćenja
neke petlje, dužina niza, prostor koji treba na disku...) ipak dobro
proračunam ili bar ošacujem, i potom držim na oku.
S druge strane, postojanje bilo kakvih konstanti u programu je izvor
razloga za kasnije ispravke. žak ne volim da punim promenljive sa pet
ili šest blankova, znaš ono
Store ' ' to _sifra
č 4,4 get _sifra
...jer će sutra kod druge mušterije da se desi da ima malo obimniji
šif(t)arnik, i traži šifru sa dva mesta više, ili manje. To lako
izmenim, generator sprovodi izmenu kroz maske, ali van njih ostaju
slične pitalice kod štampi. Zato radije pišem
Store Space(Len(baza.sifra)) to _sifra
Takođe, jedine konstante koje dozvoljavam u programu su one koje ja
zadam (vrste dokumenata, prva cifra od šifre ili konta ako znači nešto),
inače nikakve zavarene stvari tipa 'ako je roba=234 .ili. 345 onda ovo
inače ono' ne stavljam. To je veoma kvarljiva stvar - prekosutra će doći
neka operaterka na zamenu dok ova bude na porođajnom, uputstva o
specijalnim šiframa se neće preneti i - cvrc, poziv u sred najgore
gužve. Radije ću ubaciti neki indikator u bazu ili izmisliti posebnu
vrstu dokumenta.
Ex, promenio sam temu, al' i ovaj drugi problem mi se čini vredan
rasprave, pa da čujem kako se drugi snalaze.
Bue_ Ndragan
clipper.1016ndragan,
/ jednostavnije napraviti novu funkciju za Clipper: napišeš na C-u,
/ ubaciš u lib i gotovo.
Foksu dugo nije trebalo tako nešto (mada je postojao mehanizam 'Load
... Call), a sada ima i to (*.plb fajlovi, biblioteke funkcija koje se
pozivaju kao bilo koje foksove funkcije, samo negde pre toga treba
ubaciti jedno 'Set Library to <ime>'). Foks je od početka bio
interpreter sa logikom da ima_sve (i ne treba Ce). Dobro, neke stvari
još nedostaju (index while :), ali kad instaliram foks odmah mogu da
radim i to sve što foks može, dakle ne treba ništa da nabavljam ('jel
ima neko biblioteku 'getsex.lib', baš me nešto svrbi da probam jednu
stvar' :), dok je Kliper išao logikom Cea: evo ti osnovni alat koji ima
samo to što mora da ima, a biblioteke ćeš pisati sam ili nabaviti.
Koncepcije su u startu različite, mada se aplikacije koje se na kraju
dobijaju malo razlikuju ;>.
E, da, pitanjce: je li istina da kliperaši imaju običaj da po startu
aplikacije pootvaraju sve baze i indekse koji će im trebati. If yes,
zašto? Mislim, ako je sve otvoreno, onda piči promaja.
clipper.1017ndragan,
/ nenadj*biv tj. nenadmasiv u brini.
Znao sam da ima još jedna reč gde se ne može 'dj' zameniti sa 'đ', al
nisam mogao onomad da se setim.
clipper.1018ndragan,
/ ?in(1.2-1.0)*10) // 1
Ovako iz aviona, meni se čini da tu fali zagrada...
/ ?a // 2.0
/ ?int(a) // 1
Da si ispisao ? a-round(a,0) verovatno bi dobio +/- 0.00000nešto. Nije
stvar do jezika, nego do interne prezentacije brojeva; 0.2 ima prve
značajne cifre 2000... i eksponent -1; 1.2 ima značajne cifre 120000 i
eksponent 0 (ili .2000 e00 odnosno .12000 e01 što je češći slučaj); oni
imaju različite binarne prikaze u EIII (ili beše IEEE) formatu ili koji
već format koristi jezik/procesor. Pretpostavljam da je 0.2 iznutra
jednako 0.200000001 (recimo), a da se (1.2 - 1) iznutra prikazuje kao
0.19999999... . Ispiši na dovoljno mnogo decimala da ga vidiš, ili
zaokruži pre upotrebe na dve decimale više nego što sečeš.
clipper.1020aleksj,
Imao bih da nesto priupitam oko povezivanja C-a i Clippera.
Naime u knjigama je zapisano : " Napises funkciju u C-u i ulinkujes
je zajedno sa Clipper programom "( tako sam makar ja razumeo).
I to tako fino funkcionise dok se igram : ? "clipper" ... printf ... c
Ali kada sam probao nesto sa grafikom ( za C sam odskora poceo da se
interesujem), jednostavno mi javi prekoracenje stacka-a. Iskljucim mu
proveru, a "racunalo" mi se blokira. Pokusavao sam sve i svasta
ali bez uspeha.
P.S. Mozda je to zato sto sam koristio C++ 2.xx ?!
clipper.1021vcalic,
>> P.S. Mozda je to zato sto sam koristio C++ 2.xx ?!
Jeste. Uzmi MSC, verziju 5.1 ili 6.0.
clipper.1022nbatocanin,
> Ex, promenio sam temu, al' i ovaj drugi problem mi se čini
> vredan rasprave, pa da čujem kako se drugi snalaze.
Itekako. Problem bih nazvao "zavisnost podataka od programa". Ja ga
rešavam tako što smanjujem ovu zavisnost na najmanju moguću meru.
Pravim rečnik podataka, pa se trudim da u programu ne koristim
trenutna polja, već opise u rečniku. Mada i ovo nije baš potpuno
rešenje, sve više uviđam da je zadovoljavajuće.
clipper.1023aleksj,
> 1. Kada se sa DOS-om 5.0 stavi direktiva DOS=HIGH, a
> program linkuje sa PLL opcijom, Clipper javlja da je los
> format datoteke. Kad se izbaci DOS=HIGH, sve savrseno
> radi.
Evo citam ove "zastarele" poruke, pa reko' da dam neko svoje zapazanje.
Isti efekti dogadjali su se i meni, ali kada smanjim kolicinu slobodne
memorije (612K) ucitavanjem nekog rezidentnog programa, NG na primer,
sve radi uobicajeno. Pa mislim da nije u pitanju DOS nego "visak" memorije.
P.S. Hvala ti na Milanovom (Nikolic) telefonu, nov sam na Sezamu pa se
polako prilagodjavam - nisam znao da postoji naredba USERS.
clipper.1024aleksj,
> 1. Kada se sa DOS-om 5.0 stavi direktiva DOS=HIGH, a
> program linkuje sa PLL opcijom, Clipper javlja da je los
> format datoteke. Kad se izbaci DOS=HIGH, sve savrseno
> radi.
Evo citam ove "zastarele" poruke, pa reko' da dam neko svoje zapazanje.
Isti efekti dogadjali su se i meni, ali kada smanjim kolicinu slobodne
memorije (612K) ucitavanjem nekog rezidentnog programa, NG na primer,
sve radi uobicajeno. Pa mislim da nije u pitanju DOS nego "visak" memorije.
P.S. Hvala ti na Milanovom (Nikolic) telefonu, nov sam na Sezamu pa se
polako prilagodjavam - nisam znao da postoji naredba USERS.
clipper.1025kanda,
>> Itekako. Problem bih nazvao "zavisnost podataka od programa". Ja ga
>> rešavam tako što smanjujem ovu zavisnost na najmanju moguću meru.
>> Pravim rečnik podataka, pa se trudim da u programu ne koristim
>> trenutna polja, već opise u rečniku. Mada i ovo nije baš potpuno
>> rešenje, sve više uviđam da je zadovoljavajuće.
Vrlo zanimljiva tema! A sta sve drzis u recniku ?
clipper.1026ndragan,
/ Pravim rečnik podataka, pa se trudim da u programu ne koristim
/ trenutna polja, već opise u rečniku. Mada i ovo nije baš potpuno
Zvuči zanimljivo. Kako izgleda primer u sorsu? Mislim samo par redova.
clipper.1027snemcev,
>> ... Istestirajte me dobro, pa ako valja, kažite, ako ne, opet
>> kažite, i obratno.
Pa da kažem. Ovo (slovima.prg) nije Clipper. Jel ti ono beše
radiš u Fox-u? Problem sa DIMENSION imebr(9) sam lako rešio, ali
imam još jedan. Ajde, da te ne mrzi, reci mi šta radi funkcija
'betw'? Clipper se ubi tražeći je po bibliotekama, ali sve što
je uspeo da kaže je 'Undefined symbol after library search' ili
nešto u tom stilu.
clipper.1028nbatocanin,
> Vrlo zanimljiva tema! A sta sve drzis u recniku ?
Malo je predugo za objašnjenje, ali ukratko, kompletnu strukturu baze
podataka: opis i definicije polja, komentare, indekse, itd. Na osnovu
ovih podataka vršim otvaranje datoteka, pridruživanje odgovarajućih
indeksa, itd. Na primer, datoteku otvaram sa:
Open ("Naziv")
a funkcija OPEN traži sve indekse u rečniku i otvara ih. Tako je
dodavanje novog indeksa potpuno bezbolno po program. Order menjam
preko simboličkog naziva, tako da promena indeksa ne utiče na
program. Na primer,
Order ("Prezime")
umesto
SET ORDER TO 2
jer ovo drugo propada kad se doda još jedan indeks na početak. Takođe
na osnovu rečnika automatski kreiram indekse po potrebi i vršim
povremeno brisanje podataka iz baze podataka. Pripremam neki prilog,
biće u jednim od narednih "Računara".
clipper.1029ndragan,
/ podataka: opis i definicije polja, komentare, indekse, itd. Na osnovu
Tako nešto ima i naš generator; ono što se razlikuje je što se na
osnovu programa koji pozivaju rutinu 'otvori' skupljaju postojeći
indeksi u upotrebi, analizira indeksni pojam i na osnovu toga generiše
program koji te indekse pravi.
/ Order ("Prezime")
Ovo me navodi da opet pitam: da li je (... ili) istina da je u kliperu
običaj da se po startu aplikacije pootvaraju sve baze i indeksi? Jer
ovako nešto praviti, za mene znači da su linije u kojima se baze
otvaraju malo daleko da bi se mogao pogledati redosled indeksa. Ja
nikad ne setujem redosled po imenu nego uvek po broju, jer na početku
rutine otvaram baze i na kraju ih zatvaram (rutina je retko kad duža od
8K, recimo (imam samo nekoliko koje su duže od 150 linija, a i to su
neke kombinovane višestruke štampe)), a to se onda lako kontroliše iz
bilo kog editora.
clipper.1030ndragan,
/ Pa da kažem. Ovo (slovima.prg) nije Clipper. Jel ti ono beše
/ radiš u Fox-u? Problem sa DIMENSION imebr(9) sam lako rešio, ali
Aha.
/ 'betw'? Clipper se ubi tražeći je po bibliotekama, ali sve što
Neće ni naći, to je foksova funkcija Between:
Between(a,b,c) je isto što i b<=a .and. a<=c
...samo što je sistemska, pisana najverovatnije u asembleru. Koristim
je već refleksno, pa mi nije palo na pamet da neće proći kroz kliper.
More, jel radi to čudo kako valja (posle ovog)?
clipper.1031nbatocanin,
> Pa da kažem. Ovo (slovima.prg) nije Clipper.
Probaj moj program prikačen uz poruku 5.955 u ovoj temi.
clipper.1032kanda,
>> Malo je predugo za objašnjenje, ali ukratko, kompletnu strukturu baze
>> podataka: opis i definicije polja, komentare, indekse, itd. Na osnovu
>> ovih podataka vršim otvaranje datoteka, pridruživanje odgovarajućih
>> indeksa, itd. Na primer, datoteku otvaram sa:
>>
>> Open ("Naziv")
OK, da pokusam da rezimiram ideje :
1) svi indeksi bi trebalo da se otvore pri otvaranju baze
2) indekse je lakse i sigurnije birati po imenu nego po rednom broju
3) omoguciti kreiranje, 'prepakivanje', reindeksiranje baze, bez
navodjenja detalja (dovoljno je ime baze!)
Da dodam i ja poneku :
4) 'lokalne baze'. Jednostavno, kazes da zelis da koristis neku
bazu, sa tim-i-tim indeksom i tim-i-tim filterom. Ako je baza
vec u upotrebi, tj. otvorena, sistem zapamti stanje (aktivni
indeks, aktivni filter, broj aktivnog sloga itd) i tek onda
postavi nove vrednosti. Kada zavrsis posao, ti kazes 'zatvori',
a sistem vrati bazu u prethodno stanje. Ovo omogucava pisanje
potprograma koji rade bez obzira iz koje situacije ih pozoves !
Stvar upravo testiram i zasad radi kao srpska oooops! tj. kao
japanska zeleznica.
5) pa kad je tu recnik, mozda bi imalo smisla pamtiti i PICTURE
za SAY i GET, mozda i neke jednostavnije VALID izraze... mada
je ovo vec malo nategnuto, sasvim dobro sluzi i #define.
clipper.1033kanda,
>> Ovo me navodi da opet pitam: da li je (... ili) istina da je u
>> kliperu običaj da se po startu aplikacije pootvaraju sve baze i
>> indeksi? Jer ovako nešto praviti, za mene znači da su linije u kojima
>> se baze otvaraju malo daleko da bi se mogao pogledati redosled
>> indeksa. Ja nikad ne setujem redosled po imenu nego uvek po broju,
>> jer na početku rutine otvaram baze i na kraju ih zatvaram (rutina je
>> retko kad duža od 8K, recimo (imam samo nekoliko koje su duže od 150
>> linija, a i to su neke kombinovane višestruke štampe)), a to se onda
>> lako kontroliše iz bilo kog editora.
Ne znam kakav je obicaj :) al ja gledam da su mi baze otvorene samo
kada se stvarno koriste. Sto se indeksa tice, postoji nekoliko dobrih
razloga da se pri otvaranju baze otvore SVI pripadajuci indeksi,
najbolje automatski, kao ono sto je pisao Nenad.
Dalje, kako god okrenes, Order('Prezime') je lakse za razumeti nego
SET ORDER TO 2. Svaka knjiga iz programiranja preporucuje da se, gde
god je moguce, izbegavaju ovakvi 'mrtvi' brojevi. 'Prezime' je deo
neke logike programa, '2' je ipak samo broj. Na primer, linija :
Radnici->(Order('Prezime'))
je sasvim nedvosmislena;
SET ORDER TO 2
to nije : koja baza je u pitanju ? koji indeks je u pitanju ?
clipper.1034snemcev,
>> Probaj moj program prikačen uz poruku 5.955 u ovoj temi.
Promakao mi je nekako, probaću ga svakako.
clipper.1035snemcev,
Danas sam kreirao (iz Clipper programa) bazu čija je struktura
duga tačno 1123 bajta. Takvu bazu DBU otvori, ali kad zatražim
BROWSE, ok kolosalno javi neku grešku sa '&' tj. sa makroima.
Jel to zato što je struktura datoteke duža od 1K? Ima li drugog
rešenja osim prepravljanja izvornog koda? Za divno čudo, PcShell
bez ikakvih problema prikazuje sadržaj ove datoteke.
clipper.1036raul,
Zdravo !!!!
Moze li mi neko reci zasto se u CLIPPERU (S87) kad koristim naredbu SET KEY TO
ime procedure ( na primjer dodjelim da mi F! pozove neku proceduru ). Zasto sve
radi jedno 5-6 puta dobro , a onda se na stisak tatsera pojave brljotine, tj.
maska se pokvari.
clipper.1037d.petrovic,
Ă> Moze li mi neko reci zasto se u CLIPPERU (S87) kad koristim naredbu
Ă> SET KEY TO ime procedure ( na primjer dodjelim da mi F! pozove neku
Ă> proceduru ). Zasto sve radi jedno 5-6 puta dobro , a onda se na
Ă> stisak tatsera pojave brljotine, tj.
Malkice nejasno, ali... jesi li isključio taj taster kad je
pozvao funkciju ? Npr. set key 28 na neki tamo help, čim uđeš u taj
help prvo isključuješ taj taster, a pre nego što se vratiš ponovo ga
uključiš. Ako nije to, budi malkice detaljniji ili daj taj deo
source-a ovamo.
clipper.1038pstojanovic,
To se obicno desi kada imas rekurziju; naime, kada pozivas npr.
set key -1 to kalendar sa F2
pa u kalendaru pritisnes jos neki put F2, a u proceduri kalendar imas
formiranje privatnih promeljivih, lako dolazi do gomilanja steka. Narocito
ako pamtis ekrane (ekran=25*80*2 bajta= 4 KB po promenljivoj). U prethodnom
odgovoru ti je kolega dao ispravan odgovor, iskljucis pri ulasku taster za
poziv a na izlasku iz procedure ga ponovo ukljucis. To greska recimo nece
vaziti za CL 5.01 zbog dinamicke memorije, ali ... Murphy is a live ;).
Ko zna, treba biti dosledan.
clipper.1039pstojanovic,
Evo jednog programa koji meni koristi, probajte, pa komentarisite...
pi.arjclipper.1040zradojicic,
Da li neko ima napisanu funkciju (proceduru) za ocitavanje serijskog
broja HD-a.
KLF.
clipper.1041d.petrovic,
Ă> Da li neko ima napisanu funkciju (proceduru) za ocitavanje
Ă> serijskog broja HD-a.
Ajde sad lepo kaži od koga si sad pa to čuo :). Ima neko ali je
nije još završio = usavršio = to je spoooooooro da bi se ubacilo u
neku aplikaciju.
clipper.1042ndragan,
/ Dalje, kako god okrenes, Order('Prezime') je lakse za razumeti nego
/ SET ORDER TO 2. Svaka knjiga iz programiranja preporucuje da se, gde
Da, svakako. I mi to uvodimo; kvalifikovanje polja po aliasu (a ne po
zoni) smo odavno uveli. Sintaksa tipa 'select 4' (to sam viđao samo kod
samoukih početnika) je inače suluda, i kod programa dužeg od tri ekrana
diže pritisak a obara produktivnost bar dvostruko ;).
Ono 'Set order to 2' koristimo tako retko da nije naročito smetalo, a i
svaka rutina koja nešto mulja sa bazama (a nije deo maske) mora da
pozove standardnu rutinu za otvaranje i na kraju i onu za zatvaranje, a
pošto su rutine kratke, nije teško da se zaviri u prve linije. Ali, i to
uskoro ukidamo (ili još jednom proređujemo), pošto FoxPro2 ima nešto što
se zove strukturni indeks, indeks koji se sam automatski otvara sa
bazom, a u njemu su već upisana imena indeksa (TAG - još malo pa kao u
Venturi :).
Jesam kazo da idemo ka istom, različitim putevima.
/ razloga da se pri otvaranju baze otvore SVI pripadajuci indeksi,
/ najbolje automatski, kao ono sto je pisao Nenad.
Da, ako ima šanse da će se u bazu nešto pisati, inače ne - u mreži je
to još dva-tri fajla više za otvaranje, a ako radim Index For oni će se
svakako zatvoriti.
clipper.1043ndragan,
/ 1) svi indeksi bi trebalo da se otvore pri otvaranju baze
Osim... vidi prethodnu poruku.
/ 2) indekse je lakse i sigurnije birati po imenu nego po rednom broju
Da.
/ 3) omoguciti kreiranje, 'prepakivanje', reindeksiranje baze, bez
Za ovako kritične operacije bi trebalo malo pripaziti - indeksiranje i
pakovanje zahtevaju zaključavanje, a u mreži...
/ Stvar upravo testiram i zasad radi kao srpska oooops! tj. kao
/ japanska zeleznica.
I Japanci imaju brze pruge?
/ za SAY i GET, mozda i neke jednostavnije VALID izraze... mada
U jednoj verziji glavne knjige imam _globalne_ pikčere za iznos, konto
i nalog za izveštaje; strpam ih u promenljive i ako dođe do dalje
inflacije samo dodajem devetke :). Valid izraze treba držati u bazi
maski :).
clipper.1044dpaun,
Clp dozvoljava i ovakve operacije:
PUBL Opc1, Opc2 ...
...
USE MojSET
Opc1 := Polje1
Opc2 := Polje2
...
č r,c PROMPT Opc1 MESS "....
č r+1,c PROMPT Opc2 MESS "....
MENU TO Izb
...
Ovo omogućava pisanje programa čije menije korisnik krsti prema
svojoj potrebi.
dPaun
clipper.1045jtitov,
Da li neko koristi za linkovanje neki drugi linker osim onog koji stize uz
Clipper 5.0 ('87)? Prednosti/mane?
clipper.1046aleksj,
> Moze li mi neko reci zasto se u CLIPPERU (S87) kad
> koristim naredbu SET KEY TO ime procedure ( na primjer
> dodjelim da mi F! pozove neku proceduru ). Zasto sve radi
> jedno 5-6 puta dobro , a onda se na stisak tatsera pojave
> brljotine, tj. maska se pokvari.
Obrati paznju na to da help iz help-a mozes (bezbedno)
pozvati samo jednom, tj. ako pritisnes F1 par puta za redom
moze se svasta dogoditi (isto vazi i za bilo koji drugi
podprogram koji je dodeljen SET KEY - u ako nekoliko puta
pritisnes taj taster za redom ).
Trebao bi da u pozvanoj proceduri podesis taster koji je pozvao
datu proceduru da to ne moze ponovo da uradi npr.
PROCEDURE HELP
SET KEY -1 TO
.
.
.
SET KEY -1 TO HELP
RETURN
i da na kraju ponovo vratis istu proceduru tasteru.
clipper.1047zalex,
Koristim BLINKER 2.0. Linkuje Clipper, Pakal, Asembler, Bejzik ...
Inkrementalno linkovanje radi savrseno, u 80% slucajeva linkovanje ne traje
duze od 3-4 sekunde. Linker je dinamicki, veliki programi se izvrsavaju bez
frke.
Jedini je problem sto ne moze da linkuje Clipper 87 datiran sa 21.12.87 0:00,
vec samo 21.12.87, 2:00. Na zalost, imam upravo pogresan Clipper, pa bih bio
JAAAAKO zahvalan onom koji moze da mi pomogne. Posto radim na mrezi, a dosadila
mi je poruka "insufficient memory", dinamicko linkovanje mi je neophodno. Ne
mogu da predjem na CLIPPER 5.01, jer nemam vremena (a i koristim neke
biblioteke koje ne rade sa njim).
ZALEX
clipper.1048nbatocanin,
> Dalje, kako god okrenes, Order('Prezime') je lakse za razumeti nego
> SET ORDER TO 2.
... a i kad dodaš indeks na početak ne moraš da menjaš brojeve uz SET
ORDER.
clipper.1049nbatocanin,
> mozda bi imalo smisla pamtiti i PICTURE za SAY i GET, mozda i neke
> jednostavnije VALID izraze... mada je ovo vec malo nategnuto, sasvim
> dobro sluzi i #define.
Zašto nategnuto? Rečnik podataka podrazumeva sve podatke o podacima.
Ja planiram da tu uguram ne samo podatke o načinu prikazivanja i
unosa i sl., već i podatke o pravima pristupa pojedinih procesa i
slične stvari. Na primer, funkcije koje bi vraćale podatke o svakom
polju (format za unos, prikazivanje i sl) mogu se trivijalno
napraviti. A onda se izbegava more problema - tako se veoma povećava
nezavisnost na relaciji program-baza podataka.
Sledeći korak je formalizacija procesa i kreiranje "rečnika
funkcija". Ovo bi morao biti osnov svakog dobrog generatora programa.
Ali, i samo rečnikom podataka se dobija puno. Na primer, kako sam ja
bez njega menjao strukturu baze podataka:
1) Pomoću DBU-a menjam strukturu. Ako je neka složenija promena
(promena tipa polja), onda se mora praviti mali programčić.
2) Evidencija u dokumentaciji programa - svako normalan ima opis svih
datoteka, polja itd.
3) Izmena u modulu za proveru integriteta: ponovno kreiranje indeksa
i sl.
4) Izmena u modulu za periodično brisanje podataka - treba dodati
podatke o izmeni.
5) Izmena svih USE..INDEX naredbi u programu. Sreća što sam i ranije
imao donekle automatizovano otvaranje, pa sam ovo ovde "izbegavao".
Slično ovome je i izmena SET ORDER naredbi.
6) Izmena delova programa koji se odnose na izmenu u bazi - ovo za
sada nisam previše razmatrao, ali polako.. :)
A sad samo uđem u pomoćni program koji mi služi za manipulaciju
rečnikom, napišem šta hoću, a on promeni fizičku strukturu, rečnik i
dokumentaciju. Moduli za brisanje i kreiranje indeksa ove podatke
uzimaju iz rečnika, pa u njima i nije potrebna intervencija. Najlepše
od svega je što je uvođenje rečnika 100% kompatibilno sa prethodnim
rešenjima, tako da nije potrebno menjati prethodne programe: USE i
dalje radi, OPEN se uvodi postepeno u nove module. Ovakva
centralizacija je jako dobra za sve vrste kontrola: ako jednom
automatizujete proces i napravite ga dovoljno opštim, kasnije ste
sigurni da ono što ste uradili RADI. A to je jako dobro, zar ne?
Prava stvar ka kojoj treba težiti je objektno orijentisana baza
podataka: svaka DBF datoteka je objekat koji "zna" i čuva neke
informacije, a sa kojim se komunicira preko poruka, kao sa šalterskim
radnikom. Kako vi preko šaltera ne možete previše uticati na rad tog
radnika i obrnuto, sledi da izmena tog objekta ne utiče na spoljni
program. E, to će biti prava stvar! Oće li taj Clipper 6.0! :)
P.S. Nevezano za ovo, zašto koristite izraz "baza" za DBF datoteku? Za
DBF datoteku se može reći da je tabela ili relacija, ali baza je samo
u trivijalnom slučaju, zar ne?
clipper.1050dejanr,
Da li vam se nekada desilo da vam clipper '87 + tlink unište CLIPPER.LIB?
Meni se to dešava danas evo treći put. Prvi put pre jedno 3 godine na AT-u,
i tada je CLIPPER.LIB bio samo malo pobrljan (ali dovoljno da kaže bad
object file). Drugi put pre jedno godinu dana na 386/25 kada ga je skratio
na 100 "random" bajta. Treći put danas, kada je u njega upisao neki .MAP
fajl, plus malo đubreta.
Pošto sam za sve to vreme intenzivno koristio clipper, ovo nije neka pojava
koja se dešava svaki dan nego verovatno pod nekim jako specifičnim
okolnostima.
Sada sam na clipper.lib stavio read only flag, šteta što ću morati da
čekam par godina da vidim deluje li ili ne ;)
clipper.1051raul,
Zdravo, opet ja. Hvala vam na odgovorima, pomogli ste mi. Jos jedno
pitanje : kada koristim naredbu MENU TO , a ne znam koliko cu dobiti PROMPTOVA
( recimo kada hocu da podatke iz baze stavim u PROMPT .... MENU TO ) da li
nekako mogu da odredim koliko ce biti PROMPTOVA ( Da li bih to mogao preko SET
KEY to 24 i da prenesem parametre promenljivoj MENU TO i kako )? Hvala !!!
clipper.1052jtitov,
> vec samo 21.12.87, 2:00. Na zalost, imam upravo pogresan
> Clipper, pa bih bio JAAAAKO zahvalan onom koji moze da mi
> pomogne. Posto radim na mrezi, a dosadila
Evo koju '87 imam: pa nesto je sa vremenom 00:00, a nesto sa vremenom 2:00.
Sa vremenom 2:00 je sledece: clipper.exe, clipper.lib, debug.obj,
extend.lib, ndx.obj, plink86.exe, i jos neke manje-vise nebitne sitnice. Pa
ako ti nesto znaci...
clipper.1053raul,
Zdravo. Imam Clipper S87, a zelio bih da koristim misa. Moze li mi neko
reci kako to da uradim. Imam CLIPGRAP21 i Hercules karticu. Probao sam i sa
demo programomk CLIPGRAP-a, ali nikako da se pojavi ikona ....
Pozdrav : RAUL
clipper.1054broker,
> Moze li mi neko reci zasto se u CLIPPERU (S87) kad
> koristim naredbu SET KEY TO ime procedure ( na primjer
> dodjelim da mi F! pozove neku proceduru ). Zasto sve radi
> jedno 5-6 puta dobro , a onda se na stisak tatsera pojave
> brljotine, tj. maska se pokvari.
clipper.1055d.petrovic,
Ă> Zdravo. Imam Clipper S87, a zelio bih da koristim misa. Moze li mi
Ă> neko
Nemoj da se ljutiš ako ti je to neko već rekao ali... pređi
brate na 5.01 i uživaj.
clipper.1056rolandz,
Evo mislim da mogu da ti pomognem, ostavi mi poruku.
Volume in drive C is DEEP PURPLE Volume Serial Number is 0000-0000 Directory
of C:ĐCLIP87ĐBEZVEZE . <DIR> 11-05-92 6:18p.. <DIR>
11-05-92 6:18pCLIPPER EXE 79121 12-21-87 2:00aPLINK86 EXE
83834 12-21-87 2:00aCLIPPER LIB 307019 12-21-87 2:00aEXTEND LIB
82189 12-21-87 2:00aOVERLAY LIB 7104 12-21-87 2:00aDEBUG OBJ
57986 12-21-87 2:00aTEXT TXT 0 11-05-92 6:19p 9 file(s)
617253 bytes 15232640 bytes free
rastumaci mrzelo me je da kucam a sad necu da prekidam vezu zbog greše
pozdrav or RolandZ a.
clipper.1057banex,
>> Zdravo. Imam Clipper S87, a zelio bih da koristim misa. Moze li mi
>> neko reci kako to da uradim. Imam CLIPGRAP21 i Hercules karticu.
Ima nekoliko lib-ova koji su namenjeni toj stvari, nisam
ni jednu probao ( nisam ni imao miša do sada ;) ali se iz
gomile može izabrati ono što tebi naviše odgovara. Probaj
ovu koju sam ti zakačio uz poruku, imaš i mali primer kako
treba da izgledaju rutine a rađena je asembleru. Samo
ulinkuješ bmouse.obj uz tvoje .obj datoteke, i trebalo bi da
radi. Ako ti ne odgovara, viči da pošaljem neku drugu.
PS. Nema veze kakvu video karticu imaš...
bmouse87.arjclipper.1058banex,
>> Nemoj da se ljutiš ako ti je to neko već rekao ali... pređi
>> brate na 5.01 i uživaj.
Kad smo već kod 5.01 klipera, da li neko zna u čemu je
problem kod sledećeg primera:
Source datoteke (.prg) su rađene u starom kliperu (summer 87),
i kada ih proteram kroz kliper 5.01 tako da on sam pronalazi
odgovarajuće, napravi jedan .obj koji se bez problema linkuje sa
Rtlinkom. Exe program dalje radi bez problema.
Ako te iste .prg datoteke kroz novi kliper proteram sa /m svičem,
da mi napravi za svaku po jedan .obj file, tada pri linkovanju izbaci
za svaki po jedan error i prekine rad sa porukom da su to
kliper87 funkcije (ili tako nešto ;) ?
Da li bih trebao da koristim neki svič za rtlink u tom
slučaju, nisam se baš mnogo bavio istim?