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
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: