Tematy specyficzne dla Euphoria d zdarzyć, stąd na zewnątrz.

Original: http://rapideuphoria.com/platform.htm

1. Wprowadzenie

Program Rapid Deployment obsługuje obecnie Euphoria na czterech różnych platformach. Inne platformy zostaną dodane w przyszłości.

Pierwsza platforma nazywa DOS32, ponieważ w zależności od systemu operacyjnego DOS, ale z procesora pracującego w trybie 32-bitowym (chronione).

Druga platforma nazywa Win32, ponieważ podstawowy system operacyjny to Microsoft Windows, w szczególności, 32-bitowa wersja systemu Windows, który jest używany w systemach Windows 95/98 / ME, jak i NT / 2000 / XP i nowszych.

Trzecia platforma jest Linux. Linux jest oparty na systemie operacyjnym UNIX. W ostatnim czasie stały się bardzo popularne na komputerach PC. Istnieje wiele dystrybutorów Linuksa, w tym Red Hat, Debian, Caldera, itp Linux można otrzymać na płycie CD za bardzo niską cenę. Linux to system operacyjny o otwartym kodzie źródłowym.

Czwarta platforma jest FreeBSD. FreeBSD jest również oparty na systemie operacyjnym UNIX. Jest bardzo popularny na serwerach internetowych. Jest to również open source.

Użytkownicy, którzy zakupili kod źródłowy Euphoria Euphoria przenieśli się do innych platform, takich jak HP Unix i Sun Unix.

Euforia na DOS32 + Win32 plik instalacyjny zawiera dwa pliki .exe.Pierwszy nazywa ex.exe. Prowadzi programy euforii na platformie DOS32.Drugi jest exw.exe. Prowadzi programy euforii na platformie Win32. Programy Euphoria, które są przeznaczone do uruchomienia na platformie Win32 mają .exw typ pliku, a programy, które są przeznaczone do uruchomienia na platformie DOS32 mają Ex typ pliku.

Euforia dla Linuksa .tar zawiera tylko exu. Prowadzi programy euforii na platformie Linux. Programy przeznaczone dla systemu Linux Euphoria lub FreeBSD posiada typ pliku .exu.

Wersja FreeBSD euforii jest zainstalowany najpierw instaluje linuksowej wersji Euphoria, a następnie zastąpienie EXU, przez wersję EXU dla FreeBSD.

Wiele programów Euphoria można uruchomić na dwa, trzy lub cztery platformy bez wszystkich zmian.Typ pliku powinien wskazać preferowaną platformą dla programu. Każdy tłumacz Euforia może spróbować uruchomić dowolny plik Euphoria, ale być może będziesz musiał podać pełną nazwę pliku, w tym rodzaju, ponieważ każdy tłumacz szuka jego własnym preferowanego typu plików (Ex, .exw lub .exu).

Czasami przekonasz się, że większość kodu będzie taki sam na wszystkich platformach, ale niektóre drobne elementy będą musiały być napisane inaczej dla każdej platformy. Korzystać z platformy () wbudowanych funkcji powiedzieć, na jakiej platformie aktualnie działa na. Należy pamiętać, że platforma () zwraca taką samą wartość (3) zarówno na Linux i FreeBSD, ponieważ te systemy są tak podobne.

2. DOS32 Platforma

Jeśli jesteś nowy w programowaniu, może chcesz zacząć ex.exe na platformie DOS32. Należy starać się zrozumieć istotny rdzeń Euphoria, przed skokiem do programowania systemu Windows GUI. Wszystkie wersje Windows (nawet XP), pozwala otworzyć okno tekstowe wierszu polecenia i uruchomić programy DOS.

Programy Euphoria uruchomić w trybie 32-bitowym (chronione) i mieć dostęp do wszystkich megabajtów pamięci na komputerze. Wiele języków programowania dla DOS ograniczyć do 16-bitowym trybie rzeczywistym. To sprawia, że można uzyskać bardziej niż 640K pamięci w tym samym czasie. Urządzenie może mieć 256 MB pamięci, ale program nie zabraknie pamięci po użyciu tylko 640K. QBasic jest jeszcze gorzej. Ogranicza Cię tylko 160K.

