Download as pdf or txt
Download as pdf or txt
You are on page 1of 20

MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni

Nerecenzirani materijal

OPERATIVNI SISTEMI OSLAB01


Veba 1 Uvodni as, Pregled strukture predmeta, Teme seminarskih
radova, Obnova osnovnih koncepata programskog jezika C kroz okruenje
Code::Blocks, BAT skripte i Very Basic Control Panel

UVOD

Cilj prvog dela ove vebe je da se kroz niz primera obnovi znanje iz programskog jezika C kroz
okruenje Code::Blocks. Navedeno orkuenje se moe preuzeti (pri tome treba da se vodi rauna
da se preuzme verzija sa kompajlerom npr. codeblocks-16.01mingw-setup.exe) sa stranice
http://www.codeblocks.org/downloads/26

Osnove programskog jezika C su izloene u formi koda, u okviru Code::Blocks projekta OSLab01a
dok se prevod knjige Programski jezik C autora Dennis M. Ritchie Brian W. Keringhan (i samim
tim detaljna analiza programskog jezika C nalazi u okviru arhive
www.tfzr.uns.ac.rs/Content/files/1/skripta%20za%20vezbe.zip

Cilj drugog dela ove vebe je da se studenti upoznaju sa BAT skriptama i ostnovnom strukturom
istih. Bie razmotreni pozivi osnovnih komandi BAT fajlova kao to su skokovi na labele, echo,
korisniki unos i dr, kao i pozivi dijaloga Windows operativnog sistema. Bie oformljen
jednostavni BAT meni putem kojeg e se pozivati dijalozi koji se mogu pronai unutar Control
Panel-a Windows operativnog sistema stoga i naziv Very Basic Control Panel.

KREIRANJE PRVOG C PROJEKTA U CODE::BLOCKS RAZVOJNOM


OKRUENJU

Vebe iz operativnih sistema zasnivae se na jednostavnim konzolnim aplikacijama kako bi se na


to efikasniji nain razmotrili kljuni koncepti ovog predmeta. Nakon savladavanja osnovnih
koncepata predmeta Operativni sistemi, prelazak u vizuelno okruenje i rad sa grafikim
resursima je veoma lak.

Konzolna C aplikacija u okviru Code::Blocks kreira se sledei naredne korake:

1. Nakon preuzimanja Code::Blocks razvojnog okruenja, instalacije istog i izbora GNU GCC
kao podrazumevajueg (default) kompajlera razvojno okruenje je potrebno pokrenuti.
2. Klikom na meni File, izabrati stavku New, i zatim stavku Project iz padajueg podmenija
kao to je navedeno prikazano na slici broj 1.

1
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

Slika broj 1. Kreiranje novog projekta

3. Pojavljuje se dijalog New from template gde se bira Console application kao vrsta
projekta izborom odgovarajue ikonice i klikom na taster Go. Navedeno je prikazano na
slici broj 2.
4. Zatim je potrebno izabrati jezik u kojem se pie konzolna C aplikacija. Poto se vebe iz
predmeta Operativni sistemi zasnivaju na strukturnom ANSI C programskom jeziku,
potrebno je odabrati C i kliknuti na taster Next. Navedeno je prikazano na slici broj 3.

Slika broj 2. Izbor konzolne aplikacije

2
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

Slika broj 3. Izbor programskog jezika

5. U sledeem koraku potrebno je imenovati projekat. Kada se program kompajlira exe fajl
(izvrni fajl) e nositi navedeno ime. Ovde je, u formi test projekta, potrebno uneti
OSLab01 i kliknuti na taster Next. Navedeno je prikazano na slici broj 4.

Slika broj 4. Imenovanje projekta

3
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

Slika broj 5. Izbor kompajlera

Slika broj 6. Hello World program u Code::Blocks okruenju


4
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

6. U sledeem koraku potrebno je odabrati kompajler. Ukoliko je instalirana preporuena


verija Code::Blocks okruenja sa MinGW odnosno GNU GCC kompajelom, i isti je
deklaraisan kao podrazumevani (defaultni) kompajler to se podeava prilikom prvog
pokretanja programa (bira se iz liste dostupnih kompajlera), GNU GCC kompajler e biti
selektovan u kombo boksu Compiler. Na ovom dijalogu je potrebno kliknuti Finish.
Navedeno je prikazano na slici broj 5.
7. Nakon potvrivanja dijaloga iz koraka 6, u okviru Code::Blocks okruenja otvara se
kreirani projekat OSLab01. Navedeno je prikazano na slici broj 6.

5
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

OSLAB01A OSNOVE PROGRAMSKOG JEZIKA C PROMENLJIVE,


ULAZ, IZLAZ....

Analizirati vebu OSLab01a i otvoriti diskusiju o sledeim konceptima: promenljive definicija i


deklaracija, tipovi promenljivih, imenovanje promenljivih, doseg promenljivih, bazni tipovi
podataka, veliina tipova podataka (sizeof) i dr.

#include <stdio.h>
#include <stdlib.h>

// Postoje dve vrste podatka: promenljive i konstante

// Svaka promenljiva ima doseg, i u zavisnosti gde se DEFINIE / DEKLARIE ima


drugaiji doseg (SCOPE)
// Promenljiva je dostupna od mesta njenog DEFINISANJA / DEKLARISANJA pa da kraja
samog SEGMENTA (SEKVENCE) u kojem se nalazi
// Promenljivoj se ne moe pristupiti (pozvati) ukoliko nije prethodno DEFINISANA
/ DEKLARISANA
// Promenljive se pozivaju po IMENU, a IME promenljive je simbolicki predstavljena
ADRESA u memoriji racunara

// Globalna promenljiva
int globalniInteger = 10;

int main()
{
// varijable - promenljive (podrazumeva se signed, osim ako se ne navede
unsigned)
// SVAKA promenljiva ima TIP i NAZIV
// OBNOVITI STANDARDNE TIPOVE PODATAKA - kako se zovu, domen, raspon vrednosti
itd
// Sledee promenljive su DEFINISANE
// DEFINISANE promenljive pored svog TIPA i IMENA imaju i VREDNOST
int celobrojnaVrednostDEF = 5;
double realniBrojDEF = 5.2;
char karakterDEF = 'a';

// Promenljive koje imaju samo TIP i IME su DEKLARISANE promenljive (trenutno


nemaju dodeljenu vrednost)
int celobrojnaVrednostDEK;
double realniBrojDEK;
char karakterDEK;

