PCPROG.3

26 Jul 1993 - 22 Apr 1994

Messages - pascal

pascal.1 mmile,
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.2 bole,
Ljudi... Kako da neki string koji otkucam ubacim u fajl?
pascal.3 isekulovic, -> #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.4 isekulovic, -> #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.5 dejanr, -> #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.6 ssokorac, -> #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.8 ficus, -> #4, isekulovic
Umesto onog prepisivanja iz jednog u drugi fajl, bilo je bolje dumesto Rewrite(fajl2) ka`e{ Append(fajl2)...
pascal.9 dejanr, -> #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.10 isekulovic,
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.11 bole, -> #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.12 bole, -> #5, dejanr
Thanx dr. Uradio sam to, dobio knjigu onu crvenu od duska savica TURBO PASCAL
pascal.13 ssokorac, -> #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.14 milos, -> #10, isekulovic
Pa, 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.15 beast, -> #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.16 dejanr, -> #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.17 adiklic, -> #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.pas
pascal.18 isekulovic, -> #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.19 ssokorac, -> #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.20 m.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.21 isekulovic, -> #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.22 milos,
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.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! Ps. Ovo pitanje se prihvata, zar ne?
pascal.24 drpr, -> #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.25 broker, -> #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.26 ndragan, -> #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.27 ssokorac, -> #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.28 dgrbic, -> #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.29 bole,
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.30 dejanr, -> #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.31 ssokorac, -> #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.32 peca.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.33 bole, -> #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.34 ilotina,
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.35 isekulovic, -> #26, ndragan
>> Ili ti stražar daje tačnije rezultate nego writeln (da nije onaj nulti Proradilo je već, hvala.
pascal.36 dejanr, -> #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.37 ssokorac, -> #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.38 ssokorac, -> #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.39 bole,
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.40 dejanr, -> #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.41 kuki,
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.42 dejanr, -> #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.43 drpr, -> #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.44 ssokorac, -> #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.45 kuki, -> #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.46 mzdravkovic,
Kako mogu iz nekog Pascal programa da ispitam da li ima diskete u A: ili B: drajvu ?
pascal.47 milos, -> #46, mzdravkovic
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... SSokorac , na tebe je red...
pascal.48 beast, -> #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.49 eagle, -> #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.50 dejanr, -> #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.51 broker, -> #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.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.
pascal.53 draganm,
Nasao sam kako RA 2.00 pretvara sifre u crc... Pa ako nekoga interesuje neka ostavi poruku ... -=>Phantom Lord<=-/.CoRRoSioN.
pascal.54 ssokorac,
Kako iz TP-a startovati neki .BAT program?
pascal.55 dejanr, -> #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.56 mmile, -> #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.57 milos, -> #54, ssokorac
Mož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.58 kuki, -> #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.59 ssokorac, -> #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.60 dejanr, -> #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.61 dejanr, -> #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.62 mjova, -> #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.63 vitez.koja, -> #54, ssokorac
#=> Kako iz TP-a startovati neki .BAT program? exec('command.com','/c žaklina.bat');
pascal.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? Jedino što mi pada na pamet je da od string napravim jednostruku dinamičku listu kraćih stringova, ima li boljih ideja?
pascal.65 eagle, -> #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.66 vitez.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.67 dejanr, -> #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.68 ssokorac, -> #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.69 isekulovic, -> #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.72 djelovic, -> #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.73 eagle, -> #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.75 nikac,
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.74 nikac,
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.76 dejanr, -> #75, nikac
Probaj 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.77 eagle, -> #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.78 nikac,
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.80 broker, -> #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.79 broker, -> #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.81 ssokorac, -> #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.82 ssokorac, -> #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.83 vitez.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.84 ssokorac, -> #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.85 sbrk,
>> 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.86 skerl, -> #85, sbrk
tppop16.arc je zakacen u PC.PROG.2 uz poruku br 6.360 Pozdrav, Skerl :)
pascal.87 skerl, -> #85, sbrk
>> >> -tp55tsr.zip ('TSR units for Turbo Pascal 5.5 applications') Jedva ga iskopah na starim, prasnjavim disketama :) Pozdrav, Skerl. tp55tsr.zip
pascal.88 broker, -> #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.89 niklaus, -> #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.90 niklaus, -> #78, nikac
_____ > uses dos,crt,stdio; Deder, objasti mi ovo... ili samo mnogo dobro znaš TP i C. (:niklaus:)
pascal.91 ssokorac, -> #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.92 bulaja,
**** 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.93 nikac, -> #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.94 broker, -> #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.95 ssokorac, -> #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.96 niklaus, -> #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.97 drpr, -> #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.98 niklaus, -> #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.99 predragd, -> #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.100 bulaja, -> #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.101 broker, -> #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.102 ssokorac, -> #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.103 ndragan, -> #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?