\section{XDS modula 2 - rad iz komandne linije}

Ovo uputstvu ukratko pokriva kako se XDS kompajler može podesiti da se
koristi iz komandne linije, na Windows, ali i *nix sistemima.

Predpostavlja se da je XDS Modula 2 već instalirana (konsultovati
odvojeno uputstvo ako nije). Takođe će se predpostavljati da je
instalirana na podrazumevanu lokaciju ``c:/xds/''. Ako to nije slučaj,
potrebno je zameniti putanje iz upustva sa stvarnom putanjom.

\subsection{Prednosti (ili ``Zašto ovo raditi?'')}

Skoro svaki jezik se može kompajlirati iz komandne linije, i onda se
rad sa različitim jezicima svodi na rad u svom omiljenom editoru
teksta (npr Notepad++, jEdit, joe, emacs...), koji je prilagođen
sopstvenim zahtevima i pozivanjem odgovarajućeg kompajlera iz komandne
linije.

U konkretnom slučaju XDS kompajlera, ovim se takođe oslobađa potrebe
kreiranja projekata koji su neophodni kad se koristi XDS windows
okruženje - bilo koji pojedinačni modul se može direktno kompajlirati,
fajlovi se mogu premeštati po folderima, menjati imena foldera i tako
dalje.

Još jedna prednost za studente PMF-a koji polažu ispite u okruženju
Svetovid je što u njemu dobijaju potpuno iste poruke od kompajlera kao
što se dobijaju izvršavanjem kompajliranja iz komandne linije.

\subsection{Podešavanje sistemske putanje (ili "OK, odakle početi?")}

Da bi kompajler mogao da se poziva iz bilo kog foldera na računaru, a
ne samo iz ``C:/xds/bin'', potrebno je dodati folder kompajlera u
sistemsku putanju (tj spisak foldera koji se pretražuju kada korisnik
pokuša da pokrene neku komandu). Na Windows sistemima se ova
promenljiva naziva ``PATH'', a trenutnom sadržaju se može pristupiti
preko \%PATH\%.

Putanja se može dodati privremeno komandom:

\begin{codeblock}
  path = %PATH%;c:/xds/bin
\end{codeblock}


ovim se proširuje spisak putanja u trenutom komandom prozoru, odnosno
važiće samo u trenutno otvorenom cmd promptu i to dok se isti ne
zatvori.

Putanja se može i trajno dodati na nekoliko načina. Na win xp, Vista i
7 sistemima se to može uraditi na sledeći način: otvori se ``computer
properties'' (desni klik na "My Computer"), odabere se jezičak
"advanced", klikne na dugme "Environment variables", u prozoru koji se
otvori odabere se ``PATH'' i klikne na dugme "edit", nakon čega se na
postojeću vrednost doda ``c:$\backslash$xds$\backslash$bin''. Bitno je
da se ne obriše postojeća vrednost, kao i da se novi dodatak odvoji sa
``;'' od postojećih.

\subsection{Kompajliranje programa}

Nakon što je podešena sistemska putanja, kompajleru se pristupa komandom "xc". Poziv bez parametara će dati ispis mogućnosti. Tipična upotreba za kreiranje izvršne verzije programa sadržanu u fajlu "ime.MOD":

\begin{codeblock}
  xc =make =all ime
\end{codeblock}


Ovim pozivom će se rekompajlirati i svi ostali potrebni moduli koji se koriste u okviru programa.

Ako postoje greške u programu izvršna verzija neće biti kreirana. Ako već postoji exe napravljen nekim prethodnim kompajliranjem, on NEĆE biti obrisan.

Kompajler greške prijavljuje u sledećem formatu:

\begin{codeblock}
  * [zad.mod 125.12 E020] * undeclared identifier "RStr" IO.$RStr(ime);
\end{codeblock}
% $ nepotrebni komentar zbog sintaksnog bojenja u nekim editorima


Odnosno ime fajla, red greške i kolona razdvojeni tačkom i kod greške
koji počinje sa ``E''. Sam kod greške nije previše bitan, pošto u
sledećem redu sledi objašnjenje. Ono što jeste bitno je da se u istom
formatu prikazuju i upozorenja kompajlera čiji kodovi počinu sa ``W'' i
po ovome se najlakše razlikuju.