// Veliina podatka se ita upotrebom operatora SIZEOF i vraca velicinu


podatka u BAJTIMA
// Zato se u ovom primeru mnoi za 8 da bi se prikazalo koliko taj podatak
ima BITA

// Ispis u konzolu (standardni izlaz - monitor) se obavlja pozivom funkcije


printf("fotmatni string", argumenti);
// U formatni string se najese stavljaju simboli ulazno / izlaznih
konverzija kako bi se naznailo kako da se tumai odreeni podatak

6
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

printf("Velicina podatka celobrojnaVrednost je %d bita\n",


8*sizeof(celobrojnaVrednostDEK) );
printf("Velicina podatka realniBroj je %d bita\n", 8*sizeof(realniBrojDEK)
);
printf("Velicina podatka karakter je %d bita\n", 8*sizeof(karakterDEK) );

// Pokaziva je promenljiva ija je vrednost adresa. Kada se kae da pokaziva


pokazuje na neku promenljivu, to znai da pokazivac, kao svoju vrednost sadri
adresu promenljive na koju pokazuje

int *p;
p=&celobrojnaVrednostDEF;

// sa * se pristupa sadraju na koji taj pokaziva prikazuje, u suprotnom


prikazuje se adresa koju taj pokaziva sadri
printf("%d\n",*p);
printf("%d\n%x",p,p);
printf("\n%x",&p);
// Stringovi - Nizovi karaktera
// Ime niza je pokaziva na prvi elemenat niza
char ime[20];

// Unos iz konzole se obavlja pozivom funkcije scanf("ulazna


konverzija",&imepromenljive);

// Na adresu promenljive ime smesti string (niz karaktera) koji se unosi sa


standardnog ulaza (tastature)
scanf("%s",&ime);
printf("%s\n\n",ime);

// if - then grananje
if (celobrojnaVrednostDEF==5) printf("Da\n");
// if - then - else grananje
if (realniBrojDEF==5) printf("Da\n"); else printf("Ne\n");
// visestruko grananje
switch(celobrojnaVrednostDEF)
{
case 1:
{
printf("1");
break;
}
case 2:
{
printf("2");
break;
}
case 3:
{
printf("3");
break;
}
case 4:
{
printf("4");
break;
}

7
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

case 5:
{
printf("5");
break;
}

return 0;
}

Listing broj 1. Veba OSLab01a

OSLAB01B GRANANJA U PROGRAMSKOM JEZIKU C

Zadatak: Napisati program koji za unetu vrednost kilovat asova ispisuje u kojoj se zoni korisnik
nalazi. Ukoliko je potronja manja od 250KWH treba ispisati "Zelena", ako je potronja vea ili
jednaka 250 a manja od 500KWH treba ispisati "Zuta", dok za potronje koje su vee ili jednake
500 KWH treba ispisati "Crvena".

#include <stdio.h>
#include <stdlib.h>

int main()
{
// definicija promenljive
double kwh = 0;
printf("Unesite potrosnju u kwh: ");
// unos vrednosti
scanf("%lf",&kwh);

// ispitivanje unete vrednosti i ispis u konzolu


if (kwh<250) printf("\nZona: Zelena");
else
{
if (kwh<=499) printf("\nZona: Zuta");
else printf("\nZona: Crvena");
}

return 0;
}

Listing broj 2. Zadatak OSLab01b

OSLAB01C PETLJE U PROGRAMSKOM JEZIKU C

Zadatak: Napisati program putem kojeg se unosi proizvoljni niz celih brojeva, zatim se taj niz
sortira od najmanjeg ka najveeg i ispisuje. Pre unosa proizvoljnog niza celih brojeva, korisnik
unosi dimenziju niza (broj elemenata).
8
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

#include <stdio.h>
#include <stdlib.h>

int main()
{
// definicija broja elemenata
int brojElemenata = 0;
// obavestenje korisniku
printf("Unesite broj elemenata: ");
// unos broja elemenata
scanf("%d",&brojElemenata);

// deklaracija niza
int nizBrojeva[brojElemenata];
int i,j = 0;
printf("\n");
// kroz petlju dodeliti vrednosti svim elementima niza
for (i = 0; i<=brojElemenata-1;i++)
{
// obavetenje korisniku
printf("Unesite %d elemenat: ", i+1);
// smestiti unetu vrednost za odreeni indeks elementa
// to su sve adrese, podsetiti se detaljno strukture niza
scanf("%d",&nizBrojeva[i]);
}

// sortiranje od najmanjeg ka najveem elementu


// kroz for petlju se ide od najmanjeg ka najveem indeksu,
// proglaava se najveci elemenat i uporeduje se sa svim elementima koji se nalaze
sa njegove desne strane
// ako je elemenat sa desne strane manji realizuje se zamena vrednosti putem
privremene promenlljive
for (i = 0; i<=brojElemenata-2;i++)
{
for (j = i+1; j<=brojElemenata-1;j++)
{
if (nizBrojeva[j]<nizBrojeva[i])
{
int temp = nizBrojeva[j];
nizBrojeva[j] = nizBrojeva[i];
nizBrojeva[i] = temp;
}
}
}
// ispis sortiranih brojeva
printf("\n");
printf("Uneti celi brojevi u rastucem redosledu: ");
for (i = 0; i<=brojElemenata-1;i++)
{

printf("%d, ",nizBrojeva[i]);

}
printf("\n");
return 0;
}

Listing broj 3. Zadatak OSLab01c

9
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

OSLAB01D UPIS U TEKSTUALNU DATOTEKU U PROGRAMSKOM


JEZIKU C

Zadatak: Napisati program koji u tekstualnu datoteku student.txt upisuje ime, prezime i broj
indeksa jedan ispod drugog. Omoguiti korisniku da navedene podatke unese.

#include <stdio.h>
#include <stdlib.h>

int main()
{
// deklaracije nizova karaktera - stringova
char ime[20];
char prezime[20];
char brojIndeksa[20];
// unos stringova sa tastature i obavetenja korisniku
printf("Unesite ime: ");
scanf("%s",&ime);
printf("Unesite prezime: ");
scanf("%s",&prezime);
printf("Unesite broj indeksa: ");
scanf("%s",&brojIndeksa);

// otvaranje datoteke u modu za pisanje tekstualnih fajlova


FILE *outDat;
outDat = fopen("student.txt","wt");
if(outDat == NULL)
{
printf("\nGreska file se ne moze otvoriti / kreirati!!!");
return -1;
}

// upis podataka u datoteku


fprintf(outDat,"%s\n",ime);
fprintf(outDat,"%s\n",prezime);
fprintf(outDat,"%s\n",brojIndeksa);

// zatvaranje datoteke
fclose(outDat);

return 0;
}

Listing broj 4. Zadatak OSLab01d

10
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

OSLAB01E UPIS U BINARNU DATOTEKU U PROGRAMSKOM


JEZIKU C

Zadatak : Napisati program koji u binarnu datoteku student.bin upisuje ime, prezime i broj
putem strukture student koja sadri navedena polja. Omoguiti korisniku da navedene podatke
unese.

#include <stdio.h>
#include <stdlib.h>

// struktura student koja se definie kao novi (sloeni) tip podataka (typedef)
typedef struct student
{
char ime[20];
char prezime[20];
char brojIndeksa[20];

} student;

