Język C jest językiem szeroko stosowanym zarówno na Amidze, jak i na innych platformach sprzętowych, gdyż nie jest związany z jakimś konkretnym systemem. Tym artykułem chciałbym rozpocząć cykl traktujący właśnie o ANSI C i postaram się opisać ten język tak, aby zrozumiały go osoby początkujące.
Język C został opracowany przez Dennisa Ritchie`go z Bell Laboratories w 1972 r. dla systemów operacyjnych Unix, działających na mikrokomputerach DEC PDP-11. Pierwowzoren dla języka C był język B opracowany w 1970 r. przez Kena Thomsona. Z kolei język B był inną wersją języka BCPL dla pierwszej wersji instalacji systemu Unix. BPCL zdefiniowano w 1969 r. przez Martina Richardsa z University of Mathematical Laboratories w Cambridge.
Język C jest językiem niskiego poziomu, więc jest w miarę prosty do nauczenia, ale stanowi on w połączeniu z funkcjami systemu Amigi potężne narzędzie. Ktoś może powiedzieć że jest AMOS, ale on nie korzysta z systemu Amigi i przez to np: nie zmusimy go do działania na karcie graficznej, czy choćby otwierać systemowe okienka. Prawda, są dodatki do Amosa, które przybliżają go do amigowego systemu, ale to nie to samo co C, który z amigowym systemem pracuje idealnie. Ponadto kompilatory C na Amigę potrafią generować kod dla procesorów PowerPC, czego w tej chwili nie potrafi np. osławiony język E, dzięki czemu sami możemy tworzyć oprogramowanie dla tych, nie ma co mówić, szybkich procesorów. Możemy także pokusić się o pisanie programów na MorphOSa, a w przyszłości na AmigaOS 4. Oczywiście amigowe kompilatory świetnie generują też kod dla procesorów 68k. Dzięki poznaniu tego języka łatwo pisać programy, które potem można przenosić między platformami sprzętowymi, co też nie jest bez znaczenia.
Na Amigę powstało dużo kompilatorów C (jak i C++), niektóre są komercyjne, niektóre darmowe. Do najbardziej popularnych należą: Sas C, Storm C, GCC oraz VBCC. Dwa ostanie są darmowe i można je ściągnąć z Aminetu. Wszystkie potrafią generować kod dla procesorów PPC. StormC to dzieło firmy Haage & Partner, jest to kompilator drogi, ale przez niektórych ceniony. Posiada zintegrowany edytor i na pewno jest łatwiejszy w instalacji niż np: gcc, czy vbcc. Ja korzystam z VBCC i właśnie na nim się skupimy. VBCC to darmowy kompilator, potrafi generować kod dla procesorów 68k, PowerPC (PowerUp, WarpUP, MorphOS), ale można np: wygenerować na nim program, który uruchomimy na procesorach x86 czy alpha. Program można pobrać z Aminetu lub ze strony domowej autora.
Instalację rozpoczniemy od rozpakowania archiwum z vbcc gdzieś na dysk. Po rozpakowaniu mamy katalog vbcc, a w nim katalogi:
assign >NIL: vbcc: (miejsce gdzie rozpakowane jest archiwum z vbcc) assign >NIL: C: vbcc:bin add assign >NIL: vbccm68k: vbcc:targets/m68k-amigaos assign >NIL: vincludem68k: vbccm68k:include assign >NIL: vincludem68k: (miejsce gdzie masz systemowe pliki include dla 68k) ADD ;assign >NIL: ixinclude: (miejsce do potrzebnych plików ixemul) assign >NIL: vlibm68k: vbccm68k:lib assign >NIL: vbccppc: vbcc:targets/ppc-powerup assign >NIL: vincludeppc: vbccppc:include assign >NIL: vlibppc: vbccppc:lib assign >NIL: vincludeppc: (miejsce gdzie masz systemowe pliki include dla PowerUp) ADD assign >NIL: vbccwos: vbcc:targets/ppc-warpos assign >NIL: vincludewos: vbccwos:include assign >NIL: vlibwos: vbccwos:lib assign >NIL: vincludewos: (miejsce gdzie masz systemowe pliki include dla WarpOS) ADD assign >NIL: vbccmos: vbcc:targets/ppc-morphos assign >NIL: vincludemos: vbccmos:include assign >NIL: vlibmos: vbccmos:lib assign >NIL: vincludemos: (miejsce gdzie masz systemowe pliki include dla MorphOS-a) ADD
Ponadto przy większych projektach trzeba zwiększyć stos komendą stack.
Wróćmy jednak do przypisań. Dla vbcc: przypisujemy miejsce w które rozpakowaliśmy
archiwum, np. Dh1:Programowanie/vbcc/
Systemowe include`y są dostępne np. na AmigaDeveloperCD, na razie nie będą nam potrzebne.
Kiedy będziemy zaczynać programować z wykorzystaniem funkcji AmigaOSu, powrócimy do include`ów.
Jeśli chodzi o przypisanie ixinclude, to także możemy sobie je na razie darować.
W katalogu vbcc znajdziemy przykładowe skrypty które po lekkich modyfikacjach możemy
umieścić w user-startup.
Po dodaniu przypisań do user-startup możemy już zacząć używać vbcc.
Co nam będzie potrzebne? Po pierwsze jakiś edytor tekstowy. Ja polecam GoldEd-a. Jest to edytor komercyjny, ale naprawdę dobry. W katalogu config mamy pliki konfiguracyjne dla różnych maszyn. Będziemy ich używać do kompilacji naszych programów. Jak to zrobić? Użyjemy opcji '+',np:
vc +m68k_warpos ...
vbcc będzie uruchomiony na maszynie z WarpOS-em (ppc), ale będzie kompilował program dla AmigaOS (68k).
vc +warpos_warpos ...
vbcc będzie uruchomiony na maszynie z WarpOS-em (ppc) i będzie kompilował program dla AmigaOS/WarpOS (ppc).
vc +m68k_ppc ...
vbcc będzie uruchomiony na maszynie z PowerUp (ppc) i będzie kompilował program dla AmigaOS (68k).
Jeżeli wszytko gra, to można skompilować następujący program.
#include <stdio.h> main() { printf("Pierwszy program napisany w C, pod VBCC\n"); return(0); }
Jak to zrobić? Piszemy nasz program w jakimś edytorze tekstowym. Zapisujemy go na dysk pod nazwą hello.c. Teraz kompilujemy nasz program komendą:
vc hello.c
Plik wykonywalny będzię utworzony w katalogu z plikiem hello.c
vc hello.c -o hello
Plik wykonywalny będzie utworzony w katalogu z plikiem hello.c, ale będzie miał nazwę hello.
vc +warpos_m68k hello.c -o hello
Plik wykonywalny będzie utworzony w katalogu z plikiem hello.c, będzie mial nazwę hello i będzie programem dla WarpOS.
Kompilator vbcc posiada wiele opcji które opiszę w dalszej części kursu, na razie wystarczą nam te podstawowe. Pełny spis komend vbcc znajduje się w dokumentacji (katalog doc/vbbc.html).
Przykładowo:
Jeżeli nasz program zapiszemy do DH1:C to:
vc +m68k_warpos dh1:c/hello.c -o dh1:hello
skompiluje nasz program do dh1:c pod nazwą hello. Program użyje pliku konfiguracyjnego warpos_warpos, czyli vbcc uruchomiony zostanie na maszynie z zainstalowanym WarpOSem (ppc), a plik wykonywalny zostanie wygenerowany dla AmigaOS 68k.
Proponuje skompilować nasz program. Nie musimy wiedzieć jeszcze co on robi i jak działa. Tym zajmiemy się w nastepnym odcinku.
Aby ułatwić wam kompilowanie programów załączam przycisk do DOpusa, który robi to bardzo wygodnie. W listerze Opusa zaznaczamy interesujacy nas plik źródłowy i naciskamy "Compile", badź naciskamy F10. Plik wykonywalny zostanie wygenerowany do tego samego katalogu co plik źródłowy i będzie nosił nazwę "program". Vbcc w tym przycisku korzysta z pliku konfiguracyjnego m68k_m68k, czyli generuje kod dla AmigaOSu 68k na tej samej maszynie. PPC jest zbędny. W przycisku użyta jest opcja -v (verbose), której zadaniem jest wypisanie więcej informacji o przebiegu kompilacji...
Oczywiście nic nie stoi na przeszkodzie, aby odpowiednio zmienić przycisk tak, aby generował kod dla WarpOS-a, PowerUP, czy MorphOS-a.
I to by było na tyle, zapraszam do następnego odcinka... W razie problemów proszę o kontakt.