Takođe treba obratiti pažnju na to da nakon objašnjenja greške sledi i
ispis samog reda u kome je greška u koji je dodatno ubačen karakter
``\textbf{\$}'' koji označava tačno nesto greške. Ako se on nalazi na
početku reda često je u pitanju greška iz prethodnog reda (npr
nedostaje ``;''). Konkretna prikazana greška je pogrešno napisano
``RdStr''.

\subsection{Linux i drugi slobodni sistemi (ili "Who needs windows anyway?")}

Korisnici Linux (i srodnih) sistema takođe mogu koristiti XDS Modulu
2, i to i okruženje i kompajler iz komandne linije.

Prvo rešenje je korišćenje Linux verzije XDS kompajlera. Međutim ona
se ponaša malo drugačije, nema vizuelno okruženje i, što je
najznačajnije za studente PMFa, nema Top Speed Compatibility Pack koji se
koristi na vežbama.

Ono što je najbolje rešenje u ovoj situaciji je koriščenje sloja za
emuliranje Windowsa - "Wine".

Potrebno je pokrenuti instalaciju XDS paketa, isto kao i pod windowsom
(ili alternativno preuziti strukturu foldera iz windowsa i prekopirati
u Wine-ov ``C'' disk).

Ovako instaliran XDS se može koristiti i kao normalno programsko
okruženje koje se koristi pod Windowsom.

Ono što je inače bila poenta ovog uputsva u celini je bilo korišćenje
iz komandne linije.

Da bi kompajler radio u bilo kom folderu, potrebno je namestiti PATH
pod Wine-om. Treba obratiti pažnju da to NIJE ista PATH variabla kao
ona od Linux sistema. Ovo se može uraditi na sledeći
način\footnote{Link: uputstvo za sistemske promenljive na
  zvaničnom sajtu softvera Wine:\\
  \href{http://www.winehq.org/docs/wineusr-guide/environment-variables}{http://www.winehq.org/docs/wineusr-guide/environment-variables}}:
\begin{itemize}
	\item Otvori se regedit pod wine-om (wine regedit)
	\item nađe se ključ HKEY\_CURRENT\_USER/Environment
	\item promeni se polje ``path'' tako da uključuje i xds bin folder.   obratiti pažnju da je potrebno ubaciti dodatni "$\backslash$", pa će krajnja vrednost izgledati ovako nekako: \\
\textbf{c:$\backslash$$\backslash$windows;c:$\backslash$$\backslash$windows$\backslash$$\backslash$system;c:$\backslash$$\backslash$xds$\backslash$$\backslash$bin}
\end{itemize}


Nakon ovoga se u bilo kom folderu može vršiti poziv

\begin{codeblock}
  wine xc =make =all zad
\end{codeblock}


predpostavljajući naravno da u folderu postoji ``zad.mod'' i da je u
pitanju ispravan programski modul, biće kreiran ``zad.exe'' koji se
onda može pokrenuti sa

\begin{codeblock}
  wine zad
\end{codeblock}


Jednostavni programi koji rade sa tekstualnim ulazom i izlazom će
najčešće raditi bez problema. U zavisnosti od verzija programa nekad
se dešava da kada ovako pokrenut program čeka na unos sa tastature
pravi veliko zauzeće procesora.

Postoji i opcija da se otvori novi terminal prozor koji vrši kompletnu
emulaciju komandnog promta operativnog sistema DOS 6. Npr:

\begin{codeblock}
  wineconsole zad
\end{codeblock}


Ovako pokrenut program će se ponašati identično kao na Windowsu i neće
nepotrebno povećavati zauzeće procesora. Međutim odmah nakon završetka
rada pokrenute komande (tj programa zad u primeru) novi prozor će se
zatvoriti, što je problem ako je trebalo pročitati izlaz
programa. Rešenje za ovo je otvaranje terminala u kome se izvrašava
cmd, tj klasični dos promt:

\begin{codeblock}
  wineconsole cmd
\end{codeblock}


U ovako otvorenom promtu se mogu naravno izvršavati sve komande, iako
će interakcija biti nešto drugačija od naviknute u modernim konzolama
(tipa ispisivanja čudnih kodova umesto kretanja okolo kad se
pritiskaju strelice).

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "skripta-spa1-jk"
%%% End: 
