gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control systemdiff --git a/skripta-os2.tex b/skripta-os2.tex
--- a/skripta-os2.tex
+++ b/skripta-os2.tex
% prebreak=\P,
% postbreak=\ding{229}\space,
language=Modula-2,
- xleftmargin=4em
+ xleftmargin=1em
+}
+
+\lstdefinestyle{codeblock-indent}{
+ style=codeblock,
+ xleftmargin=4em
}
\lstdefinestyle{terminal}{
}
\lstnewenvironment{codeblock}[1][]{\lstset{style=codeblock,#1}}{}
+\lstnewenvironment{codeblock-indent}[1][]{\lstset{style=codeblock-indent,#1}}{}
\lstnewenvironment{terminal}{\lstset{style=terminal}}{}
% ----------------==================--------------------------------------
\label{g-prvi-program}
Tradicionalni prvi program ``Hello World'' bi izgledao ovako:
-\begin{codeblock}
+\begin{codeblock-indent}
MODULE hello;
FROM StrIO IMPORT WriteString, WriteLn;
WriteString('hello world');
WriteLn
END hello.
-\end{codeblock}
+\end{codeblock-indent}
Primećuje se razlika u modulu iz koga se uvoze komande u odnosu na
XDS/TopSpeed verzije M2, tamo je sve bilo u \kod{InOut}, dok se ovde
\end{terminal}
odnosno videćemo da je poziv definisan na sledeći način:
-\begin{codeblock}
+\begin{codeblock-indent}
int system(const char *command);
-\end{codeblock}
+\end{codeblock-indent}
što znači da vraća ceo broj, a prima jedan argument koji je pokazivač
(što se označava *) na znak. Ovo je zapravo ceo string, pošto se u C
jeziku oni predstavljaju kao pokazivač na prvi znak, a string se onda
END Zad3.
\end{codeblock}
-Kada imamo imena stavki iz direktorijuma o njima možemo dobiti više
-informacija koristeći sistemski poziv \kod{stat}. On prima dva
-argumenta, prvi je \emph{puna} putanja do fajla, a drugi je pokazivač
-na strukturu u koju će komanda upisati podatke. Obratiti pažnju da
-zbog ovoga struktura već mora postojati u memoriji, ili kao lokalna
-promenljiva odgovarajućeg slogovnog tipa, ili dinamički alocirana
-korišćenjem pokazivača na nju.
+\subsubsection{Primer: Ispis osobina pojedinih fajlova}
+
+O pojedinim fajlovima možemo dobiti više informacija koristeći
+sistemski poziv \kod{stat}. On prima dva argumenta, prvi je
+\emph{puna} putanja do fajla, a drugi je pokazivač na strukturu u koju
+će komanda upisati podatke. Obratiti pažnju da zbog ovoga struktura
+već mora postojati u memoriji, ili kao lokalna promenljiva
+odgovarajućeg slogovnog tipa, ili dinamički alocirana korišćenjem
+pokazivača na nju.
Linux i mnogi drugi srodni sistemi za internu prezentaciju vremena
koriste broj sekundi od početka ``epohe'', odnosno od prvog januara
1970 godine. Za konverziju u klasičnije mere vremena se može koristiti
poziv \kod{localtime}.
+Kao i u prethodnom primeru date su dve verzije definicija nekih
+tipova.
+
\begin{codeblock}
DEFINITION MODULE FOR "C" LibStat32;
FROM SYSTEM IMPORT
Korišćenjem sistemske komande \kod{fork} trenutni proces se duplira
(``račva''). Novi proces je identičan sa originalnim, osim u svom
identifikacionom broj. Komanda ne prima parametre i vraća jedan integer, pa se može mapirati na sledeći način:
-\begin{codeblock}
+\begin{codeblock-indent}
PROCEDURE fork(): INTEGER;
-\end{codeblock}
+\end{codeblock-indent}
Oba procesa se nakon račvanja nastavljaju odvijati u sledećem redu
koda. Jedino po čemu se razlikuju je vrednost koju je vratio
procesu je ova vrednost jednaka nuli. Budući da je najčešće potrebno
da dete i roditelj rade različite stvari, to se obično rešava kodom
sledećeg oblika:
-\begin{codeblock}
+\begin{codeblock-indent}
pid := fork();
IF pid = 0 THEN
(* "detetove" operacije *)
ELSE
(* "roditeljske" operacije *)
END;
-\end{codeblock}
+\end{codeblock-indent}
Komanda \kod{wait} (uvezena kao sistemska) se može pozvati u
originalnom procesu sa efektom da se proces uspava dokle god neki od
Prvi korak za instalaciju dodatnog kompajlera GNU Modula 2 je
dodavanje repozitorijuma softvera u sistem. Ovo se može uraditi ručnim
menjanjem fajla \kod{/etc/apt/sources.list} i dodavanjem
-\begin{codeblock}
+\begin{codeblock-indent}
#
# GNU Modula-2 repo
#
deb http://floppsie.comp.glam.ac.uk/debian/ squeeze main
deb-src http://floppsie.comp.glam.ac.uk/debian/ squeeze main
-\end{codeblock}
+\end{codeblock-indent}
Alternativno se mogu koristiti sledeće komande: