unknown.313alexa,
-> #309, jankoE, tamo ima linija scanf sa formatom u kojoj idu redom
> postotak, leva srednja zagrada, pa strelica na gore, pa kvačica
> pa desna srednja zagrada.
A da nema možda i neki blanko znak pre desne zagrade?
Ono u zagradama predstavlja karaktere koji "dolaze u obzir",
a ako ima "strelicu na gore" na početku onda je u pitanju negacija.
Zanči, sve osim blanko znaka (tj. do prvog blanko znaka),
ako je bio i blanko znak u (uglastim) zagradama.
Mada, mislim da je to ekvivalentno sa %s, osim možda kada ima vodećih
blanko znakova.
unknown.314dusanp,
-> #313, alexa=> Mada, mislim da je to ekvivalentno sa %s, osim možda kada
=> ima vodećih blanko znakova.
Nema mnogo veze sa prošlom porukom, ali da pokušam da se
nadovežem. Kako drugi rešavaju učitavanje stringova sa diska
i snimanje na disk. Ja sam se jedno vreme mučio dok nisam
napisao par rutina koje pre rada sa diskom prilagode string
tako da fscanf i fprintf ne greše. Ako bude trebalo, ovo
mogu i detaljnije da objasnim, ali za sada dosta.
A opet, u programima koje je pisao zz vidim dosta slobodno
baratanje stringovima na disku /stringovi imaju i razmake/, a
opet ih c lepo ucitava. Mislim da sam video u sor.str, nije ni
bitno. Jel to zasluga mnogohvaljenih _dos_open i _dos_read ?:)
unknown.315nandi,
-> #312, janko> žini mi se da čovek ipak priča o TC 2.0, inače ne bi pomenuo
> Turbo, a nije ni plusiće stavio. :)
:))). a ja hteo da pomognem. ako je ovo gore tačno dnikolić odmah da
pređe na c++.
dajte ljudi, ako imate problem, opišite malo okolinu i simptome više.
ovako uglavnom se samo pogađa ...
nandi
ps: kola neće da mi se upale. šta da raaaadim?
unknown.316nkbog,
-> #311, janko>> Ma, mislim da nema to veze sam sa tim Make ili BCC-om. To je
>> zez u MS-DOS-u, čini mi se. Znam da se i meni događalo, i to
>> da nisam zaključio kada se to događa. Neko od sezamovaca ti
>> sigurno može reći više o ovome.
Ajd ovako:
U BIOS-u ima poziv funkcije koja vraća informaciju da li je prošla
ponoć (to je int 1Ah/00h). Ova funkcija briše fleg na adresi 40h:70h
koji to pokazuje. Ukoliko vaš program sam meri vreme preko ovog poziva,
to može biti izvor zapetljancija, jer neko drugi (npr DOS neće znati
da treba da promeni datum).
Make utility, sa druge strane, bi trebao uzima podatke od DOS-a koji
sam vodi računa o ovome i o datumu. Da nije tako sistemski datum ne bi bio
ispravan.
NB.
unknown.317nkbog,
-> #310, janko
>> Zatim, univerzalno parsiranje komandne linije, sve sa džokerima,
>> opcijama i opcijama uz koje se navode fajlovi i datoteke sa
>> spiskovima fajlova, napr:
Za džokere u linijama uz većinu kompajlera se isporučuje WILDARG.OBJ
koji se poveže sa ostatkom programa, i sam obradi takve stvari. Za ostale
stvari postoje razni standardni UNIX potprogrami na C-u (na MSDOS nema
takvih standardnih) koji to rade. Inače ne vidim razlog da se za ovo koriste
klase - to već pretstavlja nepotrebno komplikovanje - klase imaju puno
bolju primenu.
NB.
unknown.318janko,
-> #314, dusanp
> nadovežem. Kako drugi rešavaju učitavanje stringova sa
> diska i snimanje na disk. Ja sam se jedno vreme mučio dok
> nisam napisao par rutina koje pre rada sa diskom prilagode
> string tako da fscanf i fprintf ne greše.
Nije mi jasan problem, priznajem. Gde je bila mina?
Ja sam imao problema sa fgets, dok nisam otkrio da posle linije
duže nego što se navede u pozivu ne učitava sledeću, nego
nastavlja gde je stao. S obzirom da se ne zna gde je stao
(možda baš na NL znaku), nisam rešio problem dok nisam napisao
sam svoj ekvivalent fgets. Ne znam može li to elegantnije?
Ne znam šta je problem sa fscanf itd, ali znam da se na C++
manje igra sa formatima. Skoro da možeš kao na bejziku,
(zagriženiji ljubitelji bi rekli, puno više nego na bejziku :)
sve redom da pišeš i ne brineš da li si sve 'skrpio' i u
formatu i u pozivu funkcije.
unknown.319dusanp,
-> #318, janko=> Nije mi jasan problem, priznajem. Gde je bila mina?
Pa greška i nije bila do C-a. Problem je bio u tome
što sam morao da napišem mnogo koda u malo vremena.
Baza podataka je bila na disku organizovana ovako
PRVAVREDNOST=.............CR/LF
DRUGAVREDNOST=............CR/LF
.
.
Itd.
Stvar je bila u tome što sam stringove u bazu nor-
malno fprintfovao na disk, a pri ucitavanju sa
fscanf (file,"%s",...) je program citao stringove do
prvog razmaka i onda haos. Onda dozvlim i ucitavanje
razmaka. Ništa. Dodam kontrolu cr/lf. Opet ništa.
Pošto je rok (tik-tak,tik-tak) opasno isticao, zaklju-
čim da mi je pametnije da prilagodim string pre sni-
manja na disk tako da "ovo je string" postane
"ovo_je_string". Tako sam bio u mogućnosti da ga samo
pljusnem na disk sa fprintf, a kada ga vraćam samo
izbacim crtice i radi. Sad, (lenjost?) i u daljim
programima koristim ove rutine, jer me jednostavno
mrzi da probam nešto što mi već radi.
/Lepša verzija prethodne rečenice kaže da nemam
vremena :)/
unknown.320mjova,
ima li neke šanse da se u nekim slučajevima isključi izvršavanje
funkcije destruktora?
odgovara mi da se ta funkcija uvek izvrašava osim u 1 slučaju. za taj
slučaj mi smeta. da li ima neka konkretna komanda ili mora da se sredi
nekako drugačije?
dakle, može li nekako da se zaobiđe izvršavanje destruktora?
SY
ps. mogu ja sa tim da izađem na kraj, ali me zaima da li ima kraći
put...
unknown.321nandi,
-> #320, mjova> odgovara mi da se ta funkcija uvek izvrašava osim u 1 slučaju.
>
> dakle, može li nekako da se zaobiđe izvršavanje destruktora?
nisam baš najbolje shvatio šta hoćeš da postigneš: da li da neki
objekat nema destruktor (prazan destruktor) ili da se funkcija u
destruktoru izvršava uslovno (if (!slučaj) funkcija) ili nešto treće.
nandi
unknown.322djelovic,
-> #320, mjova> ima li neke šanse da se u nekim slučajevima isključi izvršavanje
> funkcije destruktora?
Destruktori mogu biti virtualni. Ako ga u okviru neke klase tako
deklarišeš, a onda u njenom nasledniku staviš za destruktor praznu f-ju,
onda za naslednike destruktor ne važi.
Drugi način je, naravno, da u klasu uvedeš neki flag koji bi
konstruktor postavljao na 1. Onda oko tela f-je destruktora ubaciš
uslov "if (flag) ...", i posao je završen. Jednostavnim postavljanjem
flega na 0 destruktor neće biti izvršen.
Treće, jedna rizična varjanta: Ako si instancu klase kreirao sa
new, onda nemoj da je uništavaš sa delete (koja poziva destruktor), već
sa free. Ovo bi u principu trebalo da radi, mada je (mislim) zavisno od
načina na koji je new/delete konstruisan, tj. od načina čuvanja
virtualnih tabela. Ako klasa nema virtualnih članova, onda ovo sigurno
radi.█
unknown.323bulaja,
**** new file **** \ibmpc\program\snip9-91.arj
Zbirka raznih korisnik funkcija i primera (isecaka) datih kao C source.
Evo spisa njihovih opisa:
Macros for ANSI.SYS screen control
Write portable code for various PC compilers
Macros for direct video work
AWK program to count lines of C code
Saves/restores 80x87 environment
Reliable cold/warm boot
Determine type of CPU in use
Determine presence of coprocessor
Switch to 43/50 line mode on EGA/VGA
Multiple printer support
Read attribute and build ANSI.SYS command
Build ANSI.SYS command string, given attribute
Allow up to 255 open files under DOS 3+
Filter ASCII to bytes
Allocate stack memory
Detect ANSI.SYS
Fuzzy string search
Filter bytes to ASCII
Read variables from a file
BASIC-like string functions
Bit array functions
Count 1 bits
Small bit array macros
Set border color
Cast any object to any type
Change the standard printer device
Checksum protection for executable files
On-screen clock generator
Calculated 16-bit CRC
Table lookup 32-bit CRC
S-Coder data encryption from DDJ
Cursor management/manipulation
Hide/unhide cursor
TC/TC++/BC++ DOS file time/date macros
DES encryption/decryption
Complex pattern matching (calls patmat())
Copy a file
DOS SORT work-alike
Benignly validate disk drives
On-screen TSR clock
Direct video benchmark - ZTC/Watcom
Copy a file
Like fgets, except reads backwards
Count files/directories
Crunch dot directories, verify DOS-valid paths
Full file name normalization
Demonstrates a finite state machine
Get current working directory for given drive
AT&T compatible getopt(3)
Scan command line for switches
Unix head work-alike
Obfuscated C code
Read data into variables
Expression evaluator
Is a path a valid directory?
Is a file handle associated with a file?
Is a number an integral power of 2?
Integer square root
Julian Day Number computation
Joystick support functions
Keyboard status determination
Set/clear Caps/Num/Scroll locks
Caps/Num lock set/clear functions
Distribution counting sort rediscovered
Large bit array macros
Long double floor
Linked list mergesort
Linked list quicksort
DOS DIR work-alike
Convert long to a string
Convert long to a string
Compression used in LHARC & LHA
Obfuscated C code
Convert strings to morse code
MS Mouse functions
MS Mouse functions
MS Mouse functions
MS Mouse functions
Add peek/poke to MSC
Traps Ctrl-C, Ctrl-Break, Ctrl-Alt-Del
Traps Ctrl-Alt-Del
String pattern matching
Convert Pascal strings to C
Permute strings
Permute strings
Determine permutation index
Calculate PI to 60,000 digits or more
How to print proper plurals
Pop-up communications
Tee stdio to stdprn
Stack-oriented CHDIR functions
Optimized bubble sort
Timed query w/default for batch files
Random number generator
Random number generator
Random number generator
Convert between number bases
Demonstrates output redirection
Regular expression (subset) pattern matching
Compiler-independent find first/next functions
ANSI quicksort function
ANSI quicksort-compatible shellsort function
Remove all files
How to seed ANSI random number generator
Scalar ("Julian") date functions
Scans/converts text fractions
Get screen size
Set DOS master environment legally
Allow user input into a .BAT file
Set, change, or kill a disk volume label
Standard English soundex
Benchmark to calculate I/O performance
Analyze file statistics
Reverse a string in place using XOR swapping
(Shell) Sort a string array
Trim trailing spaces from a string
Read/write structures to/from a file
Suggested coding style guidelines
TC/TC++/BC++ display file date
EBCDIC-ASCII conversion arrays
TC/TC++/BC++ set file time/date stamp
Recursive directory lister
Convert Unix-style pathnames to DOS-style
Unix uudecode
Setup video operations
Fast file copy/append
Obfuscated C code
Search for a file
String concatenation functions
C++ wrapper for LITECOMM
Portability guidelines
How to validate a logical drive
How to blank/restore EGA/VGA screen
How to check if file sharing is active
Direct screen package
Access command processor "back door"
C "glue" to use Int 2Eh
POSIX-compliant header
opendir(), readdir(), seekdir(), closedir()
Directory lister demo
Microsecond timing function header
Microsecond resolution timing functions
Sound functions header
Speaker control functions
Tone generation functions
Background music package
Demo of backgroud music package
unknown.324igor.mil,
-> #313, alexa> Mada, mislim da je to ekvivalentno sa %s, osim možda kada ima vodećih
> blanko znakova.
Pa lepo tamo piše da ima kvačica (pretpostavljam da je to znak č), pa
to predstavlja učitavanje niza do prve kvačice.
unknown.325igor.mil,
-> #319, dusanp> Stvar je bila u tome što sam stringove u bazu nor-
> malno fprintfovao na disk, a pri ucitavanju sa
> fscanf (file,"%s",...) je program citao stringove do
> prvog razmaka i onda haos. Onda dozvlim i ucitavanje
Ovo se, koliko je meni poznato, rešava sa pomenutim uglastim zagradama
u formatu "fscanf" funkcije. Na primer:
fscanf(file, "%ŠžĐnĆ", string);
/* format: '%', left brace, caret, backslash, 'n', right brace */
učitava niz znakova *do* "newline" u niz "string", znači ceo red.
Interesuje me šta se dešava sa samim "newline" karakterom. Bilo bi
logično da on ostane nepročitan (zapravo moralo bi biti tako, u duhu
jezika), pa ga onda treba pojesti npr. pozivom "fgetc". Da li je
uvek ovako? I šta se dešava kad se gornjoj naredbi poturi prazan
red, tj, red koji sadrži samo "newline" karakter?
unknown.326igor.mil,
-> #317, nkbog> Za džokere u linijama uz većinu kompajlera se isporučuje WILDARG.OBJ
> koji se poveže sa ostatkom programa, i sam obradi takve stvari.
Onaj koji je isporučen uz Turbo C 2.01 ne radi kako treba.
unknown.327mjova,
-> #322, djelovic> Treće, jedna rizična varjanta: Ako si instancu klase
> kreirao sa new, onda nemoj da je uništavaš sa delete (koja
> poziva destruktor), već sa free. Ovo bi u principu trebalo
uh, ovo mi ne zvuči baš 'legalno' ;), a ona dva rešenja druga sam i
sam skontao, ali me zanimalo da li ima možda neki drugi, lakši način.
kako sam objekte pravio pre same funkcije main(), njihovi destruktori
su se izvršavali pri svakom napuštanju programa. kad objekte definišem
u samoj fn main() i kad prekidam izvršavanje exit()-om destruktori se
ne startuju!?
na kraju sam se odlučio za korišćenje new, a delete tamo gde treba.
thanks!
SY
unknown.328dusanp,
-> #325, igor.mil=> Interesuje me šta se dešava sa samim "newline"
=> karakterom. Bilo bi logično da on ostane nepročitan
=> (zapravo moralo bi biti tako, u duhu jezika), pa ga onda
=> treba pojesti npr. pozivom "fgetc". Da li je
Pokušam, recimo "%[^\n]". Ne radi. Onda iza zagrade dodam
\n. To zato što se, po teoriji, karakteri van format stringa
preskaču. Tako se izbegava fgetc. Opet ne radi. Zašto?
Ne znam. Onda ipak string pre snimanja sredim sa
while (*s!=0) {if (*s==32) *s='_';}. Gledao sam po dokumenta-
ciji, ali brate deo uputstva za scanf ima 7-8 strana, pa sam
batalio. Bilo mi je bitno da ne moram da kombinujem fscanf i
fgetc, jer na taj način ceo slog baze pokupim sa jednim
fscanf, nekoliko redova dugačkim.
unknown.329zonjic,
-> #325, igor.mil> Interesuje me šta se dešava sa samim "newline" karakterom. Bilo bi
Ostaje u stdin-u i treba uraditi jedno fflush(stdin); da bi ga odbaciJo
unknown.330dgrbic,
-> #325, igor.mil:: fscanf(file, "%[^\n]s", string);
:: /* format: '%', left brace, caret, backslash, 'n', right brace */
::
:: učitava niz znakova *do* "newline" u niz "string", znači ceo red.
::
:: Interesuje me šta se dešava sa samim "newline" karakterom. Bilo bi
:: logično da on ostane nepročitan (zapravo moralo bi biti tako, u
:: duhu jezika), pa ga onda treba pojesti npr. pozivom "fgetc". Da li
:: je uvek ovako? I šta se dešava kad se gornjoj naredbi poturi
:: prazan red, tj, red koji sadrži samo "newline" karakter?
Ja probao (MSC 6.0) i evo rezultata:
Navedeni format zaista učitava CEO red (do newline).
Zatim je potrebno pročitati newline sa fgets, nisam uspeo na drugi način
(neko je pomenuo fflush, ali to ne radi).
fscanf, čini se, nikako ne može da pročita newline?
unknown.331rcojba,
Ima li neko od korisnika sezama BC++ 3.0 ako ima nek se javi !!!!!
rcojba !
unknown.332dusanp,
-> #331, rcojba=> Ima li neko od korisnika sezama BC++ 3.0 ako ima nek se
=> javi !!!!!
Zvao sam juče. Za nove korisnike je cena $569, a za
upgrade treba imati $229 !!! Ne misliš valjda na crnu
kopiju, greh je jedan tako moćan paket imati bez doku-
mentacije.
unknown.333gvuckovic,
Molio bih neku dobru dusu(ako je ima ;) da mi posalje c0h.obj
za TC 2.0 (nevidjoh da sam je obris'o), hitno mi je potrebno.
Goran..
unknown.334ndragan,
-> #315, nandi/ ps: kola neće da mi se upale. šta da raaaadim?
Pređi na bicikl. Ne smeta mu ni ako u sred zime prenoći sa uključenim
svetlima. Ujutro garant kreše - proverio sam stotinama puta.
unknown.335dnikolic,
-> #326, igor.mil>> Onaj koji je isporucen uz Turbo C 2.01 ne radi kako treba.
Koji bre Tc 2.01?!?!?!? Pa zar to postoja, a ja da nemam?? Kad je to izaslo i
kakve su razlike u odnosu na 2.0?
dn
unknown.336stomic,
-> #334, ndragan$ / ps: kola neće da mi se upale. šta da raaaadim?
$
$ Pređi na bicikl. Ne smeta mu ni ako u sred zime prenoći sa
$ uključenim svetlima. Ujutro garant kreše - proverio sam
$ stotinama puta.
Kakve ovo ima veze sa C-om? Jel' to neka UNDOCUMENTED
funkcija C-a?
Pozdrav stomic
▀▀▀▀▀▀▀▀▀▀▀▀▀▀
P.S: Šalim se! OK?
unknown.338ndragan,
-> #325, igor.mil/ /* format: '%', left brace, caret, backslash, 'n', right brace */
Mislio sam da se taj 'caret' zove u stvari 'circumflex', a da je 'caret'
obrnut (onaj znak na slovu ž kao chetka). Btw, za ostale znake još i znam
neke tipografske nazive (ampersend &, underscore _, asterisk *, ellipsis
...), ali kako se stručno zovu majmun i taraba?
Bue_ NDragan
unknown.340janko,
-> #325, igor.mil> Ovo se, koliko je meni poznato, rešava sa pomenutim
> uglastim zagradama u formatu "fscanf" funkcije. Na
> primer:
>
> fscanf(file, "%ŠžĐnĆ", string);
> /* format: '%', left brace, caret, backslash, 'n', right
> brace */
>
> učitava niz znakova *do* "newline" u niz "string", znači
> ceo red.
Najlepše je to što upotreba srednjih zagrada _postoji_ u ANSI
standardu (ali ja to nisam primetio). Dakle, portabilno je, i
može da se preporuči za upotrebu!
U zz-ovom programu se ne navode Đn-ovi, a program ipak čita
konfiguraciju koja je u više redova. Kako to?
Kada se navede veličina polja u formatu, koji je sledeći znak
koji se dobija sa getchar?
unknown.341duduk,
-> #325, igor.mil
> Interesuje me sta se desava sa samim "newline" karakterom. Bilo bi
> logicno da on ostane neprocitan (zapravo moralo bi biti tako, u duhu
> jezika), .....
"\n" se NE ucitava, a problemi obicno nastanu kad treba da se ucita.
Dakle, pod pretpostavkom da je linija ucitana sa formatom "%[^\n]", ako
se izvrsi fscanf(...,"\n") predje preko nl-ova koliko ih ima jedan do
drugog ( preskacu se prazne linije ), a zatim i PREKO VODECIH RAZMAKA u
narednoj nepraznoj liniji?!?! Ako se pak izvrsi fscanf(...,"%*[\n]), gde
zvezdica znaci da procitano ne treba nigde smestiti, prelazi se SAMO preko
uzastopnih nl-ova!! Ovo drugo sam i ocekivao, jer prelazim preko niza od
samih nl-ova, ali ono prvo mi i nije bas jasno. Uostalom evo primera, pa
nek proba koga je volja:
[=== CUT HERE =========================================================]
#include <stdio.h>
#include <conio.h>
void main(int argc,char **argv)
{
FILE *f;char s[100];
clrscr();
f=fopen(argv[1],"r");
fscanf(f,"\n");
if (!feof(f)) fscanf(f,"%[^\n]",s);
while(!feof(f))
{
fscanf(f,"\n");
printf("s=%s;\n",s);
fscanf(f,"%[^\n]",s);
}
fclose(f);
getch();
f=fopen(argv[1],"r");
fscanf(f,"%*[\n]");
if (!feof(f)) fscanf(f,"%[^\n]",s);
while(!feof(f))
{
fscanf(f,"%*[\n]");
printf("s=%s;\n",s);
fscanf(f,"%[^\n]",s);
}
fclose(f);
}
[=== CUT HERE =========================================================]
Preskacu se prazne linije na pocetku, i bilo gde drugde, a i izbegavaju
se pojave da se zadnja linija ispise dva puta ili ne procita/ispise
uopste ako nije zavrsena nl-om.
read.exeunknown.342duduk,
-> #338, ndragan
> ali kako se strucno zovu majmun i taraba?
@ = business a
# = hash
unknown.343ljubao,
-> #340, janko>>U zz-ovom programu se ne navode Đn-ovi, a program ipak čita
>>konfiguraciju koja je u više redova. Kako to?
Verovatno ima na kraju format stringa (ili na početku sledećeg) jedan
'space' kojim se preskaču svi sledeći razmaci, 'tabovi', CR-ovi itd.
Ljuba
unknown.344vbole,
-> #338, ndragan> Mislio sam da se taj 'caret' zove u stvari 'circumflex', a da je 'caret'
> obrnut (onaj znak na slovu C kao chetka). Btw, za ostale znake jos i
> znam neke tipografske nazive (ampersend &, underscore _, asterisk *,
> ellipsis ...), ali kako se strucno zovu majmun i taraba?
@ = majmun = At (Sign)
# = taraba = Pound (Sign)
$ = dolar = Dollar (Sign)
^ = stepen(?) = Caret
- = minus = Hyphen
. = tacka = Period
/ = kosa crta = Slash
: = dvotacka = Colon
; = tac-zarez = Semicolon
( = zagrada = Paranthesis (Left, Right)
[ = u.zagrada = Bracket (Left, Right)
{ = v.zagrada = Brace (Left, Right)
Glupo mi je vise da kucam, em' vidim sve nasa slova umesto zagrada i majmuna,
em' verovatno i znas - ajd' cao.
unknown.345ilazarevic,
-> #344, vbole█ # = taraba = Pound (Sign)
Pound? Engleska funta? Ako je to, znak je ono L :))
█ ž = stepen(?) = Caret
Ovo se u francuskom zove circumflex (nepravilno napisano)
unknown.346ndragan,
-> #336, stomic/ P.S: Šalim se! OK?
Nije bilo jasno? Pa, veza je u sledećem: za istu godinu sam planirao da
naučim C i da rasturam menjač na biciklu. Te dve stvari imaju podjednako
mutnu sintaksu. Koja je to godina? Nemam pojma, počinje sa 2.
unknown.347dejanr,
-> #345, ilazarevic>> Pound? Engleska funta? Ako je to, znak je ono L :))
Jeste, ako postoji u setu znakova.Ako ne postoji, koristi se #
unknown.348mjova,
vrlo zanimljivo, imam 'wildargs.obj', ali nemam uputstvo :)
može li neko da mi da par smernica, u kratkim crtama, kako da to
probam, ili ću morati sam da napišem obradu ludih ;) argumenata..
SY
unknown.349mjova,
-> #340, janko> U zz-ovom programu se ne navode Đn-ovi, a program ipak
> čita konfiguraciju koja je u više redova. Kako to?
kad učitavam tekst iz neke datoteke to datim npr ovako:
fscanf(input_file, "%160[ - ]", &input_line);
e, sad, možda postoje i druga rešenja, ali meni ovakvo odgovara i
radi. u [] se nalazi kod 32, '-' i kod 255. broj 160 je dužina reda
koji učitavam. konkretno mi je tako trebalo, ali ako se izostavi onda
se čita ceo red tj do pojave nekog od znakova koji nisu u skupu od 32
do 255.
sasvim je logično učitavati red po red i svaki posebno skanirati i
upoređivati zadate reči u cfg datoteci sa nekom tabelom u kojoj su
opisane same reči i aktivnosti koje treba preduzeti radi njihove
obrade.
ako pri skaniranju umesto značajnog znaka (slova) prg naiđe na '\n'
vrati se nazad u petlju i nastavi sa čitanjem (tj čitaj novi red).
ako neke reči nema u onoj tabeli prijavi grešku itd.
treba se odlučiti o tome da li se koriste kodovi ispod 32, koji su
vrlo nezgodni za upotrebu u datotekama koje se edituju običnim
editorom.
SY
unknown.350ppekovic,
-> #348, mjova>> vrlo zanimljivo, imam 'wildargs.obj', ali nemam uputstvo :)
>> može li neko da mi da par smernica, u kratkim crtama, kako da to
>> probam, ili ću morati sam da napišem obradu ludih ;) argumenata..
Nemaš potrebe da se trudiš mjovo. U onoj novoj arhivi (stigla pre
neki dan) gde ima gomila C source-ova, imaš i jedan u kome je rešen
rad sa * i ?.
Paya
unknown.351obren,
-> #348, mjova> vrlo zanimljivo, imam 'wildargs.obj', ali nemam uputstvo :)
> može li neko da mi da par smernica, u kratkim crtama, kako da to
> probam, ili ću morati sam da napišem obradu ludih ;) argumenata..
Ubaciš u project osim tvojih modula i WILDARGS.OBJ pa onda lepo prevedeš.
Posle kada startuješ program sa recimo:
WILD *.EXE
on ti ubaci u listu argumenata umesto '*.EXE', imena fajlova koji zadovoljavaju
tu masku. Posle ih samo skidaš sa argvŠ1Ć, argvŠ2Ć, ...
unknown.352ndragan,
-> #344, vbole/ em' verovatno i znas - ajd' cao.
Ostalo jesam znao, a i ovo me razočaralo. Očekivao sam da će i za ona
dva odnekud isplivati latinski nazivi. Et sajn - ne zvuči baš jasno kad
nekom treba da diktiraš preko telefona. Uostalom, za diktiranje preko
telefona idu druge tehnike "kucaš onda chkdsk... c kao cetinje, h kao
hrkanje, ne ne, hrkanje, k kao kanta, pa onda dsk kao daska bez a... bez
razmaka, jel imaš šes slova dosad, dobro, pa sad razmak, pa kroz, imaš
ga tamo desno iznad sedmice, jedte kosa crta, i f kao furuna, bez
razmaka, i enter jel te pita nešto za jes no? ne? ajd izdiktiraj šta si
napisala.." i tako do besvesti.
Bue_ NDragan
unknown.353igor.mil,
-> #335, dnikolic> Koji bre Tc 2.01?!?!?!? Pa zar to postoja, a ja da nemam?? Kad je to
> izaslo i kakve su razlike u odnosu na 2.0?
Ne znam brate, to je prvi i jedini Turbo C koji imam.
unknown.354janko,
-> #352, ndragan> ga tamo desno iznad sedmice, jedte kosa crta, i f kao
> furuna, bez razmaka, i enter jel te pita nešto za jes no?
> ne? ajd izdiktiraj šta si napisala.." i tako do besvesti.
Pa zatim, dobro si napisala, ali šta još vidiš na ekranu? I
onda provališ da je sve to kucala tamo gde ne treba -- nije ni
ušla u Dos (ako si diktirao 'Chkdsk') Da, da. :)
unknown.355dzoran,
rz
B00000000000000
Zdravo! Imam jedan problem.
Neznam da li spada u ovu temu konferencije ali nista slicno nisam video.
Uprilici sam da doradjujem jedan fortranski program iz domena kvantne fizike.
Dosta memorijskog prostora se potrosi na razne matrice.
Program je duzine oko 40 KB i kompajlira se sa MS Fortranom u large modu,
tom prilikom se poveca na oko 450 KB.
Za neke graficke rutine sam napravio shell u MSC600.
Sa obicnim linkanjem sa LINK /NOE program je dugacak oko 550 KB.
Funkcije u MSC koriste pointere i jedan bafer za skrolovanje grafickog dela
ekrana.
Opcija /P u
LINK /NOP /P ....;
smanji program na oko 110 KB ali program tada ne mogu startovati.
Zanima me ima da li neko ima informaciju da li mogu da module kompajliram
u small ili medium modu radi manjeg gutanja memorije,da bih izbegao koriscenje
overleja i pripadajuce opcije za compajliranje i linkanje.
Pozeljan je kratak primer iz definicionog dela fortrana i C-a.
Unapred zahvalan Zoran
unknown.356ppekovic,
Jel postoji neki lakši način od pisanja potpuno nove funkcije za editovanje
stringa. Tj. hoću nešto kao gets() ili scanf("%s",...) ali da mi dozvoli
ispravljanje prethodne vrednosti stringa.
Paya
unknown.357mjova,
-> #356, ppekovic> š
> asm š
ako već simuliraš YUSCII ;), onda je { == Š, a ne š (== [).
drugo, problem ćeš rešiti ovako (dok neko ne da bolje rešenje):
ili
void main() { │ void main() {
asm { │ asm cmp ax, ax
cmp ax, ax │ asm je labela
je labela │ labela:
} │ asm nop
labela: │ }
asm { │
nop │
} │
} │
takođe da ti skrenem pažnju da bi trebalo da paziš na registre (BP,
SP), jer to nije uradio kompajler.
SY
unknown.358obren,
-> #357, mjova> drugo, problem ćeš rešiti ovako (dok neko ne da bolje rešenje):
Hvala! žesto sam koristio asm u programima ali još ni jednom mi
nisu trebali skokovi, tako da nisam ni primetio da zeza sa labelama.
Rešenje lepo radi, što sam i probao, ali mi nekako izgleda neprirodno
što moram da prekidam blok da bih napisao labelu, pa zatim ponovo da
nastavim... a uz to rekao sam čoveku (malte ne sam se opkladio) da je
moguće koristiti labele ali sigurno na neki specifičan način, jer ne
verujem da je Borland dopustio sebi neku takvu nedoslednost.
BTW, meni je u SOR-u po broju tvoja poruka odgovor na MOJE pitanje
mada vidim da si ti odgovorio ppekovic-u. Ne znam šta je to pisalo u
njegovoj poruci ali u svakom slučaju hvala svima. Verovatno je došlo
do zbrke zbog onog novog diska, koji je "pojeo" neke poruke.
unknown.359obren,
-> #356, ppekovic> Jel postoji neki lakši način od pisanja potpuno nove funkcije za
> editovanje stringa. Tj. hoću nešto kao gets() ili scanf("%s",...)
> ali da mi dozvoli ispravljanje prethodne vrednosti stringa.
>
> Paya
Jel bi neko mogao da ponovi odgovor na ovo pitanje? Nema ga kod mene u
SOR-u, a interesuje me. Ispod poruke piše "Reply(s) in: 357". Na žalost
tu poruku nisam dobio u PAD-u. Verovatno je završila na novom disku.
P.S. Može i na mail.
unknown.360skoprivica,
-> #357, mjova>-> ako vec simuliras YUSCII ;), onda je { == S, a ne s (== [).
Nije, ali nije vazno...S je na [, a s je na {...
unknown.361mjova,
-> #358, obren> BTW, meni je u SOR-u po broju tvoja poruka odgovor na MOJE
> pitanje mada vidim da si ti odgovorio ppekovic-u. Ne znam
ma neka frka je bila oko onog novog diska, inače sam tebi odgovorio a
ne paji, njemu samo jedna devojčica sme da odgovori ;)
SY
unknown.362dnikolic,
Jel skidao ovde neko onaj CBASE sa Sezama, i kakva su iskustva sa njim. Mislim
na pouzdanost, brzinu i slicno.
dn
P.S. Bulajo, ti rece da imas nesto slicno. Kako to radi, opet u poredjenju sa
Clipperom?
unknown.363max.headroom,
Evo jedne male rekurzivne f-je, ali stvar radi dosta šašavo :)
Slučajno sam naišao na ovo kada sam kopao po "C-Tutor"u, pa
rek'o da vidim ima li ko ideju šta se ovde zaista događa. Ja sam
došao do zanimljivog rešenja, pretpostavljam da je tačno.
(Pažnja, stvar ne radi ono što bi rekli na prvi pogled! ;)
main()
š
int index=8;
odbrojav (index);
ć
odbrojav (broj)
int broj;
š
broj--;
printf ("Vrednost broja je %dĐn",broj);
if (count > 0)
odbrojav (broj);
printf ("Sada je broj = %dĐn",broj);
ć
unknown.364ppekovic,
-> #363, max.headroom>> main()
>> š
>> int index=8;
>>
>> odbrojav (index);
>>ć
>>
>> odbrojav (broj)
>> int broj;
>> š
>> broj--;
>> printf ("Vrednost broja je %dĐn",broj);
>>
>> if (count > 0)
>> odbrojav (broj);
>>
>> printf ("Sada je broj = %dĐn",broj);
>>ć
Pa prvo, kompajler će prijaviti grešku pri kompajliranju jer
promenljiva count uopšte nije definisana, a i da jeste, program bi bio
besmislen, tj. ili bi se odbrojav izvršilo jednom ili onoliko koliko
bi veličina steka dozvolila.
A ako staviš broj umesto count, onda program radi upravo ono što
na prvi pogled izgleda da radi.
Paya
unknown.366nimi,
pocetniku u TSR programiranju potrebna informacija o interrupt handler-u.
M.D.Nikolic
unknown.367obren,
-> #366, nimi> pocetniku u TSR programiranju potrebna informacija o interrupt
> handler-u.
Pretpostavljam da te interesuje kako da preuzmeš neki interapt. To
imaš u help-u pa nema potrebe da ti pišem primer. Pogledaj example za
funkciju keep. Inače, pošto si početnik u toj oblasti, savetujem ti
da za početak nabaviš neku dobru knjigu. Teško da ćeš naučiti nešto
više od osnova gledajući helpove ili hakerišući.
Pozdrav, Dragan
unknown.368mjova,
treba li pratiti int 9 u cilju detekcije ctrl-break-a ili se može
nekako preusmeriti (promeniti default) rutina za obradu break stanja?
SY
unknown.369dzakic,
-> #368, mjova>> treba li pratiti int 9 u cilju detekcije ctrl-break-a ili se može
>> nekako preusmeriti (promeniti default) rutina za obradu break
>> stanja?
INT 23h Break address. Zar nije to što ti treba?
unknown.370max.headroom,
-> #364, ppekovic> A ako staviš broj umesto count, onda program radi upravo
Sorry, u pravu si za zamenu "count" u "broj". Ali, rezultat je i
dalje:
7
6
5
4
3
2
1
0
1
2
3
4
5
6
7
Zanimljivo, ha? :)
unknown.371mjova,
-> #369, dzakic> INT 23h Break address. Zar nije to što ti treba?
ne znam, ali moraću da probam. isključivanje nije problem, ali neki
put reba napraviti lep prekid, a ne kao default što odštampa ^C. ružno
deluje ako se neki proces prekine i onda se pojavi takvo nešto na
ekranu.
SY
unknown.372ppekovic,
-> #367, obren>> Pretpostavljam da te interesuje kako da preuzmeš neki interapt. To
>> imaš u help-u pa nema potrebe da ti pišem primer. Pogledaj example za
>> funkciju keep. Inače, pošto si početnik u toj oblasti, savetujem ti
>> da za početak nabaviš neku dobru knjigu. Teško da ćeš naučiti nešto
>> više od osnova gledajući helpove ili hakerišući.
Ima i zanimljiv tekst ZZivotic-a u jednom od prošlogodišnjih
brojeva Računara. Takođe, na sezamu u RSOFT dir-u ima i primer iz tog
teksta.
Paya
unknown.373prvul,
-> #370, max.headroomŮSorry, u pravu si za zamenu "count" u "broj". Ali, rezultat je i
Ůdalje:
Ů▄▄
A šta si ti očekivao? Pa "izvlačenje" iz rekurzije ide po LIFO šemi...
Prvul
unknown.374max.headroom,
Help!
Hoću da napišem program koji će da otvori ASCII fajl i da
podatke koje pročita iz njega ispiše na ekran (ili prebaci u
neki niz, još bolje), ali u BINARNOM obliku.
Na primer, ako u ASCII fajlu piše:
TRA LA LA
On treba da mi ubaci u niz:
01100100011100100000101010010101010 (na primer)
čelim da ostavim i space-ove, tj. sve kako jeste.
Problem mi je što ne znam kako da pravilno otvorim datoteku za
binarno čitanje, a i kada je tako otvorim - kako da sadržaj tog
dela memorije (gde je ubačen sadržaj fajla) prebacim, npr., u
niz, a sve to u Binarnom obliku.
unknown.375obren,
-> #372, ppekovic> Ima i zanimljiv tekst ZZivotic-a u jednom od prošlogodišnjih
> brojeva Računara. Takođe, na sezamu u RSOFT dir-u ima i primer iz
> tog teksta.
Da, zaboravio sam na taj tekst. Odličan je ali ne bih rekao da je
namenjen totalnim početnicima. Sem toga ne verujem da čovek koristi
Microsoft C.
unknown.376obren,
-> #371, mjova> ne znam, ali moraću da probam. isključivanje nije problem, ali neki
> put reba napraviti lep prekid, a ne kao default što odštampa ^C.
> ružno deluje ako se neki proces prekine i onda se pojavi takvo nešto
> na ekranu.
Ako koristiš Turbo C/C++ imaš funkciju ctrlbrk koja radi upravo ono
što ti treba. Imaš i primer u helpu.
unknown.377dusanp,
-> #374, max.headroom=> Hoću da napišem program koji će da otvori ASCII
=> fajl i da podatke koje pročita iz njega ispiše na
=> ekran (ili prebaci u neki niz, još bolje), ali u BINARNOM
=> obliku.
************************************************************
#include <stdio.h>
FILE *file;
void translate (int ch)
{
if (ch & 128) {putch ('1');} else putch('0');
if (ch & 64) {putch ('1');} else putch('0');
if (ch & 32) {putch ('1');} else putch('0');
if (ch & 16) {putch ('1');} else putch('0');
if (ch & 8) {putch ('1');} else putch('0');
if (ch & 4) {putch ('1');} else putch('0');
if (ch & 2) {putch ('1');} else putch('0');
if (ch & 1) {putch ('1');} else putch('0');
}
void main (int argc,char *argv[])
{
long filelen,counter;
int ch;
if ((file=fopen(argv[argc-1],"r+"))==0) {
perror (argv[argc-1]);
exit (1);
}
fseek (file,0L,SEEK_END);
filelen=ftell(file);
fseek (file,0L,SEEK_SET);
for (counter=1;counter<=filelen;counter++) {
ch=fgetc(file);
printf ("\nChar #%ld = %i = ",counter,ch);
translate(ch);
}
fclose (file);
}
************************************************************
Mislim da ces lako da se snadjes...
unknown.378max.headroom,
-> #373, prvul> A šta si ti očekivao? Pa "izvlačenje" iz rekurzije ide po
> LIFO šemi...
Ok, interesuje me gde se smešta ona promenljiva "broj" za svaki
"nivo" rekurzije, jer se očigledno svaki put, kako se program
vraća iz rekurzije, on povećava za jedan (ona stara vrednost sa
tog "nivoa" je negde smeštena, ali gde?) Kako kompajler zna sa
kog je nivoa npr. "broj=4" i kako ne pomeša promenljivu sa
vrednostima sa drugih nivoa?
unknown.379prvul,
-> #378, max.headroomŮ> A šta si ti očekivao? Pa "izvlačenje" iz rekurzije ide po
Ů> LIFO šemi...
Ů
ŮOk, interesuje me gde se smešta ona promenljiva "broj" za svaki
Ů"nivo" rekurzije, jer se očigledno svaki put, kako se programŮ▄▄▄
Na steku (u stvari, čim je LIFO u pitanju, mora da je tu negde i stek).
Sada, postoji više šema pokojima se to može stvarno realizovati, ali
jedan od najčešćih je sledeći: na steku se pri pozivu procedure ostavlja
mesta za lokalne promenljive (osim ako su klase static). I onda, kada
se upadne u drugi nivo rekurzije, na steku se opet alocira mesto za lokalne
promenljive tako da funkcija više ne "vidi" lokalnu promenljivu iz
prethodnog nivoa... kada se vrati iz unutrašnjeg nivoa rekurzije,
oslobađa se to mesto na steku i time ponovo "otkriva" promenljive
iz prethodnog nivoa...
Prvul
unknown.380mjova,
-> #376, obren> Ako koristiš Turbo C/C++ imaš funkciju ctrlbrk koja radi
> upravo ono što ti treba. Imaš i primer u helpu.
da, da, koristim, ali ni sa ovim ne mogu da sredim lako problem. ovim
mogu da sredim problem delimično. ipak ću morati da isključim
ctrl-break.
u onoj gomili C programčića (sa sezama SNAP ili tako nekako) našao sam
kako može da se presretne break. naravno da sam morao to malo da
izmenim, ali ko zna da li i to valja. meni se komp par puta blokirao,
možda je razlog u tome što su silni TSR-ovi u memoriji. (mada me ne
zanima me da li je do njih, jer mi oni više znače. ;)
deo koda je ovakav (ovuda prolazi samo ako je pritisnut ctrl):
b= inp(0x61);
outp(0x61, b | 0x80); // disable keyboard
outp(0x61, b); // enable keyboard
outp(0x20, 0x20);
???????? 0x20 je intr kontroler, ali u HelpPC-u sam našao da na taj
port ne ide više od 0x1f ima li neko podatak šta se ovde dešava?
SY
unknown.381dgrbic,
-> #380, mjova:: outp(0x20, 0x20);
::
:: ???????? 0x20 je intr kontroler, ali u HelpPC-u sam našao da na taj
:: port ne ide više od 0x1f ima li neko podatak šta se ovde dešava?
Interapt kontroler se resetuje da bi mogao da generiše naredni interapt.
Ako ovo ne staviš, zaludeće se tastatura, sat i sve ostalo što pokuša da
prekine procesor.
unknown.382ppekovic,
-> #378, max.headroom>> Ok, interesuje me gde se smešta ona promenljiva "broj" za svaki
>> "nivo" rekurzije, jer se očigledno svaki put, kako se program
>> vraća iz rekurzije, on povećava za jedan (ona stara vrednost sa
>> tog "nivoa" je negde smeštena, ali gde?) Kako kompajler zna sa
>> kog je nivoa npr. "broj=4" i kako ne pomeša promenljivu sa
>> vrednostima sa drugih nivoa?
žuva se na stack-u.
Paya
unknown.383obren,
-> #380, mjova> da, da, koristim, ali ni sa ovim ne mogu da sredim lako problem.
> ovim mogu da sredim problem delimično. ipak ću morati da isključim
> ctrl-break.
Napiši šta TAžNO želiš da se dogodi kada pritisneš CTRL-BREAK - možda
mogu da ti pomognem. Ne znam jel ti hoćeš da se tog trenutka izađe u dos
uz neku lepu poruku ili želiš da se onda izvrši neka funkcija pa da se
nastavi rad programa? Ili je možda nešto treće?
Pozdrav, Dragan
unknown.384mjova,
-> #383, obren> Napiši šta TAžNO želiš da se dogodi kada pritisneš
> CTRL-BREAK - možda
ovo što ću sad da opišem rešio sam preuzimanjem int 9, ali to mi se ne
dopada iz drugih razloga.
u nekim slučajevima želim da onemogućim break, tako da se prekid
ostvari kad ja hoću (ako treba), a ne u svakom slučaju. dobro, bolje
je uvek zabraniti break nego ružan prekid u nezgodnom trenutku.
ctrlbrk() je fina funkcija, ali proces se ipak prekida. evo glupe
situacije. ne želiš da prekineš proces i daš da rutina za obradu
prekida ima samo return(TRUE); probaš da prekineš i primetiš ^C na
ekranu ;).
ako štampaš nešto na ekran, onda će se štampanje prekinuti, ispisati
^C, pozvati rutina za obradu break-a i nastaviti program, ali ne tamo
gde je prekinut! nego od sledeće linije koda. ovo je glup način za
kontrolu break-a i zato sam od ovoga odustao.
preuzimanje int 9 rešava ovaj problem u potpunosti ali mora velika
pažnja da se obrati na oslobađanje istog pri izlasku. zsa ovo je
zgodno koristiti konstruktor i destruktor.
SY
unknown.385radunovic,
-> #384, mjova
Jesi li probao funkcije signal() i raise()?
unknown.386mjova,
-> #385, radunovic> Jesi li probao funkcije signal() i raise()?
nisam, probaću, ali iz čiste radoznalosti ;) jer sam problem rešio na
drugi način koji mi se u potpunosti dopada. hvala na novoj ideji.
nešto se sad setih, ako pozoveš neki program kao child process, onda
se verovatno ne prenosi 'signal' pa to može da ima loše strane.
SY
unknown.387ljubao,
Oj, imam TC++ 1.0 i juče sam hteo da poludim. Naime, program je
čitao iz datoteke stringove napisane kao 'tekst'\n, a u programu je
bilo fscanf(fp,"'%(^')' ",ptr); (male zagrade u format stringu su naravno
srednje).
Program lepo pročita prvi string i onda nikako nije hteo LF. Probao
sam i \n i lupao svakakve gluposti i ništa. Na kraju sam morao da sa dva
fgetc pređem na sledeći string.
Takođe, nije čitao drugi string kada su bili u istom redu razdvojeni
blankovima.
Sada, zašto ovo ne radi (bag ili šta je već razlog), jer na Atariju
ovako čitanje je u redu, a i koliko ja znam, onaj blanko na kraju format
stringa treba da preskoči sve blankove, tabove i ostala čuda.
I na kraju, da li mogu (ako da, kako) da kažem linkeru koje
biblioteke da mi linkuje ili to C radi sam, tj. ako postoji funkcija
iz neke LIB u programu automatski je linkuje.
Ljuba
unknown.388mjova,
-> #387, ljubao> Program lepo pročita prvi string i onda nikako nije hteo
> LF. Probao sam i \n i lupao svakakve gluposti i ništa. Na
> kraju sam morao da sa dva
za rad sa tekstovima imam neke rutine koje služe za uzimanje cele
linije, znaka, broja itd. ono što tebi treba je sledeća fn. obično
datoteke koje su ul/izl baferišem pre toga, radi brzine. a liniju uvek
učitam u buffer (ceo red) i ako nisu baferisane onda se ovim dovoljno
lepo radi..
char input_line[81];
//-------------------------------------------- get_ch
// uzimanje tekućeg karaktera,
// ako je kraj onda vraca CR (ako naiđe na \0 onda LF)
char get_ch(void){
if(!input_line[ch_add]) return(LF);
return(input_line[ch_add]);
}
//-------------------------------------------- get_nx
// uzima PRVI sledeci char
// vraca char, LF ako je kraj reda i CR ako je kraj fajla
// ovo možeš u c++ da razdvojiš na dve fn (overload)
char get_nx(int n){ // default n= 1
if(!n) return(get_ch());
while(n) {
n--;
ch_add++;
if(strlen(input_line) < ch_add) get_nl();
}
return(get_ch());
}
//-------------------------------------------- get_nl
// uzima ceo red i enter
char *get_nl(void){
fscanf(text, "%[^\n]", input_line); // do entera
fgetc(text); // i enter
ch_add= 0;
if(feof(text)) {
input_line[0]= CR, '\0';
return(input_line);
}
line_add++;
return(input_line);
}
SY
unknown.389ljubao,
-> #388, mjova Mogao sam i ja da izvodim takve egzibicije, ali nije to to. Osim
toga, pored stringova tu će se naći i neki brojevi, tako da ovo nema šanse.
Najverovatnije ću na kraju da stavim da mi se blankovi i ostalo smeštaju
u neki dummy string.
I dalje me zanima, zašto TC kada naiđe u format stringu na space, ne
preskače tabove i ostala čuda ?
Ljuba
unknown.390nandi,
-> #387, ljubao> Sada, zašto ovo ne radi (bag ili šta je već razlog), jer na Atariju
> ovako čitanje je u redu, a i koliko ja znam, onaj blanko na kraju format
> stringa treba da preskoči sve blankove, tabove i ostala čuda.
tc na atariju nije kompatibilan sa ovim tc na pc. napr: neki
životićevi trivijalni primeri iz računara (baš nešto u vezi
učitavanja stringova) na atariju nisu radili korektno.
> I na kraju, da li mogu (ako da, kako) da kažem linkeru koje
> biblioteke da mi linkuje ili to C radi sam, tj. ako postoji funkcija
> iz neke LIB u programu automatski je linkuje.
otvoriš projekt, i samo navedeš biblioteku koju koristiš. ovo je
potrebno samo ako koristiš neke lib-ove sa strane (mislim da se kod
atarija trebala navoditi svaka biblioteka, ovde samo one koje ne idu
uz paket tc).
nandi
unknown.392ppekovic,
-> #389, ljubao>> I dalje me zanima, zasto TC kada nai|e u format stringu na space, ne
>> preskace tabove i ostala cuda ?
? Pa zar nije tako logicno. Space je space a tab je tab. Ako bi
sve radilo po tvojoj ideji, onda bi nastao problem prvi put kada bi ti
bilo vazno sta je space a sta je tab.
A kad smo vec kod formata u scanf-u, mene je bas ovih dana namucio
sledeci problem. Trebao mi je jedan programcic koji bi analizirao fajl
sa pristiglim mail-ovima (na XENIX-u). Poruka se sastoji iz header-a i
tela poruke s tim, da bi se razlikovalo sta je sta, ova dva dela su
odvojena praznim redom, iliti jednim newline-om.
Tj. ne{to ovako:
Heder_red1\n
heder_red2\n
\n
telo_red1\n
telo_red2\n
Ako sa sledecim programom krenem da citam fajl:
while(!feof(mail))
{
fscanf(mail,"%[^\n]",str_red);
printf("%d %s\n",++line,str_red);
}
program ce pronaci 4 linije, tj. zanemarice onaj prazan red.
Ako u formatu dodam \n na kraju reda, ostaje sve isto.
Ostalo mi je jedino, da posle scanf, uradim:
ch1=fgetc(mail);
ch2=fgetc(mail);
ungetc(ch,mail);
ungetc(ch,mail);
pa da ispitujem da li je ch2=='\n'
Jel ima neko neko pametnije resenje?
Paya
unknown.393ljubao,
-> #390, nandi** otvoriš projekt, i samo navedeš biblioteku koju koristiš. ovo je
** potrebno samo ako koristiš neke lib-ove sa strane (mislim da se kod
** atarija trebala navoditi svaka biblioteka, ovde samo one koje ne idu
** uz paket tc).
Na Atariju sam mogao ručno da biram koje će sistemske biblioteke da
se linkuju.
A što se tiče PC-ja, znači on sam linkuje potrebne sys biblioteke.
Ljuba
unknown.394ljubao,
-> #392, ppekovic** ? Pa zar nije tako logicno. Space je space a tab je tab. Ako bi
** sve radilo po tvojoj ideji, onda bi nastao problem prvi put kada bi ti
** bilo vazno sta je space a sta je tab.
Ma može da bude kako hoćeš, samo da on preskače npr. sve blankove
kada mu stavim blanko u format string.
** Ostalo mi je jedino, da posle scanf, uradim:
**
** ch1=fgetc(mail);
** ch2=fgetc(mail);
Zbog toga sam ja i kukao između ostalog. Neće nikako da pročita new
line, već moram to da uradim 'ručno' (kao ti).
Ljuba
unknown.395ljubao,
Kakav je ono fajl u info direktorijumu ? Običan help ili nešto drugo
i da li vredi da ga DL ?
Ljuba
unknown.396mjova,
-> #389, ljubao> Mogao sam i ja da izvodim takve egzibicije, ali nije to
> to. Osim toga, pored stringova tu će se naći i neki
> brojevi, tako da ovo nema šanse.
u prinpicu ;) standardne funkcije mi služe samo za proveru algoritma.
ono što sam ti dao je deo rutina koje uključujem ako je potrebno da
pročitam bilo kakav tekst. volim da program javi tačno mesto greške, a
to je moguće samo (meni je bar lakše) posebnim rutinama.
veoma retko se smisao prenosi u sledeći redi ili još gore da se smisao
protumači posle drugog reda, a da se onda mora čitati prvi radi
skupljanja potrebnih podataka.
ono što htedoh reći, treba imati neke fn() koje će čitati tekući znak,
sledeći, sledeću reč, broj, niz do znaka itd. nema toga puno, a
kasnije olakšava posao.
SY
unknown.397bulaja,
-> #395, ljubao│Kakav je ono fajl u info direktorijumu ? Obican help ili nesto drugo
│i da li vredi da ga DL ?
└───
Koji file? BCHelp? Vredi.
unknown.398ppekovic,
-> #394, ljubao>> Ma moze da bude kako hoces, samo da on preskace npr. sve blankove
>> kada mu stavim blanko u format string.
Pa to i radi ;) Npr. ako stavis sscanf(str1," %s",str2); a
str1=" bla_bla", str2 ce biti = "bla_bla". Dakle, ovo radi,
medjutim, ti si prvo pitao zasto kad se stavi blanko ne preskace i
tab-ove. Ovo je vec logicno sto ne radi.
>> Zbog toga sam ja i kukao izmedju ostalog. Nece nikako da procita
new
>> line, vec moram to da uradim 'rucno' (kao ti).
file: R E D _ 1 \n
R E D _ 2 \n
\n
R E D _ 3 \n
Ako das:
fscanf(file,"%[^\n]",str1); u str1 ce biti "RED_1" a filepointer
ce pokazivati na newline na kraju prvog reda. Biser je sto ako zadam
opet isti fscanf, on procita i drugi red, iako mu u formatu nigde
nisam dao da cita onaj new_line.
Ako pa zadas fscanf(file,"%[^\n]\n",str1); u str1 ce opet biti
"RED_1", ali }e fp pokazivati na pocetak red_2. Ako opet ponovis istu
komandu, str1="RED_2", a fp->RED_3.
Znaci fscanf cita! new_line, al ga ne pamti nigde ;((((
dgrbic i mjova su mi rekli da postoje izvesne razlike izmedju MSC-
a i TC-a. Ovo sto sam ja naveo vazi za C na Xenix-u.
Paya
unknown.399nesavic,
Ako li ko ima neki lepi modul sa prozorima na Cu, neka mi posalje...
Unapred zahvalan, NeŠa!
unknown.400janko,
-> #388, mjova> //-------------------------------------------- get_nl
> // uzima ceo red i enter
:(
Ja nikad ne bih koristio takvu rutinu, kakvu si ti predložio, u
svom programu, iz prostog razloga što ova, i ekvivalentne koje
koriste standardne rutine C-a 'nemaju meru.' Znači da će ti
program SIGURNO poludeti ako mu poturiš dovoljno dugu liniju :)
A već sam pisao da je i upotrebna vrednost gets f-je, u kojoj se
navodi dužina linije, takođe diskutabilna, jer ta f-ja nekada
pročita NL a nekad ne, kako joj se svidi, pa dolazi do
nepredvidivog ponašanja kada su linije u tekstu duže nego parče
što mi želimo da učitamo.
Rešenje: lepo uzmeš pa napišeš gets_j, koja u petlji koristi smo
getc naredbu, a ostalo radi sama. I ne može da se zbuni. I čita
(i prepoznaje) i one linije koje su prazne. Itd. itd.
Stvarno nije neka velika mudrost, to bi svaki C programer trebalo
da može da uradi kao vežbicu, pre doručka. :)
(A i uklapa u 6 linija koda, koje su dnevna produktivnost onih
Microsoftovih programera, i u moju tvrdnju da je moja
produktivnost jedna procedura/fja dnevno ;>
------Ovde iseci-----
int fgets_j( char* s, int n, FILE* f ) ??<
register char* p=s; register int c;
if (feof(f)) ??< *p=0; return EOF; ??>
for (c=fgetc(f); c!=EOF && c!='??/n'; c=fgetc(f)) if (p-s<n) *p++=c;
*p=0; return p-s;
??>
------Ovde iseci------
Ko kaže da ne može i C i juski zajedno? :) Ne znam za MSC, ali
za BC pre prevođenja ovu rutinu propustite kroz TRIGRAPH program.
BACITE pogled i na prilično lep rezultat prevođenja ove rutine
pomoću BC 2.0, u small modelu, koji je ipak gori od ljudskog.
Uspeo je da samo jednom ima sekvencu poziva fgetc, i da van
petlje stavi dodelu fajl pointera, ali.. Promenljiva c je mogla
da se smesti u, naprimer, BX registar, bez problema, a nije umeo
(iako je prevođen sa tom opcijom) da optimizuje korišćenje
registara ni kada proverava EOF i NL, što je dosta čudno. Takođe,
bilo bi bolje da se tako elemetarna funkcija kao fgetc realizuje
inline, dakle, da nema overheda CALL sekvence, što bi bilo
moguće, jer fgetc može biti kratka, sama po sebi.
Zaključak: moglo bi još malo da se optimizuje, ali i ovako je,
ipak, lepo. Neko je rekao da današnji C kompajleri daju bolji kod
od 90% asemblerskih programera. Za BC, ipak, to još ne važi. Ako
nekog ne mrzi, nek pusti ovu rutinu i kroz MSC 6.0, sa uključenim
svim optimizacijama i small modelom pa da uporedimo koji je
bolji. Isto važi i za korisnike BC 3.0, iako vrlo verovatno da
nema razlike.
(Priložen samo relevantan deo)
; register char* p=s; register int c;
mov si,word ptr Šbp+4Ć ;jedan red, kao i Bog sto bi uradio :)
; if (feof( fp )) š *p=0; return EOF; ć
test word ptr Šdi+2Ć,32 ; if feof(f) ..
je short č1č74
mov byte ptr ŠsiĆ,0 ; *p=0
mov ax,65535 ; EOF
jmp short č1č242
č1č74:
jmp short č1č146
č1č98:
; for (c=fgetc(fp); c!=EOF && c!='Đn'; c=fgetc(fp)) if (p-s<n) *p++=c;
mov ax,si ; if (p-s<n)
sub ax,word ptr Šbp+4Ć ; p-s
cmp ax,word ptr Šbp+6Ć ; <n ?
jge short č1č146
mov al,byte ptr Šbp-2Ć ; al = c
mov byte ptr ŠsiĆ,al ; *p = al
inc si ; p++
č1č146:
push di ; c=fgetc(f)
call near ptr _fgetc ; primetite da je poziva samo na jednom
inc sp ; mestu!
inc sp ;
mov word ptr Šbp-2Ć,ax ; if ( c!=EOF && c!=NL )
cmp word ptr Šbp-2Ć,65535 ; da je ovde AX, bio bi genije!
je short č1č218 ; a ovako...
cmp word ptr Šbp-2Ć,10 ; isto i ovde...
jne short č1č98
č1č218:
; *p=0; return p-s;
mov byte ptr ŠsiĆ,0 ; *p=0
mov ax,si ; p
sub ax,word ptr Šbp+4Ć ; -s
č1č242:
; ć
unknown.401mjova,
-> #400, jankoprvo ću da skratim tvoju fn u jedan red, a onda malo da se raspišem:
- tvoja fn je samo osakaćena fscan:
fscanf(f, "%n[^\n]", s);
┌───────┘
└── ovo je broj, treba staviti cifre (dužina
buffer-a).
> Ja nikad ne bih koristio takvu rutinu, kakvu si ti
pa naravno, od tebe me to i ne čudi ;). kako si počeo poruku mislio
sam da ću videti nešto novo... kad ono jok.
već u prvoj liniji primetio sam nešto što mi je ukazalo na to šta mogu
da očekujem posle ;). znak '*' se obično piše uz onu promenljivu koju
treba da definiše. ako napišeš:
char* s, p, t;
onda možeš da previdiš činjenicu da 'p' i 't' nisu pointeri, a po
pisanju tako deluje. unarni operatori se uvek pišu uz promenljivu,
samo radi čitljivijeg koda. ti, naravno, piši kako voliš, ovo ti dajem
mali savet.
a sad što se tiče tvoje fn(). ono što mi se ne dopada to je brdo
parametara koji su, po meni, mnogobrojni. one fn koje sam izložio ovde
dovoljno su skraćene (jer nema potrebe da ih pišem u celosti samo da
bih pokazao algoritam). pa mi je promakla jedna brojka:
fscanf(text, "%80[^\n]", input_line); // do entera
onaj broj (80) je u stvari broj kojim sam definisao maksimalnu dužinu
bafera. a kasnije ima još nekoliko redova koji sređuju promenljive
(line_add), uzimanje '\n', itd.. pri sledećem pozivu ove fn, učitava
se nastavak reda. ako učita menje od 80 znakova (vraća broj pročitanih
znakova) onda uzimam '\n', uvećavam line_add itd.
glupo mi je da pozivam fn sa mnogo parametara. to mi se ni malo ne
dopada. kad vidim sarmu u deklaraciji odma mi se smuči. zato i
koristim c++ jer ima default vrednosti parametara, overload fn i još
dosta toga.
SY
unknown.402wizard,
-> #400, janko>> Rešenje: lepo uzmeš pa napišeš gets_j (...)
gets_j(anko)? :)
<<Nenad<<
unknown.403ljubao,
-> #398, ppekovic** Pa to i radi ;) Npr. ako stavis sscanf(str1," %s",str2); a
** str1=" bla_bla", str2 ce biti = "bla_bla". Dakle, ovo radi,
** medjutim, ti si prvo pitao zasto kad se stavi blanko ne preskace i
** tab-ove. Ovo je vec logicno sto ne radi.
Radi na početku teksta i kod mene. Verovatno sam posle stringa imao
i tabove pa nije radilo. U svakom slučaju, probaću večeras.
A što se tiče LF-a, nikako nisam mogao da ga pročitam, mada nisam
čitao sa "%[^\n]" (probaću još jednom ako budem imao vremena da se zezam).
Ljuba
unknown.404janko,
-> #402, wizard>>> Rešenje: lepo uzmeš pa napišeš gets_j (...)
>
> gets_j(anko)? :)
Naravno. Kako bih razlikovao moju f-ju od bibliotečke?
Slobodno je nazovi gets_n, ili bilo kako drugačije. :)
unknown.405amilanov,
Jedna interesantna stvar mi se "slučajno" iz zaboravnosti dogodila.
Sledeći "program" se bez problema kompajlira u svim Borlandovim C++
kompajlerima od 1.0 preko 2.0 do 3.0 :
#include <dos.h>
int main (void)
š
clrscr();
printf ("Hello, world /n");
getch();
return 0;
ć
Omaškom sam zaboravio da includujem conio.h, gde se nalazi deklaracija
za clrscr(), ali sve je prošlo bez worningsa, a kamoli bilo kakvih errora.
Primer je dat bez veze, ali gde god da zovnem clrscr() f-ciju, iz bilo kog
programa, ovo ovako BEZ conio.h radi odlično. Gde mi je deklaracija za
clrscr() ? Zar je moguće da negde postoji pointer na ovu funkciju, i
bez deklaracije, što bi bilo krajnje začuđujuće, da ne kažem bezobrazno :)) !
Dali je clrscr() tolko specijalna f-cija, da joj ne treba deklaracija ?
Dosad se nisam susreo sa nekim "vanzemaljskim" opisom ove funkcije, sem
normalnog i klasičnog, šta radi, gde joj je deklaracija i sl. Dali postoji
nešto što ja neznam, ili nisam saznao ? Razmišljanja ???
pozdrav milanov
P.S. Izgleda šašavo, ali meni je EXE cod kraći ( a i radi ) ! :)))))) !
unknown.406dusanp,
-> #405, amilanov=> deklaracija ? Dosad se nisam susreo sa nekim
=> "vanzemaljskim" opisom ove funkcije, sem normalnog i
=> klasičnog, šta radi, gde joj je deklaracija i sl. Dali
=> postoji nešto što ja neznam, ili nisam saznao ?
=> Razmišljanja ???
To se i meni dešava, i to sa puno f-ja (radi se o BC++ 2.0)
To mi se toliko dopalo da sad programe pišem otprilike ovako:
Napišem program bez include direktiva, pa ga iskompajliram.
Ako ne prijavi greške, ok, a ako prijavi onda uradim još
prljaviju stvar. Naime, u helpu postoji i kompletna deklaracija
f-je, koju ja dopisem na početak programa. To radi 100%, a
vreme kompajliranja je dosta smanjeno, jer se ne usporava nepo-
trebnim funkcijama.
unknown.407mjova,
-> #405, amilanov> Omaškom sam zaboravio da includujem conio.h, gde se nalazi
> deklaracija za clrscr(), ali sve je prošlo bez worningsa,
> a kamoli bilo kakvih errora.
probao sam i ne radi tj. ne kompajlira do kraja. kuka da nisu
deklarisane neke fn. mislim da bi ipak trebalo da vodiš računa o tome
da uključiš sve potrebne *.h jer može doći do čudnih (sasvim logičnih)
bagova. dovoljno je bar da upišeš kako izgleda sintaksa. ako ne upišeš
to, onda se parametri mogu pogrešno tumačiti...
SY
unknown.408amilanov,
-> #406, dusanp>> To se i meni dešava, i to sa puno f-ja (radi se o BC++
>> 2.0) To mi se toliko dopalo da sad programe pišem
>> otprilike ovako: Napišem program bez include direktiva,
>> pa ga iskompajliram. Ako ne prijavi greške, ok, a ako
Pa dobro bre ljudi, jer nas to Borland vuče za nos, ili ... :)))
Sad umesto OOP, Borland lansira FOP ( Function Oriented Programing :)) ),
uz koncepciju IIWIW ( If It Works It Works ) dodajući TBC ( Try Before
Compile ) opciju :))) ! Interesantno, veoma interesantno. Šta kažu
iskustva drugih o ovom "fenomenu" ?? Jasno je da je portabilnost ovakvog
sourcea == 0 , ali ako radi sa puno funkcija, ćemu hederi i deklaracije
pa i pointeri na te funkcije koji troše memoriju "bespotrebno".
Ako je budućnost C jezika C+++ na bazi FWD ( Functions Without Declarations )
ja sam ZA :)))) ! Lakše je za pisanje, a i kod je kraći :))) ! Kako stoje
stvari kod MS C ? Is this a bug or feature ??
pozdrav amilanov
P.S. Sve korišćene skraćenice su Copyright amilanov :))))) !
unknown.409amilanov,
-> #407, mjova>> probao sam i ne radi tj. ne kompajlira do kraja. kuka da
>> nisu deklarisane neke fn. mislim da bi ipak trebalo da
>> vodiš računa o tome da uključiš sve potrebne *.h jer može
>> doći do čudnih (sasvim logičnih) bagova. dovoljno je bar
>> da upišeš kako izgleda sintaksa. ako ne upišeš to, onda
>> se parametri mogu pogrešno tumačiti...
Ha, otkrio sam u ćemu je stvar, mada eto čovek se može i ovako opeći.
U meniju OPTIONS/COMPILER/C++ OPTIONS, TREBA podesiti switcher kod opcije
Use C++ Compiler na C++ Always. Do rešenja sam došo uz pomoć nandija, koji
mi je ovo reko u private mailu, ali sam ja nešto zabrljao oko switchera, pa
prvi put nije išlo. Znači stavite opciju USE C++ COMPILER na CPP EXTENSION
pa uživajte u compilovanju "BEZ" hedera :)))) ! Usput, ova opcija je
kod mene DEFAULT pri instalaciji. Baš stoga ostaje "gorak ukus" da C++
"propušta" stvari koje ne sme da radi, a na kraju sve to i radi :).
Mogli su ( po meni ) da DEFAULT stave na C++ Always. Ustvari, kad bolje
razmislim, oni to sve lepo opisuju u manualu !!!!
Ah, da manual ... :))))))))))))))))))))) !
P.S. Jedno iskustvo više, nije na odmet. Naučili smo gde "curi", pa sad
možemo i da "zatvorimo slavine" :))).
P.P.S. U pravu si da može doći do čudnih, i sasvim logičkih bagova. To sam
i bio tražio, prosto vapio da dobijem, ali ništa od toga. I posle kažu da
su DEFAULT opcije (gotovo) idealno izabrane. SVAŠTA ! :))) !
pozdrav amilanov
unknown.410janko,
-> #405, amilanov
> programa, ovo ovako BEZ conio.h radi odlično. Gde mi je
> deklaracija za clrscr() ? Zar je moguće da negde postoji
> pointer na ovu funkciju, i bez deklaracije, što bi bilo
> krajnje začuđujuće, da ne kažem bezobrazno :)) ! Dali je
> clrscr() tolko specijalna f-cija, da joj ne treba
> deklaracija ? Dosad se nisam susreo sa nekim
> "vanzemaljskim" opisom ove funkcije, sem normalnog i
> klasičnog, šta radi, gde joj je deklaracija i sl. Dali
> postoji nešto što ja neznam, ili nisam saznao ?
> Razmišljanja ???
Nema tu razmišljanja, 'nagazio' si na našto što bi moglo da se
nazove 'opšta kultura C-a.' Ništa specijalno a kamoli
vanzemaljski.
Stari, K&R C je zamišljen kao jedan jako mali programski jezik,
u kome se mnogo toga podrazumevalo. Konkeretno, nije bilo
potrebno da funkcija deklariše, ako je vraćala int i ako su,
koliko se sećam, parametri u pozivu svi int, ma koliko ih
bilo.
Problem je bio taj što tako kompajler nije mogao da proverava
da li smo napisali ono što smo želeli, ili smo mislili jedno a
napisali drugo, u pozivima f-ja. Na svu sreću, postojao je
poseban program, koji je dosta toga umeo da otkrije.
Da ne dužim, to što ti to uspeva je rudiment, jer ANSI je
predvideo da prevodioci po ANSI standardu prevode programe
starog stila. Da si pisao C++ program, (ekstenzija .cpp)
prevodilac bi ti javio GREŠKU bez pardona, jer C++ prevodilac
nije dužan da 'miluje' stare programe.
Inače u .H datotekama se nekakvi pointeri na f-je NE deklarišu.
Ako imaš nameru da ozbiljno pišeš (znači više od par stotina
linija) na C-u, trebalo bi da dobro shvatiš i koncept .H
datoteka.
U onom programu ti fali i #include <stdio.h> (za printf) a
#include <dos.h> ti je suvišno (druge dve f-je su iz conio.h).
Bottom line: možeš tako da radiš, (što si i sam otkrio) ali to
je, po današnjim merilima, 'hakerisanje.'
Da bi ti sve bilo jasnije, preporučujem ti da proučavaš knjige
'The C Programming Language,' Brian W. Kernighan, Dennis M.
Ritchie, first edition, a zatim i knjigu istog naslova, ali
second edition. U 1st ed. je upravo 'definisan' (tj. predložen)
ono što je posle nazvan "K&R C," a u 2nd ed. samo uključen
ANSI C, koji je nastao mimo autora. Upravo u razlikama se kriju
objašnjenja. Inače, bez poznavanja njih, ili nekih adekvatnih
knjiga tog nivoa, teško da možeš da kažeš da znaš C.
unknown.411amilanov,
-> #410, janko>> Nema tu razmišljanja, 'nagazio' si na našto što bi moglo
>> da se nazove 'opšta kultura C-a.' Ništa specijalno a
>> kamoli vanzemaljski.
Ma, to o vanzemaljskim, sam namerno stavio u navodnike, više da
"popalim strasti" (kako bi inače drugi probali isti primer ;)) ),
nego da bilo šta prejudiciram. Šta je bilo posredi pojasnio sam u
prethodnoj poruci, koju si pročitao ( valjda :) ). O 'opštoj
kulturi C-a', ;)), ne bi sada, ovde. Pre bi se reklo da je u pitanju
večna boljka, (ne)imanje manuala, u kome je sve lepo opisano, po pitanju
switchera, zar ne.
>> Stari, K&R C je zamišljen kao jedan jako mali programski
>> jezik, u kome se mnogo toga podrazumevalo. Konkeretno,
>> nije bilo potrebno da funkcija deklariše, ako je vraćala
>> int i ako su, koliko se sećam, parametri u pozivu svi
>> int, ma koliko ih bilo.
>> Problem je bio taj što tako kompajler nije mogao da
>> proverava da li smo napisali ono što smo želeli, ili smo
>> mislili jedno a napisali drugo, u pozivima f-ja. Na svu
>> sreću, postojao je poseban program, koji je dosta toga
>> umeo da otkrije.
Hvala, na digresiji ! Ovo nisam znao. Mlada sam ti ja "klasa" :)) !
>> Da ne dužim, to što ti to uspeva je rudiment, jer ANSI je
>> predvideo da prevodioci po ANSI standardu prevode
>> programe starog stila. Da si pisao C++ program,
>> (ekstenzija .cpp) prevodilac bi ti javio GREŠKU bez
>> pardona, jer C++ prevodilac nije dužan da 'miluje' stare
>> programe.
Pa to sam baš i u prethodnoj poruci kritikovao. Borland prodaje C++
kompajler, pa je logično da DEFAULT postavi C++ kompajliranje, tojest
Use C++ Always. Kako ne volim previše ( bez uputstava ) da čačkam
po switcherima, ja skoro uvek ( iz iskustva ) ostavim osim par stvari
koje sigurno znam šta rade, DEFAULT. To je cela priča. Ah da program je
bio .c, u pravu si ono za .cpp. Al možda je ovako i bolje, čovek uči
( bez manuala :)) ) dok je živ.
>> Inače u .H datotekama se nekakvi pointeri na f-je NE
>> deklarišu. Ako imaš nameru da ozbiljno pišeš (znači više
>> od par stotina linija) na C-u, trebalo bi da dobro
>> shvatiš i koncept .H datoteka.
U pravu si. Ništa bez dobrog poznavanja .h datoteka. Kad njih skratim,
tojest izbacim deklaracije funkcija koje ne koristim u zadatom programu
kod izađe kraći. Upravo radim na programu koji bi trebao da pravi
leksičku analizu .h datoteka, i da (ako uspem :)) ) pre kompilacije,
"izbaci" nepotrebne prototipe, ostavljajući samo onaj deo .h koji zaista
koristim u programu, pa to i includuje. Možda to i prodam Borlandu :))))) !
Naravno tad nema precompile headere, ali ... Nobody is perfect Automen :)) !
E, da. Nismo se razumeli. U "panici" sam pitao gde mi je pointer na
funkciju ( ne u .h nego naravno u memoriji, a gde bi ;)) ).
>> U onom programu ti fali i #include <stdio.h> (za printf)
>># a include <dos.h> ti je suvišno (druge dve f-je su iz
>> conio.h).
Tačno ! Primer sam Cut & Paste direktno iz jednog malo većeg (mojeg ;) )
programa, u editor, pa dodao klasiku od HELLO WORLD, tek da se nadje :)) !
Pri tom sam zaboravio da dodam prave hedere. Al i bez njih je TO išlo ko
što treba.
>> Bottom line: možeš tako da radiš, (što si i sam otkrio)
>> ali to je, po današnjim merilima, 'hakerisanje.'
Fakat ! A i ne isplati se tako, nije p(rofi)ortabilno :))) !
>> Da bi ti sve bilo jasnije, preporučujem ti da proučavaš
>> knjige 'The C Programming Language,' Brian W. Kernighan,
>> Dennis M. Ritchie, first edition, a zatim i knjigu istog
>> naslova, ali second edition. U 1st ed. je upravo
>> 'definisan' (tj. predložen) ono što je posle nazvan "K&R
>> C," a u 2nd ed. samo uključen ANSI C, koji je nastao
>> mimo autora. Upravo u razlikama se kriju objašnjenja.
>> Inače, bez poznavanja njih, ili nekih adekvatnih knjiga
>> tog nivoa, teško da možeš da kažeš da znaš C.
Ovom tvom savetu za početnike u C programiranju, dodao bih i izvrsnu
knjigu "C++ Programing Language" gurua, i oca C++ jezika, Bjarnea
Stroustrupa. Izvrsna je ( a i programi su .cpp, pa nema za**bancije
sa .h datotekama :))) ).
NARAVOUžENIJE ( po 1000.. put ) : When everything fails, read the manual !
Korolar AMILANOVA: If you have manual ! :)))) !
Pozdrav amilanov !
unknown.412dusanp,
-> #411, amilanov=> Pa to sam baš i u prethodnoj poruci kritikovao. Borland
=> prodaje C++ kompajler, pa je logično da DEFAULT postavi
=> C++ kompajliranje, tojest Use C++ Always. Kako ne volim
=> previše ( bez uputstava ) da čačkam po switcherima, ja
=> skoro uvek ( iz iskustva ) ostavim osim par stvari koje
=> sigurno znam šta rade, DEFAULT. To je cela priča. Ah da
=> program je bio .c, u pravu si ono za .cpp. Al možda je
=> ovako i bolje, čovek uči
Ne slažem se da je C++ Always logično. Recimo da pišeš
par projekata, jedan u C-u a drugi u C++. Ako ne bi bilo
"C++ extensions only" onda bi morao da svaki čas /dobro,
kad se umoriš od jednog programa i radiš drugi/ ulaziš u
options itd,itd. Ovako, samo jedan program bude .c a drugi
.cpp i Borland sam dalje brine o prevođenju. Takođe, neke
stvari je lakše uraditi u standardnom C-u negu u C++, bar
dok OOP ne uđe pod kožu.
Nemo' neko Borland da mi dira...
unknown.413pmsimic,
Napisao sam program za zastitu od kopiranja u TC++ 2.0 . Molio bih da mi neko
objasni kako napraviti od toga odgovarajucu funkciju za CLIPPER koja se moze
pozvati sa CALL iz CLIPPER-a. Molim primer. Molim i primer za linkovanje
za PLINK86 ili kako vec treba.
Unapred zahvalan PMSIMIC iz Pristine
unknown.414bambi,
Da li neko zna kako da uklonim bedni cursor u Turbo C-u?
unknown.415dusanp,
-> #414, bambi=> Da li neko zna kako da uklonim bedni cursor u Turbo C-u?
Sa _setcursortype (_NOCURSOR) uklanjas kursor.
Sa _setcursortype (_NORMALCURSOR) vracas kursor na normalu.
Sa _setcursortype (_SOLIDCURSOR) kursor prelazi u pun kvadrat.
unknown.416janko,
-> #414, bambi> Da li neko zna kako da uklonim bedni cursor u Turbo C-u?
Evo rešenja nezavisnog od jezika:
Pozivom BIOS interapta 10
sa ah=1
ch=20h
cl=0
Ne sećam se da li je TC 2.0 imao _setcursortype f-ju. Potraži u
helpu, pa ako nema, uradi ovo gore. BC 2.0 ima.