Programy DOS32 może odwrócić ekran na obu trybu tekst lub grafiki pikseli i Euphoria oferuje funkcji bibliotecznych dla obu trybów. Rzadko potrzeby zadzwonić DOS bezpośrednio, ale można to zrobić za pomocą dos_interrupt () rutynowe. Możesz też zajrzeć i grzebać w specjalnych miejscach pamięci w celu osiągnięcia pełnej wydajności graficznej i uzyskać dostęp do informacji o niskim poziomie systemu.

Pod DOS32 dla Windows 95 i nowszych, pliki Euphoria może mieć długie nazwy plików, a programy mogą otwierać długie pliki nazwy pliku do odczytu i zapisu, ale nie dla tworzenia nowego pliku.

Zgodnie z czystym DOS, poza systemem Windows, nie ma pliku systemu wymiany więc DOS-przedłużacz wbudowane w ex.exe będzie utworzyć dla ewentualnego wykorzystania przez program. Ten plik jest tworzony, gdy Twój program Euphoria uruchamia w systemie DOS, a zostanie usunięty, gdy program się kończy. Zaczyna jako plik 0 bajtów i rośnie tylko wtedy, gdy jest potrzebna faktyczna zamiana. Jest on tworzony w katalogu na dysku twardym, wskazywany przez zmienną środowiskową TEMP i TMP. Jeżeli żadna z tych zmiennych, które zostały ustawione, zostanie utworzony w katalogu zawierającym albo ex.exe lub swoją związanego Euphoria plik .exe. Możesz wymusić być tworzone w określonym katalogu, ustawiając zmienną środowiskową Causeway w następujący sposób:

SET CAUSEWAY = SWAP: ścieżka

gdzie ścieżka jest pełną ścieżką do katalogu. Można uniemożliwić utworzenie pliku wymiany DOS z:

SET CAUSEWAY = NOVM

Gdy nastąpi zamiana aktywności dysku, program będzie działał poprawnie, ale spowolni.Lepszym rozwiązaniem może być, aby zwolnić więcej pamięci rozszerzonej przez ograniczania wydatków na smartdrv i innych programów, które zastrzegają dużych ilości pamięci rozszerzonej dla siebie.

Gdy ilość wolnego miejsca na dysku jest mniejsza niż ilość pamięci RAM w komputerze, nie zostanie utworzony plik wymiany.

3. Platforma Win32

Euforia dla Win32 (exw.exe) ma wiele wspólnego z Euphoria dla DOS32. Z WIN32 mieć również dostęp do wszystkich pamięci na komputerze. Większość funkcje biblioteczne działają tak samo na każdej platformie. Wiele istniejących programów w trybie tekstowym DOS32 można uruchomić za pomocą EXW bez zmian. Z EXW można uruchamiać programy z linii poleceń i wyświetlania tekstu na standardzie (zwykle 25 linii x 80 kolumn) okno DOS.Okno DOS jest znany jako konsoli w terminologii Windows. Euphoria sprawia, że przejście z trybu programowania tekstu DOS32, do programowania konsoli Win32, trywialne. Możesz dodać wywołań funkcji Win32 C, a następnie, w razie potrzeby, można tworzyć prawdziwe Windows Windows GUI.

Okno konsoli zostanie utworzony automatycznie, gdy program Win32 Euphoria pierwszy wyjść coś na ekranie lub czyta z klawiatury. Możesz również zobaczyć okno konsoli, gdy czytasz standardowe wejście lub pisać na standardowe wyjście, nawet wtedy, gdy zostały one przekierowane do plików.Konsola zniknie, gdy program zakończy wykonanie, albo poprzez zaproszenie do free_console (). Jeśli jest coś, na konsoli, które chcesz, aby użytkownik, aby przeczytać, należy go poprosi i czekać na jego wejście przed zakończeniem. Aby zapobiec konsolę z szybko znikają może zawierać oświadczenie, takie jak:

Jeśli getc (0), a następnie

end if

która będzie czekać na użytkownika wprowadzić coś.

Jeśli chcesz uruchamiać programy euforii nie pojawiały się nowe okno konsoli użyj exwc.exe. Wykorzystuje bieżące okno konsoli, tak jak byłoby w przypadku programu DOS za pomocą ex.exe.

Pod Win32, długie nazwy plików są w pełni obsługiwane przez czytanie i pisanie i tworzenie.

3.1 Win32 wysokiego szczebla Programowanie

