Naprej Nazaj Kazalo

10. Kanček programiranja

10.1 Skripte: datoteke .BAT na steroidih

Če ste, tako kakor pisec, uporabljali datoteke .BAT za to, da ste dolge ukazne vrstice nadomestili z bližnjicami, ste medtem verjetno že ugotovili, da gre v Linuxu to z vzdevki v datoteki .profile. Če pa so bile vaše datoteke .BAT bolj zapletene, boste gotovo navdušeni nad skriptnim jezikom, ki ga ponuja ukazna lupina. Vsaj tako močan je kakor dobri stari QBasic, če ne bolj. Pozna spremenljivke, strukture kot while, for, case, if..then..else, in veliko drugih priboljškov; lahko ga imamo za dober nadomestek ,,pravih`` programskih jezikov.

Skript -- ustreznik datoteke .BAT v okolju DOS -- je enostavna tekstovna datoteka z ukazi, ki jo lahko napišemo s katerimkoli urejevalnikom, shranimo in napravimo izvedljivo z ukazom chmod +x <moja_skript>. Poženemo ga enostavno tako, da vtipkamo njegovo ime.

Drobno opozorilo. S sistemskim urejevalnikom vi ima večina novih uporabnikov precejšnje težave. Tu ne bomo razlagali, kako se ga uporablja, bralec naj poišče razlago v knjigi ,,Namestitev in začetek dela z Linuxom`` ali pa v priročnikih, ki so dostopni v internetu. Zadovoljiti se boste morali z najnujnejšim:

Dober urejevalnik za začetnike je joe. Če ga pokličemo z imenom jstar, se vede enako kakor urejevalnik v DOS. jed v načinu WordStar ali IDE je še boljši. O tem, kje najdete prvega in drugega, se poučite v razdelku Kje najdemo programe.

Pisanje skript v bash je tako obsežna tema, da bi sama zahtevala celotno knjigo. Tu se ne bomo več spuščali v globine te teme, ampak bomo navrgli samo še en zgled skripte, iz katerega se lahko naučite nekaj osnovnih pravil:


#!/bin/sh
# zgled.sh
# To je komentar
# Ne spreminjajte prve vrstice!
echo "Sistem: `uname -a`"       # uporabimo izpis zunanjega ukaza uname
echo "Tej skripti je ime $0"    # vgrajene spremenljivke
echo "Podali ste $# parametrov; ti so: "$*
echo "Prvi parameter je: "$1
echo -n "Vaše ime? " ; read ime
echo Opazite razliko: "hi $ime" # dvojni narekovaji
echo Opazite razliko: 'hi $ime' # enojni narekovaji
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then      # imenik?
    DIRS=`expr $DIRS + 1`       # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*jpg) echo "${file}: slika" ;;
    *.txt|*.tex) echo "${file}: besedilo" ;;
    *.c|*.f|*.for) echo "${file}: izvirna koda programa" ;;
    *) echo "${file}: druga datoteka" ;;
  esac
done
echo "Imenikov je ${DIRS}, datotek pa ${FILES}"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then           # izhodna koda zadnjega ukaza
  echo "ZxY--!!!WKW not found"
fi
echo "dovolj... 'man bash' vam bo postregel z dodatnimi informacijami."

10.2 C za vas

V Unixu je sistemski jezik C, najsi vam je všeč ali ne. Na voljo pa je tudi kopica drugih jezikov: java, fortran, pascal, lisp, perl, awk...

Ker verjamemo, da C že znate, bomo tu le navedli nekaj napotkov za tiste, ki vas je razvadil turbo C++ ali kaj sorodnega. Prevajalnik za C na Linuxu se imenuje gcc in ne obsega takih lepot kakor njegovi dvojniki v DOS: nima integriranega okolja za delo, interaktivne pomoči, integriranega razhroščevalnika in podobnega. Je res samo surovi prevajalnik, ki ga poženemo iz ukazne vrstice (kot prevajalnik pa je res zelo močan in učinkovit). Običajni programček hello.c prevedemo z ukazom:

$ gcc hello.c

To bo proizvedlo izvedljiv program z imenom a.out. Če želimo izvedljiv program poimenovati kako drugače, lahko to navedemo v ukazni vrstici, npr.:

$ gcc -o hola hello.c

Če bi radi v izvedljiv program povezali še knjižnico, dodamo izbiro -l<ime_knjižnice>. Takole na primer povežemo program s standardno matematično knjižnico:

$ gcc -o matemprog matemprog.c -lm

