pascal.1mmile,
E i ja da otvorim ...:)
CONF JOIN PC.PROG.2
CONF REPLY 6.1307
│ Jel ima neko sve extended kodove za tipke na tastaturi?
│ Pronašao sam u jednom unitu (tpw60) neke kojih nema u uputstvu.
│ Tablica u uputstvu ima sledeće rupe 0-14 (izuzev 3), 26-29,
│ 39-43, 51-58, 69, 70 i eventualno 141+. Ako bi neko znao da
│ popuni rupe...
└──────────
CTRL+<Neko_slovo> daje vrednost ord(upcase(slovo)) - 64
Napravis ovako nesto :
begin
repeat
writeln(ord(readkey));
until false;
end.
I saznas sve kodove SEM F11, F12 i sl.
Drugi nacin je da (ako imas AT) ocitas i F11 i F12 i Enter na num. tastaturi
koji se razlikuje od Entera na "glavnoj" tastaturi i ...
var r:registers;
begin
repeat
r.ah:=1;
intr($16,r); (* Citanje karaktera sa prosirene tastature *)
writeln(r.ah:10,r.al:10);
until false;
end.
pascal.2bole,
Ljudi...
Kako da neki string koji otkucam ubacim u fajl?
pascal.3isekulovic,
-> #1, mmile>> CTRL+<Neko_slovo> daje vrednost ord(upcase(slovo)) - 64
Da, ali to nisu extended kodovi.
>> Drugi nacin je da (ako imas AT) ocitas i F11 i F12 i Enter na num.
Prvi način znam ali bi mi trebalo u obrnutom smeru, a za ovaj nisam
znao, će da probam. Hvala!
pascal.4isekulovic,
-> #2, bole>> Kako da neki string koji otkucam ubacim u fajl?
Ubaciš u fajl?
Ako misliš samo da napraviš fajl u koji ćeš smestiti string onda
ide ovako:
Var
f : text;
s : string;
begin
Readln (s);
Assign (f,'filename.ext');
Rewrite (f,1);
writeln (f,s);
end;
A ako već imaš fajl pa hoćeš da dodaš na kraju:
Var
f1 : text;
f2 : text;
st : string;
begin
Assign (f1,'filename.ext');
Reset (f1);
Assign (f2,'TempFile.$$$'); (* Praviš privremeni file. *)
Rewrite (f2);
While not( eof(f1) ) Do
begin
readln (f1,st); (* Prepisuješ originalni u privremeni file. *)
writeln (f2,st);
end;
writeln (f2,'Ovaj string dodaješ'); (* Dodaješ stringove u *)
writeln (f2,' .... i ovaj .... '); (* privremeni file. *)
Close (f1); Close (f2);
Erase (f1); (* Brišeš orignalni file. *)
Rename (f2,'filename.ext'); (* Privremeni preimenuješ u originalni. *)
end;
A ako hoćeš da ubaciš u sredinu slično je ubacivanju na kraj samo,
što ne prepisuješ do kraja datoteke već prepišeš jedan deo, pa dodaš
string, pa prepišeš ostatak.
pascal.5dejanr,
-> #2, bole>> Kako da neki string koji otkucam ubacim u fajl?
var ff: text;
red: string;
begin
assign(ff,'ime.txt');
rewrite(ff);
readln(red);
writeln(ff,red);
close(ff);
end.
Bole, bilo bi ti krajnje vreme da počneš sa čitanjem neke knjige
o Turbo Pascalu, malo prelistaš uputstvo i naučiš da koristiš HELP.
Ovako sa pitanjima za svaku sitnicu nećeš daleko stići sa učenjem
paskala. Ne što je nama teško da odgovaramo, nego zato što tako
učiš neke "mrvice" umesto da shvatiš celinu.
pascal.6ssokorac,
-> #2, bole ─┼┤ Kako da neki string koji otkucam ubacim u fajl?
var
f:text;
st:string;
begin
assign(f,'tekst.txt');
rewrite(f);
readln(st); (* otkucas string *)
writeln(f,st);
close(f);
end;
Posle ga čitaš ovako:
var
f:text;
st:string;
begin
assign(f,'tekst.txt');
reset(f);
readln(f,st);
writeln(st); (* ispise string *)
close(f);
end;
pascal.8ficus,
-> #4, isekulovicUmesto onog prepisivanja iz jednog u drugi fajl, bilo je bolje dumesto
Rewrite(fajl2) ka`e{ Append(fajl2)...
pascal.9dejanr,
-> #8, ficus>> Umesto onog prepisivanja iz jednog u drugi fajl, bilo je bolje dumesto
>> Rewrite(fajl2) ka`e{ Append(fajl2)...
Append je dosta glupo koncipirana funkcija. Ono što bih ja od nje hteo je
da ako ima fajl, nastavi na njega, a ako nema, da ga napravi. Ali jock,
ako nema fajla ona prijavi grešku :( Zato je zgodno koristiti sledeće:
{$I-}
append(ime);
if ioresult<>0 then
begin
rewrite(ime);
if ioresult<>0 then
begin
writeln('*jebi ga');
halt(1);
end;
end;
PS Postavio sam ti SET CODE na yuscii, behu kuke i kvake u porukama :(
pascal.10isekulovic,
Ajde ljudi pomagajte da se ratosiljam bede. Od svih mogućih stvari
koje mogu da zakažu u programu meni se dogodilo sledeće. Writeln neće
da mi ispiše string pa da se ubijem, ni na ekran ni u file. Watchujem ;)
lepo promenljivu tipa string, vidim lepo njen sadžaj ali jednostavno
writeln ne daje ništa. Ajde molim vas napregnite mozgove šta bi sve moglo
da bude. Inače ako nešto znači u pitanju je editorčić, učita text file
u dinamičku dvostruko povezanu listu, malo editujem i kada treba iz te
liste da se snimi ponovo u file cvrc. Lepo prođe program kroz celu listu,
string dobija ok vrednosti ali jednostavno neće da ih zapiše.
pascal.11bole,
-> #4, isekulovic>> A ako vec imas fajl pa hoces da dodas na kraju:
Ma provalio sam, a zar nije bolje umesto tog brisanja rinejmovanja, da umesto
sa reset file otvoris sa append?
pascal.12bole,
-> #5, dejanrThanx dr.
Uradio sam to, dobio knjigu onu crvenu od duska savica TURBO PASCAL
pascal.13ssokorac,
-> #4, isekulovic ─┼┤ A ako već imaš fajl pa hoćeš da dodaš na kraju:
Uh, baš ga zakomplikova :). Dodavanje na kraj se vrši pomoću append.
begin
assign(f,'teskt.txt');
append(f);
writeln(f,st);
close(f)
end;
Jedino se u slučaju ubacivanja na pola datoteke mora pisati u drugi fajl.
pascal.14milos,
-> #10, isekulovicPa, ovako }emo te{ko da shvatimo o ~emu se radi, mogao bi malo da nam po{alje{
source (ili barem deo njega ukoliko je tajna) ta da pogledamo. Ina~e, problema
mo`e biti mnogo... Jednostavno ne mogu da pretpostavim o ~emu se radi... Dakle,
{alji source i 100% }e sve biti OK...
pascal.15beast,
-> #12, bole>> Uradio sam to, dobio knjigu onu crvenu od duska savica TURBO
>> PASCAL
Ako ti išta bude jasno, javi meni, ja ništa ne razumem :))
Bolje bre uzmi onu standardnu od žabarkape, objekti su za
malo iskusnije (a iz te knjige za mnooogo iskusnije :)
pascal.16dejanr,
-> #10, isekulovic>> Writeln neće da mi ispiše string pa da se ubijem, ni na ekran ni u file.
Stavi na početak programa {$I+} i izbaci sve {$I-} koje si eventualno
stavio. Onda pusti program, i videćeš na kojoj liniji nastupa greška i
koja je greška u pitanju. Kada to otkloniš, verovatno i taj writeln
proradi.
Ako imaš {$I-} onda posle *svake* operacije koja išta piše po fajlovima
ili čita iz njih treba da pročitaš i ioresult. Ako to ne uradiš, obično
se dešavaju takve stvari, neka read/write naredba na stotom mestu ne radi
ili radi čudno.
pascal.17adiklic,
-> #10, isekulovic> Ajde ljudi pomagajte da se ratosiljam bede. Od svih mogućih stvari
..
> string dobija ok vrednosti ali jednostavno neće da ih zapiše.
Evo prikačeni primer programčić testira da li datoteka već postoji, otvara ako
ne postoji, upisuje komentar, upisuje string i lista datoteku na kraju.
Nadam se da će to pomoći.
(TP 6.0)
primer.paspascal.18isekulovic,
-> #8, ficus>> Umesto onog prepisivanja iz jednog u drugi fajl, bilo je bolje dumesto
>> Rewrite(fajl2) ka`e{ Append(fajl2)...
Moglo je, samo što Append(fajl) radi samo ako već postoji fajl,
pa bi morala da se doda provera o postojanju fajla i još jedan ceo
primer o dodavanju u sredinu fajla, što mislim da bi suviše zakomplikovalo
celo poruku i da je ovako jasnija bila suština.
pascal.19ssokorac,
-> #10, isekulovic ─┼┤ liste da se snimi ponovo u file cvrc. Lepo prođe program kroz celu
─┼┤ listu, string dobija ok vrednosti ali jednostavno neće da ih zapiše.
Pa, sad, može svašta da bude. Najbolje da pošalješ taj deo koji ide kroz
listu i piše pa ćemo onda otkriti :).
pascal.20m.hristodulo,
-> #12, bole>> Uradio sam to, dobio knjigu onu crvenu od duska
>> savica TURBO PASCAL
Predlažem prevod žuto-plavog priručnika za
TP6.0, izdanje mi-knjige. Ja sve nejasno,
razjašnjavam iz nje...
pascal.21isekulovic,
-> #16, dejanr>> Ako imaš {$I-} onda posle *svake* operacije koja išta piše po
>> fajlovima ili čita iz njih treba da pročitaš i ioresult. Ako to ne
>> uradiš, obično se dešavaju takve stvari, neka read/write naredba na
>> stotom mestu ne radi ili radi čudno.
Ovo je bilo u pitanju, nikad mi ne bi palo napamet. Hvala!
pascal.22milos,
Isto mislim da je TP 6.0 od Mikro knjige jedna od najboljih, ako ne i najbolja
knjiga iz ove oblasti...
Iz nje se mo`e super nau~iti kako za po~etnike tako iza one vrlo iskusne...
Ipak, nije idealna, ko{ta 27 DM... :(
pascal.23bole,
Ljudi jel ima neko neki UNIT ili neki obj sas kojim mogu da pustam semplove
(.voc ili neki drugi oblik) na sb-u, covoxu, kao onaj MOD-OBJ.OBj samo ne za
modove nego za semplove!
Ps. Ovo pitanje se prihvata, zar ne?
pascal.24drpr,
-> #22, milos-> Iz nje se može super naučiti kako za početnike tako iza one
-> vrlo iskusne... Ipak, nije idealna, košta 27 DM... :(
Da tu si u pravu i ja sam je nabavo ali u sretnija vremena i
preporučujem je svakom ko nije baš "duduk" za programiranje i
koji tek počinju. Cena je stvrano ono što boli u celoj stvari a
baš me i zanima gde nađoše toliku cenu kad se štampa ovde, da je
na engleskom pa i da shvatim,kupili su je tamo pa imaju maržu,
ovako....
cope
pascal.25broker,
-> #23, bole> Ljudi jel ima neko neki UNIT ili neki obj sas kojim mogu
> da pustam semplove (.voc ili neki drugi oblik) na sb-u,
> covoxu, kao onaj MOD-OBJ.OBj samo ne za modove nego za
> semplove!
Ja sam pisao jedno programče koje je sviralo na COVOX-u.
Imaš na Oreska BBS-u i sors. Datoteka je SHOWS*.* (eto, zaboravio
sam...) Vrlo je kratko.
broker
pascal.26ndragan,
-> #10, isekulovic/ da mi ispiše string pa da se ubijem, ni na ekran ni u file. Watchujem
/ ;) lepo promenljivu tipa string, vidim lepo njen sadžaj ali
Ili ti stražar daje tačnije rezultate nego writeln (da nije onaj nulti
dužinski bajt u tom stringu ostao nula?), ili je tebi stdio preusmeren u
nešto drugo - ko zna gde on to piše. Šta sve imaš otvoreno u tom
trenutku? Kad pre toga poslednji put nešto ispiše? Kad prestaje?
pascal.27ssokorac,
-> #26, ndragan ─┼┤ Ili ti stražar daje tačnije rezultate nego writeln (da nije onaj nulti
─┼┤ dužinski bajt u tom stringu ostao nula?), ili je tebi stdio preusmeren
Ako je nulti bajt nula onda će i stražar :) da pokazuje samo ''.
pascal.28dgrbic,
-> #18, isekulovic:: Moglo je, samo što Append(fajl) radi samo ako već postoji
:: fajl, pa bi morala da se doda provera o postojanju fajla
:: i još jedan ceo primer o dodavanju u sredinu fajla, što
:: mislim da bi suviše zakomplikovalo celo poruku i da je
:: ovako jasnija bila suština.
Pogledaj u staroj pc.prog (čini mi se prvoj) par poruka od GROM-a, ima tu
okačeno nekih procedura za umetanje u i brisanje iz fajla. Velika je
budževina, ali radi jako brzo (osim kad zatvara fajl, jer tek onda stvarno
radi prepisivanje).
pascal.29bole,
E ovako:
Kako da recimo, imam neki fajl i ocu da mi ispise svaki red, u kome se barem
jedanput pojavljuje zadati string.
recimo:
zadam BOL
i gde god da pise BOLESTAN od taj red da mi baci na ekran...
(recimo da je sve sa upcase da bi bilo lakse..)
ps. a da taj red koji pretrazuje bude string (sto je normalno:))
pascal.30dejanr,
-> #29, bole>> Kako da recimo, imam neki fajl i ocu da mi ispise svaki red, u kome se
>> barem jedanput pojavljuje zadati string.
žitaš fajl tako kako ga već čitaš, i onda kada si pročitao red kažeš:
if pos(strng, red)<>0 then writeln(red);
pascal.31ssokorac,
-> #29, bole ─┼┤ Kako da recimo, imam neki fajl i ocu da mi ispise svaki red, u kome se
─┼┤ barem jedanput pojavljuje zadati string.
var
f:text;
tr,st:string;
begin
assign(f,'text');
reset(f);
write('String: '); readln(tr);
while not eof(f) do
begin
readln(f,st);
if pos(tr,st)>0 then writeln(st);
end;
close(f)
end;
Pogledaj u knjizi koju imaš nešto o POS-u, ili u TP-ovom HELP-u
(hi, ndragane:), sve ćeš uvek naći...
pascal.32peca.st,
-> #29, bole!-> Kako da recimo, imam neki fajl i ocu da
!-> mi ispise svaki red, u kome se barem
!-> jedanput pojavljuje zadati string.
Ovo kucam napamet, ali mora da je tako :)
Var
f : text;
s : string;
Begin
Assign (f, 'ime.ext');
Reset (f); špretpostavlja se da postoji fajl 'ime.ext'ć
While not eof(f) do begin
ReadLn (f, s);
If Pos ('BOL', S) <> 0 then WriteLn (S);
End;
Close (f);
End.
Sve rešava funkcija POS (a, b : string) - ona vraća prvu poziciju
stringa a u stringu b, a ako se a ne sadrži u b onda vraća 0.
Peđa.
pascal.33bole,
-> #31, ssokorac>> Pogledaj u knjizi koju imas nesto o POS-u, ili u TP-ovom HELP-u
>> (hi, ndragane:), sve ces uvek naci...
o nemojte da se ljutite.. nisam znao da postoji funkcija pos........
pascal.34ilotina,
HI!
Danas sam nešto petljao pao pascal-u, i malo mi je trebalo da izbacim
komp kroz prozor. Pisao sam neki jednostavni programčić koji očita
datum i pretvori ga u sledeći oblik: godina*10000+mesec*100+dan, i
sve to smešta u promenljivu tipa longint. I ja tako sav srećan
startujem prg., kad ono ne leži vraže, on mi izbaci sasvim neku
neočekivanu cifru. E i na tom mestu sam poludeo, ali sam ipak otkrio
da treba da prebacim onu godinu u naku drugi promenljivu tipa longint
i tek onda da je množim sa 10000.
Pozdrav, Ivan!
P.S. Meni je ovo izgledalo zanimljivo:)
P.P.S. Naravoučenije za one koji ovo nisu znali (ja nisam), ako
želite da množite promenjljivu tipa word (pa makar i u stilu
writeln(godina*10000)), prebacite njen sadržaj u promenljivu tipa
longint pa je onda množite ;)
pascal.35isekulovic,
-> #26, ndragan>> Ili ti stražar daje tačnije rezultate nego writeln (da nije onaj nulti
Proradilo je već, hvala.
pascal.36dejanr,
-> #34, ilotina>> P.P.S. Naravoučenije za one koji ovo nisu znali (ja nisam), ako
>> želite da množite promenjljivu tipa word (pa makar i u stilu
>> writeln(godina*10000)), prebacite njen sadržaj u promenljivu tipa
>> longint pa je onda množite ;)
Da... mada mislim da ne mora tako, može i writeln (longint(godina)*10000).
Ovo davno nisam probao, ali nekada je (v.3.0) moglo, valjda može i sada.
pascal.37ssokorac,
-> #33, bole ─┼┤ o nemojte da se ljutite.. nisam znao da postoji funkcija pos........
Ma, nema ljutnje, samo rekoh da pogledaš, da ne moramo da ti objašnjavom
šta ona radi, sad kada znaš za nju :). Samo ti pitaj kada nije jasno.
pascal.38ssokorac,
-> #34, ilotina ─┼┤ P.P.S. Naravoučenije za one koji ovo nisu znali (ja nisam), ako
─┼┤ želite da množite promenjljivu tipa word (pa makar i u stilu
─┼┤ writeln(godina*10000)), prebacite njen sadržaj u promenljivu tipa
Ja sam imao sličnih problem sa oduzimanjem wordova. Recimo, a i b su
wordovi, a integer, a ovo ne radi
c:=abs(a-b);
ukoliko je b manje od a. Tačnije, za abs(3-5) daje -2 :). Naravno, stvar
je u zapisu wordova i integera, ali čini mi se da se moglo srediti...
pascal.39bole,
Evo vam jedan "problem" pa resavajte dok se je ne vrnem sa mora...
kako da pravim neku bazu, u kojoj se podaci menjaju recimo:
IME ARTIKLA CENA KOLICINIA
i da mogu da menjam cenu i kolicinu
nesto slicno naredbi FIELD u basicu
pascal.40dejanr,
-> #39, bole>> kako da pravim neku bazu, u kojoj se podaci menjaju recimo:
>> IME ARTIKLA CENA KOLICINIA
>> i da mogu da menjam cenu i kolicinu
>>
>> nesto slicno naredbi FIELD u basicu
Napraviš record:
type artt = record
ime: string;
cena: longint;
kolicina: longint;
end;
artft= file of artt;
var art: artt; artf: artft;
otvoriš fajl:
assign(artf, 'ime.dat');
reset(artf);
i sada da bi pročitao peti artikl kažeš:
seek (artf,5);
read (artf, art);
promeniš šta ima, recimo:
art.cena:=art.cena*100;
i onda upišeš u fajl:
seek (artf, 5);
write (artf, art);
na kraju sve zatvoriš:
close(artf);
pascal.41kuki,
ljudi, ima li neko ideju zašto ovaj program ne radi kako treba?
----
program trt;
uses dos;
var
fajl:file ;
naziv:string;
c1:array [1..5000] of char;
nmax:word;
f:word;
begin
naziv:='trt.mrt';
assign (fajl,naziv);
reset (fajl);
blockread(fajl,c1[1],5000,nmax);
for f:=1 to nmax do write (c1[f]);
close (fajl);
readln (naziv);
end.
----
e sad, šta se desi? desi se da kad program dođe do onog blockread qemm
ispiše nešto u stilu procesor has informed qemm that an attempt was
made to execute an ilegal instruction... ili nešto slično.
Inače, pascal je turbo pascal 5.5, a fajl je veći od tih 5000 bajtova
kolko sam ja njemu dao da pročita... naravno, fajl postoji :) a što
je najgore, kad sam stavljao veće brojke od 5000 čak sam i dobijao
neki ispis... npr, za 60000 sam dobijao prvih 96 (?) bajtova fajla...
pascal.42dejanr,
-> #41, kuki>> ljudi, ima li neko ideju zašto ovaj program ne radi kako treba?
Zbog:
>> reset (fajl);
Umesto toga, stavi:
reset(fajl,1)
pascal.43drpr,
-> #41, kuki-> blockread(fajl,c1[1],5000,nmax);
ono što ti je daejan rekao i mislim da treba
blockread(fajl,c1,5000,nmax) a ja još preporučujem pošto ćeš
verovatno menjati veličinu c1 da se ne bi mučio
blockread(fajl,c1,sizeof(c1),nmax)
toliko od mene :)
cope
pascal.44ssokorac,
-> #41, kuki ─┼┤ reset (fajl);
RESET ima i drugi parametar koji možeš da menjaš veližInu bloka kod
čitanja fajla (u bajtovima). Ovako stoji neka default vrednost, a ako
staviš reset(F,1); onih 5000 će značiti 5000 bajtova i sve će raditi kako
treba.
pascal.45kuki,
-> #43, drpr> ono što ti je daejan rekao i mislim da treba
> blockread(fajl,c1,5000,nmax) a ja još preporučujem pošto ćeš
> verovatno menjati veličinu c1 da se ne bi mučio
>
> blockread(fajl,c1,sizeof(c1),nmax)
thanx svima na brzim odgovorima :) A inače, što se tiče onog
sizeof(c1), to sam rešio tako što sam na početku stavio jednu
konstanticu, koju po potrebi menjam :))
pascal.46mzdravkovic,
Kako mogu iz nekog Pascal programa da ispitam da li ima diskete u A:
ili B: drajvu ?
pascal.47milos,
-> #46, mzdravkovicE, ovo je malo žešće. U BC-u postoji funkcija koja čita status drajva, i koja
vraća rešku ako nema diskete (biosdisk), ali sam se uvek pitao da li postoji
nešto slično i u TP-u... SSokorac , na tebe je red...
pascal.48beast,
-> #47, milos>> E, ovo je malo žešće. U BC-u postoji funkcija koja čita status
>> drajva, i koja vraća rešku ako nema diskete (biosdisk), ali sam
>> se uvek pitao da li postoji nešto slično i u TP-u...
Ma nek jednostavno uradi ChDir('A:\'); (sa {$I-}) i vratiće
mu se stanje drajva preko ioresulta...
pascal.49eagle,
-> #46, mzdravkovic> Kako mogu iz nekog Pascal programa da ispitam da li ima diskete
> u A: ili B: drajvu ?
if disksize(n) = -1 then nema_diskete
n=1 za A:
n=2 za B:
...
pascal.50dejanr,
-> #47, milos>> E, ovo je malo žešće. U BC-u postoji funkcija koja čita status drajva, i
>> koja vraća rešku ako nema diskete (biosdisk), ali sam se uvek pitao da li
>> postoji nešto slično i u TP-u...
Pa, može se pozvati odgovarajuća DOS funkcija ali ja radim to ovako:
repeat
writeln ('Insert diskette no ', ndisket, ' in drive ', rezdisk);
write ('Press any key to copy');
readln (dummy1);
size:=disksize (diskno);
until size>0;
pascal.51broker,
-> #34, ilotina> datum i pretvori ga u sledeći oblik:
> godina*10000+mesec*100+dan, i sve to smešta u promenljivu
> tipa longint. I ja tako sav srećan startujem prg., kad ono
> ne leži vraže, on mi izbaci sasvim neku neočekivanu cifru.
> E i na tom mestu sam poludeo, ali sam ipak otkrio
Imao sam slična iskustva i došao do zaključka da je to
najverovatnije bubica Turbo Paskala. ja sam imao jedan veeliki
broj smešten u 4 bajta i kad sam napravio malo matematike da to
odjednom smesti u LongInt dobijao sam takodje bezvezne rezultate.
Morao sam da računam iz dva puta, prvo u Word tipu, pa tek onda
da množim i smeštam u LongInt.
broker
pascal.52mmile,
Da li nekog zanima pisanje BBS Door-ova i izrade biblioteke
procedura koja bi olaksavala ovakav posao ? Ako ima nekog
mail pa da pravimo grupu :).Naravno sve je za Pascal.
pascal.53draganm,
Nasao sam kako RA 2.00 pretvara sifre u crc... Pa ako nekoga interesuje
neka ostavi poruku ...
-=>Phantom Lord<=-/.CoRRoSioN.
pascal.54ssokorac,
Kako iz TP-a startovati neki .BAT program?
pascal.55dejanr,
-> #54, ssokorac>> Kako iz TP-a startovati neki .BAT program?
Direktno se ne može startovati. Ali, možeš funkcijom exec pozvati command.com,
pa onda command.com da startuje program. Nešto kao:
exec('C:\DOS\COMMAND.COM', '/C TEST'); trebalo bi da izvrši TEST.BAT.
pascal.56mmile,
-> #54, ssokorac│
│ Kako iz TP-a startovati neki .BAT program?
│
└───────────
Pa valjda kao i svaki obican program (?)
Procedure Exe( command : string );
begin
SwapVectors;
Exec(GetEnv('COMSPEC'), '/C ' + Command);
SwapVectors;
end;
Gore stavis uses dos i š$M .... ć
i onda pozoves sa exe('IME.BAT');
Bolje je da kucas IME.BAT nego samo IME jer se (valjda) prvo izvrsavaju
.EXE & .COM programi pa tek onda .BAT tj. Ako imas i IME.COM i IME.EXE
i IME.BAT i stavis exe('ime') onda ce se prvo izvrsiti ime.com ili ime.exe.
pascal.57milos,
-> #54, ssokoracMožeš sa EXEC, ali preko COMMAND.COM /C. Ovo /C je vrlo važno da bi se izvršio
samo taj beč fajl i da bi se kontrola vratila tvom programu... Inače, valjda će
se dobiti isti efekat kao i da si rekao DOS Shell (čisto COMMAND.COM, s tim što
bi se izvršio i beč fajl), ali bi kontrola ostala na sekundarnom komandnom
procesoru, pa bi bilo neizbežno ono EXIT...
pascal.58kuki,
-> #55, dejanr>>> Kako iz TP-a startovati neki .BAT program?
> exec('C:\DOS\COMMAND.COM', '/C TEST'); trebalo bi da izvrši TEST.BAT.
ili, univerzalnije rešenje :)))
exec (GetEnv('COMSPEC'),' /c test');
pascal.59ssokorac,
-> #55, dejanr ─┼┤ exec('C:ĐDOSĐCOMMAND.COM', '/C TEST'); trebalo bi da izvrši TEST.BAT.
Da znam za to, ali se desi da nema memorije za učitavanje command-a, a
kako je jedan već učitan, nadao sam se da se on može iskoristiti...
Ok, hvala.
pascal.60dejanr,
-> #58, kuki>> > exec('C:\DOS\COMMAND.COM', '/C TEST'); trebalo bi da izvrši TEST.BAT.
>>
>> ili, univerzalnije rešenje :)))
>>
>> exec (GetEnv('COMSPEC'),' /c test');
Izgleda univerzalnije, ali to meni nije radilo na jednom računaru na kome
je inače instaliran 4DOS. Pošto mi je taj računar bio dosta važan (tamo
sam instalirao neki svoj softver a oni su meni u džep instalirali pare),
privremeno sam stavio kod sebe 4DOS i probao, i kod mene je, čini mi se,
radilo. Onda sam prepravio program u pomenuto C:\DOS\COMMAND.COM i posle
toga je radio i kod mene i na tom računaru. U dalje istraživanje se
nisam upuštao, pošto je problem bio rešen.
pascal.61dejanr,
-> #59, ssokorac
>> Da znam za to, ali se desi da nema memorije za učitavanje command-a, a
>> kako je jedan već učitan, nadao sam se da se on može iskoristiti...
Na žalost ne može, COMMAND.COM je taj koji izvršava linije iz .BAT fajla.
Ako nema njega, nema ko da interpretira komande.
pascal.62mjova,
-> #55, dejanr> exec('C:\DOS\COMMAND.COM', '/C TEST'); trebalo bi da
> izvrši TEST.BAT.
bolje je uzeti comspec env pa iz nje saznati gde je command.com. ako
je nema onda je u C:\.
pascal.63vitez.koja,
-> #54, ssokorac#=> Kako iz TP-a startovati neki .BAT program?
exec('command.com','/c žaklina.bat');
pascal.64isekulovic,
Text file unosim red po red u dvostruko povezanu dinamičku listu. Da
li je moguće nekako da svaki red zauzme tačno mesta koliko mu treba
a ne kao da je u pitanju string maksimalne dužine? Jedino što mi pada
na pamet je da od string napravim jednostruku dinamičku listu kraćih
stringova, ima li boljih ideja?
pascal.65eagle,
-> #64, isekulovic> Text file unosim red po red u dvostruko povezanu dinamičku
> listu. Da li je moguće nekako da svaki red zauzme tačno mesta
> koliko mu treba a ne kao da je u pitanju string maksimalne
> dužine?
Možeš da u listi čuvaš promenljive tipa pointer, a da čitanje/upisivanje
u listu radiš preko nekog pomoćnog stringa.
type x = record
red:pointer; (* jedan red teksta *)
...
end;
procedure string2pointer(var s:string; var p:pointer);
begin
getmem(p,ord(sŠ0Ć)+1);
move(s,p,ord(sŠ0Ć)+1);
end;
procedure pointer2string(var p:pointer; var s:string);
begin
move(p,s,memŠseg(p):ofs(p)Ć+1);
end;
Ovako se pamti i dužina svakog stringa, što je valjda suvišno... ne znam kako
se može odrediti dužina bloka na koji pokazuje p (sizeof(pž) uvek vraća nulu).
pascal.66vitez.koja,
-> #61, dejanr#=>>> Da znam za to, ali se desi da nema memorije za
#=>>> učitavanje command-a, a kako je jedan već učitan,
#=> nadao sam se da se on može iskoristiti...
#=>
#=> Na žalost ne može, COMMAND.COM je taj koji izvršava
#=> linije iz .BAT fajla. Ako nema njega, nema ko da
#=> interpretira komande.
Njega uvek ima :) Jer neki COMMAND.COM je morao i taj tvoj program da učita...
Probaj sa interaptom 0x2E...
pascal.67dejanr,
-> #66, vitez.koja>> > Na žalost ne može, COMMAND.COM je taj koji izvršava
>> > linije iz .BAT fajla. Ako nema njega, nema ko da
>> > interpretira komande.
>>
>> Njega uvek ima :) Jer neki COMMAND.COM je morao i taj tvoj program da
>> učita...
Da, ali kao što možda znaš, COMMAND.COM (ili bar njegov deo) se eventualno
uklanja iz memorije da bi oslobodio prostor za program. Sada to možda i
nije toliko bitno, ali nekada na 16 ili 64 K je itekako bilo. Po izlasku
iz programa proverava se da li je COMMAND.COM "čitav" i ako nije, učitava
se ponovo. Zato se ponekad program na izlasku zaglavi sa cannot load
command, system halted (ili tako nešto).
Dok se izvršava tvoj program, ne možeš računati sa tim da je čitav
COMMAND.COM u memoriji.
pascal.68ssokorac,
-> #67, dejanr ─┼┤ Dok se izvršava tvoj program, ne možeš računati sa tim da je čitav
─┼┤ COMMAND.COM u memoriji.
Zahvaljući isekulovicu koji je našao int 2E :) evo procedure koji izvršava
batch fajl bez potrebe za učitavanjem novog COMMAND.COM-a.
procedure ExeBat(ime:string);
var
r:registers;
begin
with r do
begin
ds:=seg(ime);
si:=ofs(ime)
end;
intr($2E,r);
end;
Važno je da se program koji poziva ovu proceduru ne bude startvona iz
batch (beč:) fajla jer onda dolazi do, kako piše, nepredvidljih posledica :).
Naravno, potrebno je i jedno $M na početku...
pascal.69isekulovic,
-> #65, eagle>> Možeš da u listi čuvaš promenljive tipa pointer, a da
>> čitanje/upisivanje u listu radiš preko nekog pomoćnog stringa.
Hvala veliko, radi savršeno. Malo sam se namučio dok nije proradilo,
ali sada radi ko sat, kvaka je bila u tome što u recordu moraju prvo
da stoje pointeri na prethodnu i sledeću liniju, pa tek onda pointer
na tekst reda.
pascal.72djelovic,
-> #68, ssokorac> Važno je da se program koji poziva ovu proceduru ne bude startvona iz
> batch (beč:) fajla jer onda dolazi do, kako piše, nepredvidljih posledica :).
Posledice nisu nepredvidive, već kako kaže HelpPC:
" before returning to the parent program this interrupt will
attempt to execute the "current" batch file (if the parent or
any ancestors were invoked from a batch file. This can cause
remaining lines in a batch file to execute before the parent
program finishes and fragment memory "
Takođe, postoji još nekoliko važnih činjenica:
- command string must be terminated with a CR
- all registers including SS & SP are destroyed; SS & SP should be
preserved in your own code segment
- incompatible under some software multitasking systems
Koliko mi se čini, ipak je praktičnije koristiti pozive kroz
COMMAND.COM nego kroz ovaj ograničeni poziv :).
pascal.73eagle,
-> #69, isekulovic> Hvala veliko, radi savršeno. Malo sam se namučio dok nije
> proradilo, ali sada radi ko sat, kvaka je bila u tome što u
> recordu moraju prvo da stoje pointeri na prethodnu i sledeću
> liniju, pa tek onda pointer na tekst reda.
Kvaka je u tome što uopšte ne radi kako treba, već trpa stringove
na pogrešno mesto. Treba da stoji:
move(s,pž,ord(sŠ0Ć)+1)
move(pž,s,memŠseg(pž):ofs(pž)Ć+1)
Ovako ih čuva u prostoru koji je određen sa "getmem", a onako od adrese
pointera pa preko pokazivača na linije i ko zna još čega..
pascal.75nikac,
Jos pitanja... Kako da prosledim neku ansi sekvencu do drivera?
Nije vazno da li je resenje u pascalu, c-u ili uopsteno objasnjenje, sve se
prihvata. Probao sam iz pascala i on mi kao rezultat programa:
write(chr(27)+'Š10;10H')
žžžžžžž
to mu dodje ascii kod od esc
umesto da kurzor bude na pozociji <10,10> on mi ispise ceo taj string
(a esc interpretira kao strelicu???)
Dakle, kako da iskoristim neku ansi sekvencu (proverio sam instaliran
je ansi.sys, nije tako glupo objasnjenje).
pascal.74nikac,
Imam jedno pitanje. Ne spada bas u cist pascal, ali nema veze, valjda ce neko
da zna odgovor. Daklem, sledeci program proizvodi veoma cudne efekte, tj.
pre prvog slova ispise neki ascii karakter(primetio sam da se menja karakter
u zavisnosti od duzine stringa), a na kraju ispise dva puta isto slovo. Takodje
ponekad ispise string, pa odmah iza njega opet taj isti string ali otprilike
od pola. Sta bi to moglo da bude, tj. gde je greska jer ocigledno postoji...
Program glasi ovako:
uses crt,dos;
var
s:string;
r:registers;
p:pointer;
begin
clrscr;
s:='Ovo je probni string';
r.ah:=$09;
p:=čs;
r.dx:=ofs(pž);
r.ds:=seg(pž);
intr($21,r);
end.
pascal.76dejanr,
-> #75, nikacProbaj da izbaciš uses crt sa početka programa, možda ti ispis ide
direktno na ekran a ne preko DOS-a.
Ako ti baš treba uses crt zbog drugih stvari, bilo je pre jedno pola
godine u "Bajtovima lične prirode" kako se ipak preusmerava read/write
na DOS. žini mi se da se kaže reset(input) i rewrite (output), a pre
toga možda assign(input,''); i assign(output,'') ili tako nešto.
pascal.77eagle,
-> #74, nikac> Daklem, sledeci program proizvodi veoma cudne
> efekte, tj. pre prvog slova ispise neki ascii karakter(primetio
> sam da se menja karakter u zavisnosti od duzine stringa), a na
> kraju ispise dva puta isto slovo.
> s:='Ovo je probni string';
> p:=čs;
Taj karakter na početku predstavlja dužinu stringa. Svaki string ima i
nulti član u kome se pamti njegova prava dužina, pa kad staviš p:=čs daješ
pointeru adresu baš tog nultog člana. Treba da stoji p:=čsŠ1Ć
pascal.78nikac,
E pa da odgovorim odjednom na oba odgovora.
za dejanr: probao sam i lepo radi sa assign(input,'') itd.
za eagle : Da pretpostavio sam da je ono duzina stringa a u medjuvremenu
sam resio sve dileme. Ali ima jos jedna zamba...
Dakle evo greske (ako nekom mozda zatreba nesto slicno):
uses dos,crt,stdio;
var
s : string;
p : pointer;
r : registers;
begin
clrscr;
s:='probni string$';
ž ovo je veoma vazno
p:=čsŠ1Ć;
žžžžžž kao i ovo
r.ds:=seg(pž);
r.dx:=ofs(pž);
r.ah:=$9;
intr($21,r);
wait;
end.
Ono čsŠ1Ć smesta adresu stringa (bez duzine u sŠ0Ć) u pointer p. Medjutim
ako se na kraju stringa ne stavi ono '$' dos jednostavno ne zna dokle je string
i ide i pise neke nebuloze. E tu mi je odmah palo na pamet kako se to radi
u assembleru, pa reko sto da ne, ajde da probam, kad ono radi!
Eto toliko za ovaj put...
pascal.80broker,
-> #59, ssokorac> Da znam za to, ali se desi da nema memorije za učitavanje
> command-a, a kako je jedan već učitan, nadao sam se da se
> on može iskoristiti...
Mozda će te zanimati: RemoteAcess 1.11 kada ide u DOS SHELL
ostavlja rezidentno samo 3K. Rađen je u TP5.5
broker
pascal.79broker,
-> #52, mmile> Da li nekog zanima pisanje BBS Door-ova i izrade
> biblioteke procedura koja bi olaksavala ovakav posao ? Ako
> ima nekog mail pa da pravimo grupu :).Naravno sve je za
> Pascal.
Ja verovatno mogu biti od koristi, bar kao Beta tester, mada
imam i iskustva u pisanju Door programa.
Sysop Oreska BBS-a,
brokerč38:101/101%setnet.oreska
pascal.81ssokorac,
-> #72, djelovic ─┼┤ Koliko mi se čini, ipak je praktičnije koristiti pozive kroz
─┼┤ COMMAND.COM nego kroz ovaj ograničeni poziv :).
Kako kad, nema se uvek memorije :). Usput, u inter33 je pisalo da su
posledice nepredvidive, pa sam zato takoi napisao :). Tamo je lista
ograničenja i posledica, zato, nešto veća pa ću staviti ovde čim
andilitujem fajlove :).
pascal.82ssokorac,
-> #80, broker ─┼┤ Mozda će te zanimati: RemoteAcess 1.11 kada ide u DOS SHELL
─┼┤ ostavlja rezidentno samo 3K. Rađen je u TP5.5
Hvala, ima i programa koji zauzimaju manje ;). Sve što mi treba je .bat
fajl, ali je to u medjuvremenu rešeno. Svopovanje nije nikakav problem.
pascal.83vitez.koja,
-> #67, dejanr#=> Dok se izvršava tvoj program, ne možeš računati sa tim
#=> da je čitav COMMAND.COM u memoriji.
Ako se neko koristio pomenutim interaptom 2E, imam nekoliko pitanja:
U HELP PCu koji koristim za informacije te vrste piše da taj "neobavezni" deo
komandnog interpretera mora biti učitan ako nije (ceo) rezidentan. Kako
proveriti da li je ceo komandni interpreter prisutan u memoriji, i šta će da se
desi ako aktiviram ovaj interapt, a interpretera nema tamo ?
I još malo pitanja :) Da li je funkcija zahteva saradnju samog komandnog
interpretera, i da li je 4DOS podržava (nedokumentovana je) ?
pascal.84ssokorac,
-> #83, vitez.koja ─┼┤ interpretera, i da li je 4DOS podržava (nedokumentovana je) ?
Za ostalo ne znam, ali sa 4DOS-om radi potpuno ok.
pascal.85sbrk,
>> 4.560 PC.PROG:pascal
>> isekulovic, 07.07.92. 01:12, 268 chr
>> ---------------------------------------------------------
>> Da nije neko slucajno skinuo pre blokade sledece fajlove sa tricklea?
>> -stay42.arc ('How to write a TSR program in Turbo Pascal')
>> -tp55tsr.zip ('TSR units for Turbo Pascal 5.5 applications')
>> -tppop16.arc ('TPUs and ASM for popup and TSR programs')
Bazajući po starim porukama, naletim i na ovo :) Da stvarno neko nema ova
druga dva? Jer stay42.arc nam je neko već nabavio.
Skerl?
pascal.86skerl,
-> #85, sbrk
tppop16.arc je zakacen u PC.PROG.2 uz poruku br 6.360
Pozdrav,
Skerl :)
pascal.87skerl,
-> #85, sbrk
>> >> -tp55tsr.zip ('TSR units for Turbo Pascal 5.5 applications')
Jedva ga iskopah na starim, prasnjavim disketama :)
Pozdrav,
Skerl.
tp55tsr.zippascal.88broker,
-> #82, ssokorac> ─┼┤ Mozda će te zanimati: RemoteAcess 1.11 kada ide u DOS
> SHELL ─┼┤ ostavlja rezidentno samo 3K. Rađen je u TP5.5
>
> Hvala, ima i programa koji zauzimaju manje ;). Sve što mi
> treba je .bat fajl, ali je to u medjuvremenu rešeno.
> Svopovanje nije nikakav problem.
Izgleda da si me pogrešno protumačio?. Nisam mislio ništa drugo do
da navedem podatak.
Kad smo već tu, pretpostavljam da si svoj BBS program radio u
TP-u, pa me zanima kako si rešio svopovanje, rad pod mrežom,
multitasking i tako to...
broker
pascal.89niklaus,
-> #82, ssokorac > ─┼┤ Mozda će te zanimati: RemoteAcess 1.11 kada ide u DOS SHELL
> ─┼┤ ostavlja rezidentno samo 3K. Rađen je u TP5.5
>
> Hvala, ima i programa koji zauzimaju manje ;). Sve što mi treba je
> .bat fajl, ali je to u medjuvremenu rešeno. Svopovanje nije
> nikakav problem.
Na primer odlični SCREEN THIEF (najbolji scr-capture po meni)
koji zauzima 2160 b...
(:niklaus:)
pascal.90niklaus,
-> #78, nikac _____
> uses dos,crt,stdio;
Deder, objasti mi ovo... ili samo mnogo dobro znaš TP i C.
(:niklaus:)
pascal.91ssokorac,
-> #88, broker ─┼┤ TP-u, pa me zanima kako si rešio svopovanje, rad pod mrežom,
─┼┤ multitasking i tako to...
Dok sam pisao program, pod utiskom sezamovih problema sa memorijom,
štedeo sam memoriju maksimalno (tj. skoro maksimalno, uvek može bolje:),
tako da potrebe za svopovanjem nemam - rade arj i zip, kao i command, samo
što sam sada našao rešenje za redirekciju bez njega, a i copy više nema
potrebe za njim, tako da taj deo ide brže.
E, sa, mreža i slično - tu ima mnogo priče, ali ima dosta u INTER33,
plus sam uzeo neke primere iz Matimetičkog instituta, pa se složilo ponešto
:).
pascal.92bulaja,
**** new file ****
R:\IBMPC\PASCAL\*.*
----------------------
gtmous13 zip 85523 GTMouse, unit za rad sa misem (TP/BP 6.0 & 7.0)
GTMOUSE is a Borland Pascal 6.0 & 7.0 Unit for mouse handling.
GTMouse is not a mouse driver, it works over any standard mouse
driver. If included it converts standard block mouse cursor in
smoothly moving across the screen arrow-like mouse cursor in
TEXT MODE of video adapter. This is similar to Norton Utilities
6.0, PCTools 7.0 and some others programs. GTMouse will make
your application program much more attractive and professionally
looking. This is possible only for EGA or VGA adapters, it don't
do anything on others adapters.
pascal.93nikac,
-> #90, niklaus>■ > uses dos,crt,stdio;
>■ žžžžžž
>■ Deder, objasti mi ovo... ili samo mnogo dobro znaš TP i C.
Ma to ti je user unit (moje procedure, zaboravio sam da ga izbrisem iz
listinga). A sta cu, ovako mahinalno na pocetku svakog prg-a kucam uses
ili include, svejedno, stdio :) (sto dzabe da zamaram moje vijuge :)
pascal.94broker,
-> #91, ssokorac> E, sa, mreža i slično - tu ima mnogo priče, ali ima dosta
> u INTER33, plus sam uzeo neke primere iz Matimetičkog
> instituta, pa se složilo ponešto
A jesu li ti primeri dostupni smrtnicima?
broker
pascal.95ssokorac,
-> #94, broker ─┼┤ A jesu li ti primeri dostupni smrtnicima?
Naravno da jesu, ali su na papiru, i to A4 nekih 10 listova, a to mi se
baš ne ukucava, bar ne sve :(. Ali, ako hoće neko da ukuca, mogu da mu dam
papire da ih fotokopira, a ako je bliži kenzi, može da fotokopira i od
njega :). A možda neko već ima tako nešto ukucano?
pascal.96niklaus,
-> #87, skerl >>> >> -tp55tsr.zip ('TSR units for Turbo Pascal 5.5 applications')
>
> Jedva ga iskopah na starim, prasnjavim disketama :)
žesto mi se dešava da razne PD extra biblioteke koji pokupim
su već iskompajlirane u units-e. Kako sam na Borland Pascal-u 7.0 izvesno
vreme, često mi se pojavljuje problem nekompatibilnosti UNIT struktura
između TPU7 i TPU(4-6). Da li postoji neki programčić spasilac koji će da
izvrši potrebnu konferziju.
...ili ću moram da listam one silne dokumentacije o UNIT strukturi.
(:niklaus:)
pascal.97drpr,
-> #96, niklaus-> ...ili ću moram da listam one silne dokumentacije o UNIT
-> strukturi.
Moraćeš , a da li ćeš uspeti ne znam :(( Elem to je stvarno
veliki problem o kome smo pričali već u ovoj conf. Uniti nisu
kompatibilni u raznim verzijama nadajmo se da je samo u
hederima :(
cope
pascal.98niklaus,
-> #97, drpr > veliki problem o kome smo pričali već u ovoj conf. Uniti nisu
> kompatibilni u raznim verzijama nadajmo se da je samo u
> hederima :(
I ja se nadam... Počinjem sa listanjem DOC-ova... ):
)8 niklaus 8(
pascal.99predragd,
-> #96, niklaus> ...ili ću moram da listam one silne dokumentacije o UNIT strukturi.
Da li se nekako može doći do te dokumentacije. I mene
interesuje tvoj problem. Imam dosta unit-a na starijim verzijama
TP-a koji naravno ne rade na BP-u. Bio bih rad na napišem neki
konverter, ali mi nedostaje dokumentacija. Naime, imam podatke
samo o .TPU fajlovima za TP6. Ako uspeš bar donekle da rešiš ovaj
problem mislim da bi ti mnogi TP-ovci bili zahvalni.
Peđa.
pascal.100bulaja,
-> #99, predragd││ili cu moram da listam one silne dokumentacije o UNIT strukturi.
│└───
│ Da li se nekako moze doci do te dokumentacije.
└────
R:\IBMPC\PASCAL\*.*
----------------------
twu1 zip 151084 Objasnjenje strukture TPU datoteka (TP 6.0, TPW 1.0)
pascal.101broker,
-> #95, ssokorac> ─┼┤ A jesu li ti primeri dostupni smrtnicima?
>
> Naravno da jesu, ali su na papiru, i to A4 nekih 10
> listova, a to mi se baš ne ukucava, bar ne sve :(. Ali,
> ako hoće neko da ukuca, mogu da mu dam papire da ih
> fotokopira, a ako je bliži kenzi, može da fotokopira i od
> njega :). A možda neko već ima tako nešto ukucano?
Moze li u mail tvoj phone no. pa da ja zaduzim nekog od
prijatelja....
broker
pascal.102ssokorac,
-> #101, broker ─┼┤ Moze li u mail tvoj phone no. pa da ja zaduzim nekog od
─┼┤ prijatelja....
Može, šaljem. Problem je što se tako dobija zavisnost od Novella pa
program ne radi na jednom compu u DV-u, recimo... Zato sam, pre nego što
sam to završio ipak pisao komunikaciju pomoću fajlovanja, lokovanja :),
šerovanja i sl. :)
pascal.103ndragan,
-> #27, ssokorac/ Ako je nulti bajt nula onda će i stražar :) da pokazuje samo ''.
Pobrkao sam lončiće... kad sam ono čačkao paskal... 89?