Dzięki David Cuny, Derek Parnell, Judith Evans i wielu innych, jest pakiet o nazwie Win32Lib, które można wykorzystać do tworzenia aplikacji Windows GUI w Euphoria. Jest niezwykle łatwy do nauczenia i używania, a pochodzi z dobrej dokumentacji i licznych małych przykładowych programów. Możesz pobrać Win32Lib i Judith za IDE ze strony internetowej Euphoria. Ostatnio, Andrea Cini opracowała podobny, nieco mniejszy pakiet o nazwie EuWinGUI. Jest również dostępne na naszej stronie.

3.2 Win32 niskiego poziomu Programowanie

Aby umożliwić dostęp do WIN32 na niższym poziomie, Euphoria zapewnia mechanizm uruchamiania jakiejkolwiek funkcji C w dowolnym pliku .dll Win32 API, a nawet w każdym 32-bitowym systemie Windows dll utworzenie lub ktoś inny tworzy. Istnieje również mechanizm oddzwaniania, który pozwala na procedury systemu Windows nazwać euforią. Call-grzbiety są niezbędne podczas tworzenia graficznego interfejsu użytkownika.

Aby w pełni korzystać z platformy Win32, musisz dokumentacji na 32-bitowym Windows programowania, w szczególności Win32 Application Program Interface (API), w tym struktur C zdefiniowane przez API. Istnieje duży plik WIN32.HLP (c) Microsoft, który jest dostępny z wielu narzędzi programistycznych dla systemu Windows. Istnieje wiele książek dostępnych na temat programowania Win32 dla C / C ++. Możesz dostosować większość tego, co można znaleźć w tych książkach do świata programowania Euphoria dla Win32.Dobra książka to:

Programowanie systemu Windows
Charles Petzold
Microsoft Press

Plik pomocy Win32 API systemu Windows (8 MB) można pobrać ze strony internetowej firmy Borland:
ftp://ftp.borland.com/pub/delphi/techpubs/delphi2/win32.zip

Zobacz także stronę internetową Euphoria Archiwum – „Dokumentacja“.

4. platformy Linux i FreeBSD

Euforia dla Linuksa i FreeBSD akcji Euphoria pewne cechy z Euphoria dla DOS32 i udostępniać innych funkcji z Euphoria dla Win32.

Jak z win32 i DOS32, możesz napisać tekst na konsoli lub xterm, w wielu kolorach oraz w dowolnej pozycji wiersza lub kolumny.

Podobnie jak w Win32, możesz zadzwonić procedury C w bibliotekach współdzielonych i kod C może zadzwonić do swoich procedur Euphoria.

Euforia dla Linuksa i FreeBSD nie mają zintegrowane wsparcie dla grafiki pikseli jak DOS32, ale Pete Eberlein stworzył interfejs Euphoria do SVGAlib.

Łatwy X programowania Windows GUI jest dostępna za pomocą albo EuGTK interfejs irv Mullin do biblioteki GTK GUI lub wxEuphoria opracowany przez Matt Lewis. wxEuphoria działa również w systemie Windows.

Przy przenoszeniu kodu z DOS lub Windows do Linux lub FreeBSD, zauważysz następujące różnice:

Niektóre z numerów przypisanych do 16 głównych kolorów graphics.e są różne. Jeśli korzystasz ze stałych zdefiniowanych w graphics.e nie będziesz mieć problem. Jeśli trudno Kod numerów kolorów można zobaczyć, że niebieski i czerwony zostały włączone itp

Główne kody klawiszy specjalnych, takich jak Home, End, strzałki są różne, i są pewne dodatkowe różnice po uruchomieniu pod xterm.

Klawisz Enter jest kod 10 (line-feed) w systemie Linux, gdzie na DOS / Windows to było 13 (powrót karetki).

Linux i FreeBSD użyć „/“ (slash) na ścieżkach plików. DOS / Windows używa ‚\\‘ (backslash).

Wysoko wyspecjalizowane rzeczy takie jak dos_interrupt () oczywiście nie będzie działać na systemie Linux lub FreeBSD.

Apeluje do systemu () i system_exec (), które zawierają poleceń DOS będzie oczywiście musiał być zmieniony do odpowiedniego polecenia Linux lub FreeBSD. na przykład „DEL“ staje się „rm“ i „MOVE“ staje się „mv“.

