API2

Systemy amigowe potrzebują natychmiast nowych programów. Porty nie są rozwiązaniem gdyż nie współpracują dobrze z systemem operacyjnym i nie są zgodne z jego filozofią. Przy ograniczonej liczbie programistów, potrzebne jest rozwiązanie, które uczyni ich pracę wydajniejszą. AmigaOS gdy powstawał był systemem nowoczesnym, łatwym do programowania, od tamtych czasów dokonał się jednak postęp, obecnie pewne rzeczy można zrobić prościej i szybciej.

Celem projektu API2 jest dostarczenie tych nowoczesnych rozwiązań amigowym programistom, umożliwi im to szybsze tworzenie lepszych i bardziej zaawansowanych programów. Przy okazji może uda się też zachęcić do programowania na systemy amigowe ludzi z poza środowiska.

Nic nie przemawia tak dobrze jak przykład. Oba poniższe programy robią dokładnie to samo, gdy minie jedna sekunda wyświetlają napis "Time is up!". Pierwszy jest napisany z użyciem API2, drugi wykorzystuje tylko standardowe funkcje AmigaOS.

#include <api2/api2.h>
#include <stdio.h>

int main()
{
    var application = AFCreateApplication();
    var timer = AFCreateTimer();
    
    AFAddEventHandlerFunction(timer, AFTimeIsUp, NULL,
        func (void, () { printf("Time is up!\n"); }));
        
    AFSetTimeout(timer, 1000);
    AFSetEnabled(timer, true);   
    AFRunMainLoop(application);
    
    return 0;
}
#include <exec/types.h>
#include <devices/timer.h>
#include <clib/exec_protos.h>
#include <clib/alib_protos.h>
#include <stdio.h>
#include <stdbool.h>

int main()
{
    struct timerequest *timeRequest;
    struct MsgPort *timerMsgPort;
    struct Message *timerMessage;
    int result = 0;

    if ((timerMsgPort = CreatePort(0, 0)))
    {
        if ((timeRequest = (struct timerequest*) CreateExtIO
            (timerMsgPort, sizeof(struct timerequest))))
        {
            if (!OpenDevice( TIMERNAME, UNIT_MICROHZ,
                (struct IORequest*) timeRequest, 0L))
            {
                timeRequest->tr_node.io_Command
                    = TR_ADDREQUEST;                
                timeRequest->tr_time.tv_secs  = 1;
                timeRequest->tr_time.tv_micro = 0;

                SendIO((struct IORequest*) timeRequest);
                
                while (true)
                {
                    WaitPort(timerMsgPort);
                    
                    if ((timerMessage = GetMsg(timerMsgPort)))
                    {
                        printf("Time is up!\n");
                        
                        ReplyMsg(timerMessage);
                        break;
                    }
                }

                CloseDevice((struct IORequest*) timeRequest);
            }
            else
            {
                printf("Error: could not OpenDevice\n");
                result = 1;
            }

            DeleteExtIO((struct IORequest*) timeRequest);
        }
        else
        {
            printf("Error: could not create IORequest\n");
            result = 1;
        }

        DeletePort(timerMsgPort);
    }
    else
    {
        printf("Error: could not CreatePort\n");
        result = 1;
    }
    
    return result;
}

Program używający API2 jest kilka razy krótszy, czytelniejszy, dużo trudniej zrobić w nim błąd i może go, bez problemu, napisać nawet początkujący programista, ponadto aby zrozumieć co robi nie trzeba nawet patrzeć do dokumentacji.

API2 to nie tylko łatwiejsze i szybsze programowanie. To także dużo nowych komponentów wspomagających realizację różnych aspektów działania aplikacji. Na przykład animacji interfejsu użytkownika:

screenshots/Animation.gif

FAQ

  1. Czy API2 jest przeznaczone dla AmigaOS3.x/AROS/MorphOS?

    API2 jest od samego początku projektowane i pisane z myślą o wszystkich amisystemach.

  2. Czy programy w API2 nie będą dużo większe od dotychczasowych programów?

    Jak pokazuje przedstawiony powyżej przykład, programy używające API2 nie tylko nie są większe, są wręcz dużo mniejsze.

  3. Czy programy używające API2 nie będą wolniejsze od dotychczasowych programów?

    Podczas projektowania i pisania API2 położono duży nacisk na to, aby jego komponenty działały szybciej niż inne rozwiązania tego typu przeznaczone dla amisystemów.

  4. Czy ten sam program używający API2 będę mógł uruchomić na wszystkich systemach amigowych?

    API2 zapewnia kompatybilność na poziomie kodów źródłowych między wszystkimi amisystemami. Wystarczy więc przekompilować aplikację dla danego systemu.

  5. Co już jest gotowe?

    Gotowe jest to co najważniejsze i najbardziej żmudne, czyli podstawowe funkcjonalności, na których bazują wszystkie inne. Bardzo zaawansowane są też niektóre komponenty interfejsu użytkownika i inne niewizualne, a stanowiące istotne elementy podczas budowy aplikacji.

  6. Czy naprawdę AmigaOS3.x jest traktowany w tym projekcie jako tak samo ważny jak systemy NG?

    Tak.

  7. Kiedy API2 będzie gotowe?

    Aby uzyskać podstawową planowaną funkcjonalność potrzeba około pół roku pracy jednej osoby na cały etat.

  8. Jak mogę wesprzeć prace nad API2?

    Prowadzimy kampanie crowdfundingową na Patreonie i tam można wspierać rozwój projektu. Jeżeli chcesz to zrobić to kliknij tutaj.


Aby prace przebiegały sprawnie i szybko, a czas między kolejnymi wydaniami był mierzony w miesiącach, a nie latach, co najmniej jedna osoba musi pracować nad tym projektem na pełen etat. By było to możliwe potrzebne jest finansowanie, które pokryje koszty pensji, ZUSu i podatków. Jeżeli chcesz aby ten projekt się rozwijał wesprzyj go na Patreonie

Jest też inna możliwość. Jeżeli masz projekt softwarowy, którego wykonanie chcesz zlecić, możesz powierzyć jego realizację firmie TRIFLE, która część zysków zainwestuje w rozwój API2.


Amiga i AmigaOS są zastrzeżonymi znakami towarowymi lub znakami towarowymi ich właściciela.