clipper.512dpaun,
-> #504, dejanr>> 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,
-> #507, vili>│ 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,
-> #503, dpaun/ 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,
-> #512, dpaun/ 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,
-> #515, ndragan>> 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,
-> #516, zkrstic>> 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,
-> #517, squsovac>> 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,
-> #515, ndraganAko 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,
-> #521, ppekovicHvala 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,
-> #519, dpaun>> 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,
-> #519, dpaun>> 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,
-> #519, dpaun>│ č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,
-> #527, dpaun>> 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,
-> #527, dpaun
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,
-> #519, dpaun> 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,
-> #527, dpaun> 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,
-> #528, kanda>> 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,
-> #522, nbatocanin/ 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,
-> #527, dpaun>>
>> 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,
-> #533, ndragan>> / 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,
-> #535, dpaun/ 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,
-> #537, dpaunTreba da stoji velikim slovima: SET CLIPPER=F35.
Pedja
clipper.539ndragan,
-> #537, dpaun/ 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,
-> #539, ndragan>> / 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,
-> #539, ndragan>> žemu inače može da služi ih te?
Za Sezam. :)
<<nenad<<
clipper.542dpaun,
-> #538, pjankovic>> 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,
-> #542, dpaun
>> 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,
-> #545, jpiri>>> 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,
-> #544, nimiNiz 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,
-> #542, dpaun/>> Treba da stoji velikim slovima: SET CLIPPER=F35.
/ Pomagajte, braćo!
A malim slovima?
clipper.549dpaun,
-> #546, zkrstic>> 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,
-> #548, ndragan>> />> 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,
-> #549, dpaun> 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,
-> #550, dpaun/ 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,
-> #550, dpaunZdravo,
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,
-> #498, andrejl
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,
-> #551, zkrstic>> 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,
-> #548, ndraganAko 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,
-> #556, dpaun>> 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,
-> #558, kzoran>> 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,
-> #558, kzoran> Ljudi, kako se "upotrebljava" Nanfor toolkit?
Kako linkuješ?
clipper.562kzoran,
-> #560, kanda>> 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,
-> #561, nbatocanin>> 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,
-> #563, kzoran>
> 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,
-> #556, dpaun/ 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,
-> #559, kanda>> Cemu toliko insistiranje na nekom bajatom DOS-u ?
Nisam primetio da je *toliko*, verovatno.
dPaun(žovekSačivcima++)
clipper.567vili,
-> #543, kanda> 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,
-> #563, kzoran>> 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,
-> #567, vili>> 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,
-> #568, kandaEureka! 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,
-> #567, vili> 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,
-> #563, kzoran> 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,
-> #573, tomaEvo! 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,
-> #576, nbatocanin> 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,
-> #569, kanda> 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,
-> #577, dpaun
>> 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,
-> #580, dpaun>> 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,
-> #575, nbatocanin=> 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,
-> #581, vkrstonosic
>> 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,
-> #578, vili> 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,
-> #579, viliNisam 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,
-> #589, umajstorovic> 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,
-> #582, toma> 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,
-> #585, pmsimic> Molim da mi neko objasni kako da napravim rutinu pisanu u
> TC++ 2.0
Bojim se, nikako. Ili bar veoma teško.
clipper.593nbatocanin,
-> #583, mandrejevicProblem 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,
-> #589, umajstorovic> 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,
-> #594, dvokshi>> 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,
-> #593, nbatocanin>│ 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,
-> #598, dpaun>> 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,
-> #597, mbakovic/ 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,
-> #593, nbatocanin> 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,
-> #599, kanda
>> 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,
-> #601, dvokshiOvako 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,
-> #608, tuci=> 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,
-> #608, tuci
██ 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,
-> #606, zkrsticIzbaci DOS=HIGH direktivu iz CONFIG.SYS.
clipper.612nbatocanin,
-> #607, djoskovskiVec je bilo ovde, može ovako:
SetColor(Invert)
// Ispisi celu liniju
SetColor(Normal)
Ch := InKey(0)
// Ispisi celu liniju