5. Interfejs z Kodeksem C (Win32, Linux, FreeBSD)

Na Win32, Linux i FreeBSD jest to możliwe do interfejsu kod Euphoria z kodem C. Program Euforia może wywołać procedury C i odczytu i zapisu zmiennych C. Procedury C można nawet nazwać („callback“) na procedury euforii.Kod C musi znajdować się w Win32 (Dynamic Link Library), pliku .dll lub Linux lub FreeBSD udostępnionej biblioteki (.so pliku). Poprzez relacje z .dll-tych i bibliotek współdzielonych, można uzyskać dostęp do pełnego interfejsu programowania w tych systemach.

Korzystanie z Euphoria do C Tłumacz, można tłumaczyć procedury euforii do C i skompilować je w pliku .dll lub .so. Możesz przekazać węgla i sekwencje euforii do tych opracowanych procedur Euphoria i odbierać dane euforii w wyniku. Przetłumaczone / opracowane procedury zwykle uruchamiane dużo szybciej niż interpretowane rutyny. Aby uzyskać więcej informacji, zapoznaj się z Translator.

5.1 Wywoływanie funkcji C

Aby wywołać funkcję C w pliku .dll lub .so należy wykonać następujące kroki:

1. Otwórz .dll lub .so plik zawierający funkcję C dzwoniąc open_dll () zawartej w euforii \ to \ dll.e.
2. Zdefiniuj funkcję C, dzwoniąc define_c_func () lub define_c_proc () w dll.e. Mówi euforii liczbę i rodzaj argumentów, jak również rodzaj wartości zwracanych.

Euforia obecnie obsługuje wszystkie typy całkowite i wskaźnik C jako argumenty i zwraca wartości. Wspiera on także argumentów zmiennoprzecinkowych i wartości zwracanych (typu C podwójne). Obecnie nie jest możliwe, aby przejść struktur C przez wartość lub otrzymać strukturę w wyniku funkcji, choć z pewnością można przekazać wskaźnik do struktury i uzyskać wskaźnik do struktury jako wartości zwracanej. Przekazywanie przez wartość struktur C rzadko wymagane dla połączeń systemu operacyjnego.

Euforia obsługuje wszystkie formy danych Euphoria – atomy i dowolnie skomplikowane sekwencje, jak argumenty przetłumaczonych / opracowanych procedur Euphoria.

3. Wywołanie funkcji C dzwoniąc c_func () lub c_proc ().

Przykład:

to dll.e

atom user32

całkowita Loadlcon, ikona

user32 = open_dll („user32.dll“)

– Nazwa procedury w user32.dll jest „LoadIconA“.

– To trwa wskaźnik i int jako argumentów,

– I zwraca int.

Loadlcon = define_c_func (user32 „LoadIconA“,

{C_POINTER, C_INT}, C_INT)

Ikona = c_func (Loadlcon, {NULL, IDI_APPLICATION})

Zobacz library.doc – Wywoływanie funkcji C opisy c_func (), c_proc (), define_c_func (), define_c_proc (), open_dll () itd. Zobacz demo \ win32 lub demo \ linux na przykład programów.

W systemie Windows znajduje się więcej niż jeden C konwencji wywołania. API systemu Windows wszystkie procedury stosują konwencję __stdcall. Większość kompilatory C mają jednak __cdecl jako domyślnych. __cdecl umożliwia zmienna liczba argumentów, aby być przekazywane. Euforia zakłada __stdcall, ale jeśli trzeba zadzwonić rutynowych C, który używa __cdecl, można umieścić znak „+“ na początku nazwy w rutynowej define_c_proc () i define_c_func (). W powyższym przykładzie, to masz „+ LoadIconA“, zamiast „LoadIconA“.

Można sprawdzić plik .dll, klikając prawym przyciskiem myszy na niego i wybierając „Szybki podgląd“ (jeśli jest w systemie). Zobaczysz listę wszystkich procedur C, że wywóz .dll.

Aby dowiedzieć się, które .dll plik zawiera określoną funkcję Win32 C, uruchomić euforia \ demo \ win32 \ dsearch.exw.

5.2 Dostęp do zmiennych C

Możesz uzyskać adres zmiennej C przy użyciu define_c_var (). Następnie można użyć poke () i zerknąć (), aby uzyskać dostęp do wartości zmiennej.

5.3 Dostęp do struktur C

Wiele procedur C wymagają, aby przekazać wskaźniki do struktur. Można symulować struktur C za pomocą przydzielonych bloków pamięci.Adres zwrócony przez przydzielić () mogą być przekazywane, jak gdyby był wskaźnik C.

Możesz czytać i pisać członków struktur C przy użyciu okiem Kapsa () i (), lub peek4u (), peek4s () i poke4 (). Możesz przydzielić miejsca dla konstrukcji z wykorzystaniem alokacji (). Musisz obliczyć przesunięcie członka struktury C. Zazwyczaj jest to łatwe, ponieważ wszystko w C, która musi 4 bajtów będzie przypisana 4 bajtów w strukturze. Zatem C INT, char, unsigned int jest męskie, wskaźniki do niczego itd będzie podjąć wszystkie 4 bajty. Jeśli deklaracja C wygląda następująco:

// Ostrzeżenie kod C do przodu!

struct przykładem {
int; // Przesunięcie 0
char * b; // Przesunięcie 4
char c; // Przesunięcie 8
długo, d; // Przesunięcie 12
};

Aby przydzielić miejsca na „przykład struct“ musisz:

atom p

p = przydzielić (16) – rozmiar „struct przykład“

Adres, który można uzyskać z przydzielić () jest zawsze co najmniej 4 bajty. Jest to przydatne, ponieważ struktury Win32 mają rozpocząć się na granicy 4 bajtów. Pola w strukturze C, które są 4-bajtów lub więcej wielkości musi rozpocząć się na granicy 4 bajtów pamięci. Pola 2 bajtowe musi rozpocząć się na granicy 2 bajtów. Aby to osiągnąć może trzeba zostawić małe luki w strukturze. W praktyce nie jest to trudne do wyrównania większość struktur od 90% pól są wskaźnikami 4-bajtowych lub 4-bajtowych liczb całkowitych.

Możesz ustawić pola za pomocą coś takiego:

poke4 (p + 0)

poke4 (p + 4, b)

poke4 (p + 8, c)

poke4 (p +12, d)

Możesz przeczytać pole z czymś takim:

d = peek4 (p + 12)

Wskazówka:
Dla czytelności, tworzą stałe euforii do przesunięć w terenie. Patrz przykład poniżej.

Przykład:

stała RECT_LEFT = 0,

RECT_TOP = 4,

RECT_RIGHT = 8,

RECT_BOTTOM = 12

atom rect

rect = przydzielić (16)

poke4 (rect + RECT_LEFT, 10)

poke4 (rect + RECT_TOP, 20)

poke4 (rect + RECT_RIGHT, 90)

poke4 (rect + RECT_BOTTOM, 100)

– Podał rect jako wskaźnik do struktury C

– HWnd jest „obsłużyć“ do okna

jeśli nie c_func (InvalidateRect, {hWnd, rect, 1}), a następnie

puts (2, „InvalidateRect udało \ n“)

end if

Kod Euphoria, że dostęp do procedur C i struktur danych może wyglądać nieco brzydki, ale to zazwyczaj stanowią tylko niewielką część swojego programu, zwłaszcza jeśli używasz Win32Lib, EuWinGUI lub biblioteki irv Mullin X Windows. Większość programu będzie napisany w czystym Euphoria, który daje dużą przewagę nad tymi, zmuszony do kodu w C

5.4 Call-tyłem do swoich procedur Euphoria

Po utworzeniu okna, system operacyjny Windows będzie musiała odwołać swoją rutynę Euphoria. To jest dziwne pojęcie dla programistów DOS, którzy są wykorzystywane do wywoływania procedur systemu operacyjnego, ale nie są przyzwyczajeni do systemu operacyjnego nazywają swoją rutynę. Aby to ustawić, należy uzyskać 32-bitowy adres do swojej rutyny „call-back“ i dać go do systemu Windows. Na przykład (pobierane z demo \ win32 \ window.exw):

całkowita id

atom WndProcAddress

id = routine_id („WndProc“)

WndProcAddress = call_back (id)

routine_id () jednoznacznie identyfikuje Euphoria procedurę lub funkcję wracając małą wartość całkowitą. Wartość ta może być później użyte do wywołania procedury. Można również użyć go jako argument do funkcji call_back ().

W powyższym przykładzie, 32-bitowy adres oddzwaniania, WndProcAddress, mogą być przechowywane w strukturze C i przekazywane do systemu Windows poprzez RegisterClass () funkcji C API. Daje systemu Windows możliwość wywoływania rutynowe Euphoria, WndProc (), gdy użytkownik wykonuje działania na pewnej klasy okna. Działania obejmują kliknięcie myszy, wpisując klucz, zmiany rozmiaru okna itp Zobacz window.exw programu demo dla całej historii.

Uwaga:
To jest możliwe, aby uzyskać adres oddzwonienia do rutyny Euphoria, który spełnia następujące warunki:

rutynowe musi być funkcja, procedura nie
musi mieć od 0 do 9 parametrów
Wszystkie parametry powinny być typu atomu (lub całkowite itp), nie sekwencja
Zwracana wartość powinna być całkowita wartość aż do 32-bitów w rozmiarze

Można utworzyć tyle adresów call-back, jak chcesz, ale nie należy zadzwonić call_back () dla tych samych Euphoria rutynowych wiele razy – każdy adres oddzwaniania utworzenie wymaga małego bloku pamięci.

Wartości, które są przekazywane do rutynowych Euphoria może być żadnych 32-bitowych bez znaku węgla, czyli nie-ujemne. Twój program może wybrać do interpretacji dużych liczb dodatnich, jak negatywny, jeśli jest to pożądane. Na przykład, jeśli procedura C próbował przekazać Państwu -1, wydaje się, jako hex FFFFFFFF. Jeśli wartość jest przekazywana, że nie pasuje do typu zostały wybrane dla danego parametru, może wystąpić błąd wyboru typu Euphoria (w zależności od z / bez type_check itp) Nie będzie błąd, jeśli uznać wszystkie parametry jak atom.

Normalnie, jak w przypadku WndProc () powyżej, Windows inicjuje te połączeń zwrotnych do swoich procedur. Możliwe jest również dla rutynowych C w każdym .dll do wybrania jednego z rutyny Euphoria. Po prostu trzeba zadeklarować procedurę C prawidłowo, i przekazać mu adres oddzwonienia.

Oto przykład procedury Watcom C, które ma swój adres oddzwonienia jako jedyny parametr, a następnie zwraca się z 3-parametru Euphoria rutynę:

/ * 1-parametr C rutynowe, że dzwonisz z Euphoria * /
test1 EXPORT (niepodpisany APIENTRY
LRESULT oddzwanianie (* eu_callback) (unsigned,
bez znaku b,
niepodpisane c))
{
/ * Twój 3-parametr Euphoria rutynowe nazywa się tutaj
poprzez wskaźnik eu_callback * /
powrotu (* eu_callback) (111, 222, 333);
}

Deklaracja C powyżej deklaruje test1 jako zewnętrznie na żądanie C rutynowe, które ma jeden parametr.Jeden parametr jest wskaźnikiem do funkcji, które ma 3 parametry niepodpisane – czyli rutynowych Euphoria.

W Watcom C „CALLBACK“ jest taka sama jak „__stdcall“. Jest to konwencja powołaniem, który jest używany do wywołania WIN32 procedur API, a wskaźnik C do rutynowych Euphoria powinny być zgłoszone w ten sposób zbyt, albo dostaniesz błąd podczas rutynowych Euphoria próbuje wrócić do DLL.

Jeśli potrzebujesz rutynowych Euphoria nazywać w konwencji __cdecl, trzeba kodować wezwanie do call_back () jako:

myroutineaddr = call_back ({‚+‘, id})

Znak plus i szelki wskazują konwencję __cdecl.Prosta sprawa, bez szelki, jest __stdcall.

W powyższym przykładzie, rutynowe Euforia będą przekazywane te trzy wartości 111, 222 i 333 jako argumenty. Rutynowe zwróci wartość test1. Wartość ta zostanie niezwłocznie zwrócone do osoby dzwoniącej z test1 (które mogłyby być w innym miejscu w programie Euphoria).

Adres oddzwaniania może być przekazany do funkcji sygnału Linux lub FreeBSD (), aby określić procedurę Euphoria obsługiwać różne sygnały (np SIGTERM). Może być również przekazana do procedury C, takie jak qsort () w celu określenia funkcji porównania euforii.

Comments are closed.