Początek programowania w OUX / C+
- Janusz Augustyński
- 19 kwi 2020
- 3 minut(y) czytania
Zaktualizowano: 15 lip 2022
Pierwsze uruchomienie podsystemu OUX
Pobieramy podsystem OUX z zachowaniem połączenia ze źródłem:
git clone https://github.com/overcq/oux.git
Otwieramy Geany i z menu mojego rozszerzenia – project ➪ open directory, a następnie zaznaczamy katalog z podsystemem OUX i klikamy przycisk open.
Geany otworzy wszystkie pliki projektu wskazane w pliku ".autoopen-text" znajdującym się w katalogu projektu. Otwarte zostaną pliki przynależne do trzech modułów: base, x_window_hi_cpu i x_window_lo_cpu. Na końcu zostanie otwarty plik main.cx przynależny do testowego programu "gui".
Uruchamiamy z menu mojego rozszerzenia make ➪ run i czekamy dłuższą chwilę, obserwując komunikaty wypisywane w dolnym panelu Geany. Na karcie Status w tym panelu jest wypisywany tylko komunikat o rozpoczęciu i zakończeniu procesu, tzn. "spawn: make run" i "spawn finished". Na karcie Messages są wypisywane w pojedynczych liniach komunikaty o ostrzeżeniach i błędach z kompilatora. Na karcie Compiler są wypisywane pełne komunikaty kompilatora.
make ➪ run najpierw kompiluje projekt, a następnie go uruchamia. Kompilacja projektu rozpoczyna się od zbudowania bazy danych wywołań systemowych twojego systemu operacyjnego i przypisania każdemu z nich wymaganych dla niego plików nagłówkowych C. Następnym razem, gdy będziemy uruchamiać projekt, zbudowana baza danych zostanie wykorzystana od razu, nie będzie trzeba czekać tak długo na jej budowanie, chyba że usuniemy ją poleceniem menu mojego rozszerzenia make ➪ distclean.
Organizacja struktury podkatalogów podsystemu OUX
W katalogu podsystemu OUX znajdują się trzy podstawowe katalogi:
compile, w którym są pliki związane z kompilacją
module, w którym są katalogi modułów podsystemu OUX
program, w którym są pisane programy
Jeśli chcemy utworzyć nowy program, to należy utworzyć podkatalog w katalogu program i utworzyć w nim łącze do pliku Makefile z któregokolwiek obecnego już podkatalogu innego programu, czyli w utworzonym podkatalogu wydać polecenie:
ln ../[nazwa_innego_podkatalogu]/Makefile .
Obecnie programy, z wyjątkiem programu "gui", są tworzone do pracy w systemie Linux, w szczególności Gentoo Linux, ale nic nie stoi na przeszkodzie, by utworzyć program do innego systemu uniksopodobnego.
Przykładowe programy
Program "gui"
Program ten demonstruje podstawowe możliwości modułu x_window_hi_cpu lub x_window_lo_cpu (w zależności od konfiguracji programu).
Obiekty graficzne są automatycznie układane w oknie, zgodnie z hierarchią tych obiektów.
Obiekty mogą być przeciągane z okna, po upuszczeniu tylko są usuwane, ale można sprawdzić funkcjonowanie mechanizmu przeciągnij i upuść. Obiekty animowane podczas przeciągania są rysowane pod wskaźnikiem ekranu, jeśli były animowane (tak jak na przykład zegar), to nadal są animowane.
Pola edycji tekstu pozwalają po kliknięciu w nich zmieniać tekst.
Pola wyświetlania tekstu rysują tekst w formacie UTF-8 przy użyciu wewnętrznie zdefiniowanej czcionki.
A całość wykorzystuje najmniej możliwie czasu procesora.
Program bieżący integrator systemowy
Program ten składa się z serwera uruchamiania akcji pulpitu i klienta wysyłającego do niego żądania.
Program ten został sprawdzony w moim systemie i służy mi do zwykłej pracy: otwiera pliki z menedżera plików ROX-Filer (https://github.com/overcq/rox-filer) i uruchamia polecenia z menu menedżera okien Fluxbox (http://fluxbox.org/).
Plik main.cx i podstawy programu
Plik w języku C+ ma rozszerzenie nazwy: ".cx". Plik main.cx zawiera procedurę główną wykonywanego programu, która ma postać:
int
main(
int argc
, Pc argv[]
){ E_base_M( argc, argv );
E_base_W();
return 0;
}
Na początku zawartości tej procedury jest wywołanie utworzenia (zainicjowania) modułu base, a na końcu jego wyrzucenia. Mogą być też wywołania utworzenia innych modułów.
Nie trzeba (i nie powinno się) wstawiać plików nagłówkowych używanych procedur dyrektywą preprocesora #include, ponieważ jest to zapewniane przez środowisko kompilacji podsystemu OUX.
Ponadto plik main.cx musi zawierać procedurę komunikacji z procesem:
void
E_flow_Q_process_call_I_func( P data
){
}
Ostatecznie możemy wypisać "Hello World" w następujący sposób - oto zawartość main.cx:
int
main(
int argc
, Pc argv[]
){ E_base_M( argc, argv );
G_(); Gs0_( "Hello World" );
E_base_W();
return 0;
}
void
E_flow_Q_process_call_I_func( P data
){
}
Chociaż nie jest to typowy, najprostszy program w języku C+, który ma dużo większe możliwości.
Comentários