@c Copyright (C) 1996-2004 Free Software Foundation, Inc.
@c For copying conditions, see the file gpc.texi
@c This file is part of the GPC Manual.
@c
@c Authors: Peter Gerwinski <peter@gerwinski.de>
@c          Frank Heckenbach <frank@pascal.gnu.de>
@c
@c Last modification: 2004-01-01 (file up to date)
@c Translator: Mirsad Todorovac <mtodorov_69@yahoo.com>

@include macros.texi

@c FIXME Still thinking about more suitable translation for 'Highlights',
@c   maybe should try more free one ... -- MT 20011201

@node Naglasci
@chapter Neke od najinteresantnijih značajki GPC-a
@cindex highlights

GNU Pascal prevodilac (GPC) je, kao što ime govori, Pascal prevodilac (engl.
compiler) iz GNU obitelji (@uref{http://www.gnu.org/software/gcc/}). Ovo znači:

@itemize @bullet

@item GPC je 32/64-bitni prevodilac,

@item nema ograničenja kao što je 64 kB ili 640 kB limit poznat iz nekih
operacijskih sustava -- čak i na tim sustavima --,

@item radi na svim operacijskim sustavima podržanim od GNU C prevodioca,
uključujući

@itemize @minus
@item @uref{http://www.linux.org,Linux} na Intelu, Alphi, S390, i na svim
ostalim podržanim tipovima hardvera,
@item BSD obitelj: @uref{http://www.freebsd.org,FreeBSD},
@uref{http://www.netbsd.org,NetBSD},
@uref{http://www.openbsd.org,OpenBSD},
@item DOS sa 32 bita, koristeći
@uref{http://www.delorie.com/djgpp/,DJGPP} ili EMX,
@item MS-Windows 9x/NT, koristeći
@uref{http://cygwin.com,Cygwin} ili
@uref{http://www.mingw.org,mingw} ili
@uref{http://www.mingw.org/msys.shtml,MSYS},
@item OS/2 sa EMX,
@item Mac OS X,
@item MIPS-SGI-IRIX,
@item Alpha-DEC-OSF,
@item Sparc-Sun-Solaris,
@item HP/UX,
@end itemize

@noindent i druge (zabilješka: runtime sistem podržava samo ASCII bazirane
sisteme; to uključuje gotovo sve današnje sustave, međutim nekoliko IBM
strojeva još uvijek koristi EBCDIC; na tima, prevodilac bi se mogao izvršavati,
ali bi runtime podrška trebala velike izmjene),

@c FIXME -- TM
@c nEEd to find more suitable translation for 'native' and 'cross' compiler
@item može služiti kao nativni prevodilac ili prevodilac između sistema
(engl. cross-compiler) - između svih podržanih sistema,

@item proizvodi visoko optimirani kod za sve te sisteme,

@item slobodan je softver
@uref{http://www.gnu.org/philosophy/free-sw.html,Free Software}
(@uref{http://www.opensource.org,Open-Source Software})
u skladu sa
@uref{http://www.gnu.org/copyleft/gpl.html,@strong{GNU General Public License}}
licencom),

@item kompatibilan je sa ostalim GNU jezicima i alatima kao što su GNU C i
GNU debugger (ili, ako više volite, program za simboličko ispravljanje
pogrešaka u ispravljanom programu).

@end itemize

@anch{lang}@c
Prevodilac podržava slijedeće jezične standarde i kvazi-standarde:

@itemize @bullet
@item ISO 7185 Pascal (@pxref{Resursi}),
@item većinu dijelova ISO 10206 Extended Pascala,
@item Borland Pascal 7.0,
@item dijelove Borland Delphi, Mac Pascala i Pascal-SC (PXSC).
@end itemize

@anch{pro}@c
Neki naglasci:

@c DEMO-START

@itemize @bullet

@item Iz Standard Pascala: Mnogi popularni Pascal prevodioci tvrde da
proširuju Standard Pascal, ali im nedostaju ove važne značajke.

@itemize @minus
@item
@anch{conformantdemo}@c
Polja kao konformni parametri -- standardni i komforan način prosljeđivanja
polja (ARRAY) varijabilne veličine procedurama i funkcijama.
@hrefexample{conformantdemo.pas}
@item
@anch{iteratordemo.pas}@c
Prosljeđivanje lokalnih procedura kao proceduralnih parametara -- s punim
pristupom svim varijablama ``nadređene'' procedure.
@hrefexample{iteratordemo.pas}
@item
@anch{filebuf1demo}@c
@anch{filebuf2demo}@c
@c FIXME Here I'm not resolute about meaning of the original -> I nEEd to
@c   look at the examples, or ask Frank: -- MT 20011201 Done 20020103
Automatski datotečni međuspremnici (engl. file buffers) i standardne @samp{Get}
i @samp{Put} procedure. Predviđajuće čitanje (engl. read-ahead) bez privremenih
varijabli. @hrefexample{filebuf1demo.pas} Ovo dozvoljava, na primjer, da se
provjeri ulaz iz tekst datoteka prije čitanja bez konverzije kroz znakovne
nizove (engl. strings). @hrefexample{filebuf2demo.pas}
@item
@anch{packdemo}@c
Istinski pakirani zapisi (RECORD) i polja. Pakira 8 Booleovih varijabli u
jedan bajt.
@hrefexample{packdemo.pas}
@item
@anch{intfiledemo}@c
Interne datoteke. Ne morate se brinuti o kreiranju privremenih imena
datoteka i njihovom brisanju kasnije.
@hrefexample{intfiledemo.pas}
@item
Globalni @samp{goto}. (Da, @samp{goto} ima svoju ulogu kada nije ograničen
na trenutni potprogram.) @hrefexample{parserdemo.pas}
@item
@anch{variantedmo}@c
Automatski postavlja diskriminantu varijabilnog zapisa (RECORD) u @samp{New}.
@hrefexample{variantdemo.pas}
@item
@anch{bigsetsdemo}@c
Skupovi (SET) proizvoljne veličine. @hrefexample{bigsetsdemo.pas}
@end itemize

@item Iz Extended Pascala:

@itemize @minus
@item
@anch{stringschemademo}@c
Znakovni nizovi (strings) proizvoljne duljine.
@hrefexample{stringschemademo.pas}
@item
@anch{rwstringdemo}@c
@samp{ReadStr} i @samp{WriteStr}. Čitajte iz i pišite u znakovne nizove sa
punim komforom @samp{ReadLn}/@samp{WriteLn}.
@hrefexample{rwstringdemo.pas}
@item
@anch{datetimedemo}@c
Rutine za predstavljanje datuma i vremena neovisne od sistema (prenosive).
@hrefexample{datetimedemo.pas}
@item
Iteracija pomoću članova skupa:
@samp{@w{for Ch in ['A' .. 'Z', 'a' .. 'z'] do @dots{}}}
@hrefexample{bigsetsdemo.pas}
@item Proširene operacije nad skupovima (simetrična diferencija, @samp{Card})
@item Generalizirane @samp{Succ} i @samp{Pred} funkcije
(@code{@w{foo := Succ (bar, 5);}}).
@item
@anch{mandelbrot}@c
@anch{parserdemo}@c
Kompleksni brojevi. @hrefexample{mandelbrot.pas}
@hrefexample{parserdemo.pas}
@item Operatori za potenciranje (@samp{pow} i @samp{**}) za realne i
kompleksne brojeve.
@item
@anch{initvardemo}@c
Inicijalizirane varijable. @hrefexample{initvardemo.pas}
@item Funkcije mogu vraćati vrijednost tipa zapis ili polje (Record, Array).
@item
@anch{resultvardemo}@c FIXME
@c                     nEEd 2 look at exmpl to clean xlation
@c                     -- TM 20011201 Done 20020103
Varijable za imenovanu povratnu vrijednost u funkcijama.
@hrefexample{resultvardemo.pas}
@item Moduli.
@item Ne-dekadski brojevi u bazama od 2 do 36: @samp{baza#broj}.
@item @samp{MinReal}, @samp{MaxReal}, @samp{EpsReal}, @samp{MaxChar}
konstante.
@item
@anch{schemademo}@c
Schemata -- Pascalov način da se dobiju dinamička polja bez nestašnih
trikova @hrefexample{schemademo.pas}
@item
@anch{dynamicarraydemo}@c
Lokalne varijable mogu imati dinamičku veličinu.
@hrefexample{dynamicarraydemo.pas}
@item
@anch{arrayslicedemo}@c
Pristup odsječcima polja -- pristupa se dijelovima polja kao manjem polju,
čak i na lijevoj strani operacije dodjele vrijednosti (engl. assignment)
@hrefexample{arrayslicedemo.pas}
@end itemize

@item Kompatibilan sa Borland Pascalom 7.0 s objektima (BP):

@itemize @minus
@item
@anch{absdemo}@c
Podržava jedinice (UNIT), objekte, @dots{}, i čini čak i stvari kao
@samp{absolute} varijable prenosivima. @hrefexample{absdemo.pas}
@item Dolazi s prenosivim verzijama standardnih BP jedinica sa punim
izvornim kodom.
@item
@ifhtml
@html
<table align=right><tr><td>
<a href="../images/crtdemo.png">
<img alt="[CRTDemo screen] src="../images/crtdemo-small.png" width=133 height=138>
<br>
(PNG, 21 kB)
</a>
</td></tr></table>
@end html
@end ifhtml
@anch{crtdemo}@c
Istinski mrežno-transparentna CRT jedinica: možete izvršavati svoje CRT
aplikacije lokalno ili dok ste prijavljeni udaljeno (remote login), bez
potrebe za brigom o različitim tipovima terminala. Kompatibilna s BP
jedinicom, ali s mnogim proširenjima, kao npr. preklapajući prozori.
@hrefexample{crtdemo.pas}
@item
Potpuno funkcionalna GUI (X11) verzija CRT (također potpuno mrežno
transparentna).
@htmlbrclear
@item @samp{Random} funkcija koja može proizvesti iste sekvence
pseudo-slučajnih brojeva kao i ona u BP -- ako vam je to potrebno umjesto
mnogo jače elaboriranog inicijalnog algoritma.
@item
@anch{procvardemo}@c
Podržava proceduralne varijable u stilu BP-a, jednako kao i procedure kao
parametre iz Standard Pascala. @hrefexample{procvardemo.pas}
@item
@anch{portdemo}@c
@samp{Ports} jedinica dozvoljava pristup I/O portovima na sistemima gdje
to ima smisla. @hrefexample{portdemo.pas}
@item
@anch{bigmemdemo}@c
Specijalne kompatibilnostne značajke za pomoć u migraciji s BP-a na GPC,
kao @samp{GPC for BP} jedinica koja pruža neke od GPC-ovih značajki za BP,
te neke rutine za pristup skupovima velikih memorijskih blokova na uniforman
način pod GPC-om i BP-om (čak i u tzv. realnom modu).
@hrefexample{bigmemdemo.pas}
@item
@anch{binobjdemo}@c
Dolazi sa BP-kompatibilnom @samp{binobj} uslugom.
@hrefexample{binobjdemo.pas}
@end itemize

@item Iz Borland Delphija:

@itemize @minus
@item @samp{abstract} tipovi objekata i metoda
@item @samp{is} i @samp{as} operatori za testiranje pripadnosti objekta tipu
@item komentari s @samp{//}
@item @samp{Setlength} procedura za znakovne nizove (string) čini nepotrebnim
korištenje trikova kao što je pridodjeljivanje ``nultom karakteru''.
@item @samp{Initialize} i @samp{Finalize} za rukovanje varijablama na
niskoj razini.
@end itemize

@item Iz Pascal-SC (PXSC):

@itemize @minus
@item Korisnički redefinirani (preopterećeni) operatori. Zbrajajte svoje
vektore sa @samp{+}.
@end itemize

@item Pažljivo definirana GNU proširenja pomažu vam da učinite svoje
programe iz realnog života prenosivima:

@itemize @minus
@item 64-bitni cjelobrojni tipovi sa i bez predznaka.
@item
@anch{c_gpc}@c
Specijalni tipovi garantiraju kompatibilnost sa drugim GNU jezicima kao
što je GNU C. Direktive kao @samp{@w{@{$L foo.c@}}} čine jednostavnim
održavanje projekata pisanih u više jezika, npr. uključivanje koda pisanog
u drugim jezicima u Pascal programe
@xhrefexample{c_gpc.pas,Primjer (Pascal dio)}
@xhrefexample{c_gpc_c.c,Primjer (C dio)},
@item
@anch{gpc_c_pas}@c
@anch{gpc_c_unit}@c
ili uključivanje Pascal koda u programe pisane u drugim jezicima.
@xhrefexample{gpc_c_pas.pas,Primjer (Pascal dio)}
@xhrefexample{gpc_c_unit.pas,Primjer (Pascal jedinica)}
@xhrefexample{gpc_c_c.c,Primjer (C dio)}
@item
@anch{endiandemo}@c
Proširenja kao @samp{BitSizeOf} i @samp{ConvertFromBigEndian}
pomažu rješavanju problema s različitim tipovima i unutrašnjim poretkom
(engl. endianess - big endian, little endian).
@hrefexample{endiandemo.pas}
@item Male sitnice kao što su @samp{DirSeparator},
@samp{PathSeparator}, @samp{GetTempDirectory} pomažu vam da pišete programe
koji izgledaju i osjećaju se ``kod kuće'' na svim operativnim sistemima.
@item
@anch{pexecutedemo}@c
@samp{PExecute} rutina dozvoljava izvođenje 'child' procesa na prenosiv
način koji u potpunosti iskorištava višezadaćne (engl. multitasking)
okoline.
@hrefexample{pexecutedemo.pas}
@item
@anch{getoptdemo}@c
GNU GetOpt rutine daju komforan pristup kratkim i dugim opcijama u komandnoj
liniji u Unix-stilu sa i bez argumenata.
@hrefexample{getoptdemo.pas}
@item
@anch{fexpanddemo}@c
Rutine kao @samp{FSplit} ili @samp{FSearch} ili @samp{FExpand} znaju o
specifičnostima raznih operativnih sistema.
@hrefexample{fexpanddemo.pas}
@item
@anch{formattimedemo}@c
@samp{FormatTime} funkcija pušta vas da formatirate vrijednosti datuma i
vremena, prema raznim pravilima formatiranja.
@hrefexample{formattimedemo.pas}
@end itemize

@item Korisne i prenosive GNU standardne jedinice:

@itemize @minus
@item
@anch{pipedemo}@c
@anch{demoproc}@c
@samp{Pipes} jedinica daje međuprocesnu komunikaciju čak i pod običnim
DOS-om. @hrefexample{pipedemo.pas}
@xhrefexample{demoproc.pas,Demo proces za primjer}
@item
@anch{factorial}@c
@anch{fibonacci}@c
@anch{power}@c
@anch{realpower}@c
@anch{pi}@c
GNU multipreciznostna @samp{GMP} jedinica omogućava aritmetiku cijelih,
realnih i racionalnih brojeva proizvoljne preciznosti.
@xhrefexample{factorial.pas,Primjer: faktorijele}
@xhrefexample{fibonacci.pas,Primjer: Fibonaccijev niz}
@xhrefexample{power.pas,Primjer: potenciranje}
@xhrefexample{realpower.pas,Primjer: potenciranje realnih brojeva}
@xhrefexample{pi.pas,Primjer: pi}
@item
@anch{readdirdemo}@c
@anch{statfsdemo}@c
@anch{filelockdemo}@c
POSIX funkcije poput @samp{ReadDir}, @samp{StatFS} ili
@samp{FileLock} pružaju efikasno, lako za korištenje i prenosivo sučelje
(engl. interface) prema operacijskom sustavu. @hrefexample{readdirdemo.pas}
@hrefexample{statfsdemo.pas}, @hrefexample{filelockdemo.pas}
@item
@anch{dosunixdemo}@c
@samp{DosUnix} jedinica kompenzira neke nekompatibilnosti između dviju
obitelji operacijskih sustava.
@hrefexample{dosunixdemo.pas}
@item
@anch{md5demo}@c
@samp{MD5} jedinica izračunava MD5 sume poruka (engl. message digest),
u skladu s RFC 1321. @hrefexample{md5demo.pas}
@item
@anch{findfilesdemo}@c
@samp{FileUtils} jedinica pruža neke rutine za rukovanje datotekama i
direktorijima na višoj razini.  @hrefexample{findfilesdemo.pas}
@item
@anch{stringhashdemo}@c
@samp{StringUtils} jedinica pruža neke rutine za rad sa znakovnim nizovima
na višoj razini. @hrefexample{stringhashdemo.pas}
@item
@anch{gettextdemo}@c
@anch{localedemo}@c
@samp{Intl} jedinica za internacionalizaciju.
@hrefexample{gettextdemo.pas} @hrefexample{localedemo.pas}
@item
@anch{trapdemo}@c
@samp{Trap} jedinica za hvatanje grešaka u vremenu izvođenja (runtime-errors)
i njihovo obrađivanje unutar programa.  @hrefexample{trapdemo.pas}
@item
@anch{tfdddemo}
A @samp{TFDD} jedinica koja omogućuje neke trikove s tekst datotekama,
npr. ``tee'' datoteku koja prouzročuje da se sve pisano u nju ispisuje u dvije
druge datoteke. @hrefexample{tfdddemo.pas}
@item @samp{HeapMon} jedinica koja pomaže detektirati "curenje" memorije
(engl. memory leaks) u vašim programima.
@end itemize
@end itemize

Demo programi spomenuti gore su raspoloživi na WWW-u jednako kao i u
GPC distribucijama, binarnim i source.

@c DEMO-END

@anch{contra}@c
Nedostaci:

@itemize @bullet

@item GNU simbolički debugger (GDB) još ne razumije Pascal sintaksu i
tipove; potrebno je koristiti C sintaksu kod ispravljanja programa GDB-om.

@item Sa GPC-om prevođenje traje dulje nego s npr. Borland Pascalom.
@end itemize

@strong{Suradnici dobrodošli!}

Sposobni, predani programeri su uvijek dobrodošli u GNU Pascal tim. Ako
želite biti nezavisni od kompanija kojima morate plaćati za prevodilac
sa mnogo restriktivnijim uvjetima licenciranja koji se izvršava na
@emph{jednom} operacijskom sustavu, budite pozvani da se pridružite
razvojnom timu, @ref{Acknowledgments}.
