‟overcq”

Z bloga o OUX/C+

Początek programowania w OUX / C+

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”, “gui-xcb” i “tui”. Na końcu zostanie otwarty plik “main.cx” przynależny do testowego programu “ui”.

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:

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 “ui”, 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 “ui”

Program ten demonstruje podstawowe możliwości modułu “gui-xcb” oraz “tui”.

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 i uruchamia polecenia z menu menedżera okien Fluxbox.

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

Chociaż nie jest to typowy, najprostszy program w języku C+, który ma dużo większe możliwości.