(Izbira -l<nekaj> pove prevajalniku gcc, naj v izvedljiv program poveže še knjižnico /usr/lib/lib<nekaj>.a; tako -lm iz prejšnjega zgleda poveže knjižnico /usr/lib/libm.a).

To je tako rekoč vse, kar boste potrebovali za prevajanje kratkih programčkov. Kadar pa pišete dolg program, katerega izvirna koda je razbita na več manjših datotek, si boste precej olajšali delo s programom make. Recimo, da pišete razčlenjevalnik izrazov. Izvirna koda se imenuje parser.c in kliče deklaracije iz glav parser.h in xy.h. Funkcije, definirane v parser.c pa želite uporabiti v drugem programu, recimo calc.c, ki prav tako prebere glavo parser.h. Kakšna zmešnjava! Kaj morate torej napraviti, da prevedete calc.c?

Napisati morate tako imenovani Makefile, ki vodi evidenco o odvisnostih med izvirnimi in prevedenimi datotekami. V našem primeru bi bila taka:


# makefile za prevajanje calc.c
# Vnesite <TAB>, kjer je označeno

calc: calc.o parser.o
<TAB>gcc -o calc calc.o parser.o -lm
# Program calc je odvisen od dveh prevedenih datotek: calc.o in parser.o

calc.o: calc.c parser.h
<TAB>gcc -c calc.c
# calc.o je odvisen od izvirne datoteke calc.c in glave parser.h

parser.o:  parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o je odvisen od izvirne datoteke parser.c in dveh glav

# To je vse.

Shranite to datoteko pod imenom Makefile. Zdaj preprosto napišete make, ki bo prevedel cel paket. Alternativno jo lahko shranite tudi pod drugačnim imenom, denimo calc.mak, le da boste to ime zdaj morali navesti kot parameter: make -f calc.mak. Več o tem se boste naučili ob branju priročnika. Tudi funkcije iz standardne knjižnice imajo svoje strani v priročniku, in sicer v tretjem poglavju. Zgled kaže, kako do navodil za funkcijo printf:

$ man 3 printf

Napake v programih lahko odpravljate z razhroščevalnikom gdb. Ukaz info gdb vas bo poučil o podrobnostih.

Programerju je na voljo zelo veliko število različnih knjižnic. Med prvimi, ki se jih boste morda ogledali, sta ncurses, ki podpira delo z znakovnim zaslonom, ter svgalib za delo v grafičnem načinu. Številni urejevalniki se tudi lahko vedejo kot integrirano okolje.emacs in jed, na primer, podpirata barvanje sintakse, zamikanje programske kode in podobno. Alternativa pa je paket rhide, ki ga lahko snamete z ftp://metalab.unc.edu:/pub/Linux/devel/debuggers/. Je kopija Borlandovega integriranega okolja in vam bo skoraj zagotovo všeč.

10.3 Programiranje v oknih X

Če ste dovolj pogumni, da se boste lotili programiranja za X11 (ni tako zapleteno, kakor se zdi sprva!), je na voljo več knjižnic, ki pisanje programov za X11 znatno olajšajo. Glavni mesti, ki ju boste želeli obiskati, sta domača stran knjižnice GTK+, http://www.gtk.org, in domača stranj knjižnice Qt, http://www.troll.no. Knjižnica GTK+, zasnovana za jezik C, obsega nabor grafičnih elementov, ki je bil prvotno uporabljen za grafični paket GIMP http://www.gimp.org, zdaj pa ga uporablja tudi namizje GNOME. Kdeveloper pa, na drugi strani, temelji na knjižnici Qt, prirejeni za delo s C++, in uporabljeni v namizju KDE. Najverjetneje boste uporabili eno od teh dveh knjižnic.

Nekatera najboljša orodja za slikovno programiranje so Kdevelop za Qt, http://www.kdevelop.org in Glade za GTK+, http://glade.pn.org. Podrobnejše podatke najdete tudi na strani http://www.free-soft.org/guitool/.

Programiranje za več strojnih okolij

Kaj ne bi bilo sijajno, če bi lahko pisali programe, ki bi se s prevajalnikom gcc brez sprememb prevedli tako v Linuxu kot v Windows? Medtem ko nastaja to pisanje, je na voljo kar nekaj kolikor toliko stabilnih naborov grafilčnih elementov, ki delujejo v več okoljih. Če damo prednost stabilnosti in popolnosti, se izbor bolj ali manj zoži na eno samo ime: FLTK, Fast Light Tool Kit http://www.fltk.org. Presenetljivo majhen, hiter in stabilen je. Ima tudi delno vizualni sestavljalnik programov, imenovan Fluid.


Naprej Nazaj Kazalo