int main()
{
// deklaracija promenljive tipa student
student stud;
printf("Unesite ime: ");
// polju strukture se pristupa tako to se nakon naziva promenljive stavi taka
i navede naziv polja iz strukture
// ukoliko postoji pokaziva na strukturu polju se umesto take pristupa strelicom
( -> )
scanf("%s",&stud.ime);
printf("Unesite prezime: ");
scanf("%s",&stud.prezime);
printf("Unesite broj indeksa: ");
scanf("%s",&stud.brojIndeksa);

// otvaranje datoteke u modu za pisanje binarnih fajlova


FILE *outDat;
outDat = fopen("student.bin","wb");
if(outDat == NULL)
{
printf("\nGreska file se ne moze otvoriti / kreirati!!!");
return -1;
}

// upis jednog sloga (strukture) u binarnu datoteku


fwrite(&stud,sizeof(stud),1,outDat);

// zatvaranje datoteke
fclose(outDat);

return 0;
}

Listing broj 5. Zadatak OSLab01e

11
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

ZA VEBU NA ASU (PRVI DEO)

Napisati kratak program koji ita tekstualni fajl iz primera / zadatka OSLab01d i
prikazuje njegov sadraj.
Napisati kratak program koji ita binarni fajl iz primera / zadatka OSLab01e i prikazuje
njegov sadraj.

12
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

TA SU BAT FAJLOVI?

BAT (batch) fajl je vrsta skripte koja se, u formi najobinijeg tekstualnog fajla moe napisati i
izvravati u DOS i Windows okruenju. Sastoji se od niza komandi koje izvrava interpreter
komandne linije operativnih sistema iz navedenih porodica. Podrava uobiajene programerske
koncepte kao to su grananja, ciklusi (petlje), skokove i labele. Poto je prethodno navedeno
da je batch fajl po strukturi najobiniji tekstualni fajl, da bi isti mogao da se pokrene, potrebno je
da isti ima odgovarajuu ekstenziju. Najee ekstenzije batch fajlova su *.bat i *.cmd. Kada se
spomenuta skripta pokrene, shell program (COMMAND.COM ili CMD.exe) liniju po liniju
izvrava zadatu skriptu. Sam izraz batch ukazuje na redoslednu obradu bez interakcije korisnika,
meutim u batch skriptu mogue je dodati komande koje e od koristika traiti odreenu
interakciju.

PRIMER BAT FAJLA

U sledeem primeru oformljen je jednostavni meni koji predstavlja veoma oskudnu varijantu
Control Panel-a, stoga i naziv Very Basic Control Panel. BAT skripra je priloena dok je izgled
izvravanja spomenute skripte prikazan na slikama broj 7, 8 i 9.

Slika broj 7. Very Basic Control Panel Glavni meni

13
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

Slika broj 8. Very Basic Control Panel Keyboard Properties

Slika broj 9. Very Basic Control Panel Mouse Properties

@echo off
title Very Basic Control Panel
COLOR 4f
cls
:input
call:MainMenu
:prepareChoice
CHOICE /C:12345 /N /T:30 /D:5 /M:"Please select a menu item":
echo.
IF ERRORLEVEL == 5 call :ExitFunction
14
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

IF ERRORLEVEL == 4 call :OpenOnScreenKeyboard


IF ERRORLEVEL == 3 call :OpenSoundProperties
IF ERRORLEVEL == 2 call :OpenMouseProperties
IF ERRORLEVEL == 1 call :OpenKeyboardProperties
pause

:MainMenu
cls
echo ***********************************************
echo * University of Novi Sad *
echo * Tehnical faculty "Mihajlo Pupin" *
echo * Zrenjanin *
echo ***********************************************
echo.
echo ***********************************************
echo * Operativni Sistemi 2016/2017 *
echo * Very Basic Control Panel *
echo * MSc Predrag Pecev *
echo ***********************************************
echo * *
echo * 1. Keyboard Properties *
echo * 2. Mouse Properties *
echo * 3. Sound Properties *
echo * 4. Display Properties *
echo * 5. Exit VBCP *
echo * *
echo ***********************************************
echo.
goto :prepareChoice

:OpenKeyboardProperties
echo ***********************************************
echo * This option will open Keyboard Properties *
echo ***********************************************
echo.
pause
start control keyboard
goto :input

:OpenMouseProperties
echo ***********************************************
echo * This option will open Mouse Properties *
echo ***********************************************
echo.
pause
start control mouse
goto :input

:OpenSoundProperties
echo ***********************************************
echo * This option will open Sound Properties *
echo ***********************************************
echo.
pause
start mmsys.cpl
goto :input

:OpenOnScreenKeyboard
15
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

echo ***********************************************
echo * This option will open Display Properties *
echo ***********************************************
echo.
pause
start desk.cpl
goto :input

:ExitFunction
echo ***********************************************
echo * Very Basic Control Panel Closing... *
echo ***********************************************
echo.
pause
exit

Listing broj 6. Very Basic Control Panel BAT File

Komande koje su koriene u priloenom primeru su sledee:

Komanda Opis Detaljnije informacije

@echo ispisuje ili neispisuje komande koje se http://ss64.com/nt/echo.html


izvravaju na ekranu

title postavlja naslov prozora konzole tj. CMD http://ss64.com/nt/title.html


prozora

COLOR podeava boju slova i podazine konzole tj. http://ss64.com/nt/color.html


CMD prozora

cls isti ekran http://ss64.com/nt/cls.html

call poziva drugi batch program (skriptu) ili http://ss64.com/nt/call.html


podprogram (podrutinu) ili labelu

goto skae (ide) na labelu http://ss64.com/nt/goto.html

start pokree odgovarajui program, komandu ili http://ss64.com/nt/start.html


drugi fajl

choice koristi se kada se trai od korisnika da unese http://ss64.com/nt/choice.html


odreenu vrednosti. Dozvoljava se samo
jedan pritisak bilo kog tastera tj. dozvoljen je
samo jedan unos.

pause pauzira izvravanje batch fajla http://ss64.com/nt/pause.html

exit izlazak iz bat skripte / terminiranje iste http://ss64.com/nt/exit.html

16
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

Listu ostalih komandi, moete pronai na http://ss64.com/nt/ Na navedenoj stranici nalaze se


uputstva za korienje komandi kao to su IF, FOR, SET koje e se koristiti u daljim primerima /
zadatcima.

ZA VEBU NA ASU (DRUGI DEO)

Modifikovati priloeni bat fajl tako da poziva druge komande. Listu dostupnih komandi /
programa / Control Panel dijaloga moete nai na sledeoj adresi
http://ss64.com/nt/run.html kao i na https://support.microsoft.com/en-us/kb/192806
Modifikovati priloeni bat fajl tako da podrava ugnjetene menije dok su stavke menija
proizvoljne. Npr odabirom stavke 1 se ulazi u podmeni koji ima 4 stavke. Odabirom
poslednje stavke se vraa u meni prethodnog nivoa.
Razmotriti da li je za programe tj. zadatke OSLab01b, OSLab01c i OSLab01d mogue
napraviti port u formi batch skripte. Ukoliko je mogue, na osnovu komadi koje se nalaze
na http://ss64.com/nt/ napisati traene skripte.

17
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

BONUS KOLIBRIOS

KolibriOS je mali, a izuzetno moan i brz operativni sistem. Napisan je u potpunosti u FASM (Flat
Assembler) asemblerskom jeziku i zahteva 8MB ram memorije kako bi funkcionisao. Navedeni
operativni sistem se moe besplatno preuzeti sa http://kolibrios.org/en/download Preporuuje
se LiveCD verzija poto se putem iste najlake moe izprobati navedeni sistem, a zatim, po
portrebi i instalirati.

Kako se ne bi koristili fiziki mediji, predlae se, da se radi testiranja navedenog operativnog
sistema, koristi Oracle Virtual Box program. Navedeni program preuzeti sa
https://www.virtualbox.org/wiki/Downloads i pri tome izabrati odgovarajuu distribuciju za
Va operativni sistem tj. platformu. Zatim formirati se virtuelni raunar relativno niskih
performansi (64mb ram memorije i 500MB hard disk je i vie nego dovoljan za KolibriOS). Na
slikama broj 10, 11 i 12 ukratko je prikazano formiranje VirtualBox raunara.

Slika broj 10. Kreiranje Virtuelnog raunara

18
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

Slika broj 11. Dodeljivanje memorije

Slika broj 12. Formiranje Hard Diska i odreivanje kapaciteta istog

19
MSc Predrag Pecev - Operativni Sistemi Vebe 2016/2017 Revizija 2 Podlono izmeni
Nerecenzirani materijal

Nakon formiranja virtuelnog raunara, isti je potrebno pokrenuti u ubaciti LiveCD kolibri.iso disk
kako bi se KolibriOS uitao i pokrenuo. Podizanje spomenutog operativnog sistema kao i njegov
trenutni izgled moete pogledati na slikama broj 13 i 14.

Slika broj 13. Podizanje KolibriOS operativnog sistema

Slika broj 14. Izgled KolibriOS operativnog sistema

20

You might also like