kategoria: C++
[#1] Kurs programowania AmigaOS i C - POMOCY :)
Witam, zainteresował mnie artykuł "Nasza pierwsza gra - kurs programowania AmigaOS i C - część 1" i postanowiłem napisać swoją pierwszą (oczywiście prostą) grę w oparciu o w/w poradnik. Mam jednak problemy niestety już na samym początku..... z kompilacją VBCC (i punktami od 1-4 poradnika) - może to dlatego, że używam Windows 7 64-bit ???

Wszystko staram się robić słowo w słowo zgodnie z poradnikiem aby nie generować dodatkowych problemów ale i tak podejrzewam, że będę miał więcej problemów z tym tematem, w związku z tym chciałbym zapytać czy mogę liczyć na jakąś pomoc szanownych Amigowców ? :)

Może na początek.... czy jest możliwość podesłania mi gotowego archiwum z katalogiem VBCC i wszystkimi plikami w środku - abym mógł pominąć punkty 1-4 ? Napisałem oczywiście w tej sprawie w pierwszej kolejności do autora w/w artykułu (kolega asman), ale niestety chyba jest mocno zajęty bo od kilku dni nie odpisał, a mi troszkę zależy na czasie.
Pozdrawiam serdecznie.
[#2] Re: Kurs programowania AmigaOS i C - POMOCY :)

@AmigaMax, post #1

Wysłałem Ci na mejla pare dni temu i być może masz w spamie. Dla pewności prześle jeszcze raz (tema VBCC).
[#3] Re: Kurs programowania AmigaOS i C - POMOCY :)

@asman, post #2

Daj znak na mejla czy doszło. Ewentualnie daj też znaka na mejla jakby nie doszło to też coś wymyślimy.

Ostatnia aktualizacja: 11.08.2014 23:25:52 przez asman
[#4] Re: Kurs programowania AmigaOS i C - POMOCY :)

@asman, post #3

Udało mi się nawiązać kontakt z szanownym Asmanem (dziękuję za pliki) więc chwilowo temat zawieszam ale tylko zawieszam. Nie wiadomo czy jeszcze forumowicze nie będą potrzebni gdyż nikt nie jest "wszystko-wiedzący" :)
[#5] Re: Kurs programowania AmigaOS i C - POMOCY :)

@asman, post #2

Tak z ciekawości, jaką masz wersję VBCC? Kiedyś prosiłem Ciebie o kopię (ponad rok temu) i nie wiem, czy wyszło coś nowszego, niż wtedy dostałem.
[#6] Re: Kurs programowania AmigaOS i C - POMOCY :)

@sanjyuubi, post #5

Najnowszą wersją jest vbcc 0.9b patch 1 z 31.01.2012.

Natomiast, najnowszy vasm to 1.7 z 02.07.2014, jak wiadomo vbcc używa pod spodem vasm'a. Jest sporo poprawek.


Ostatnia aktualizacja: 12.08.2014 21:43:36 przez strim_
[#7] Re: Kurs programowania AmigaOS i C - POMOCY :)

@strim_, post #6

Ojoj to ja mam staruszka vasm 1.5.
[#8] Re: Kurs programowania AmigaOS i C - POMOCY :)

@strim_, post #6

A jest to dostępne w łatwej do użycia formie (wersja od asmana wymagała wykonania pliku setup_paths.bat i to wszystko)? A może jakiś gotowiec mógłby leżeć na serwerze ppa (czy prawa autorskie zabraniają?)?
[#9] Re: Kurs programowania AmigaOS i C - POMOCY :)

@sanjyuubi, post #8

Pozwolë sobie wykorzystaę ten wâtek do zadawania pytaď zwiâzanych z programowaniem w C i AmigaOS.

Na poczatek mam taki problem. Jak uűyjë w programie gadget SLIDER_KIND z gadtools to nie widzë suwaka do przesuwania. On jest ale nie widoczny. Widoczny jest tylko jak sië na niego kliknie. Po puszczeniu przycisku myszki znowu znika - ma kolor tîa (teű dziwny bo pomaraďczowy). Ponej czëôę kodu dotyczâca tego gadgetu.

static struct NewGadget ngSSpeed = {59, 173, 84, 16, "Speed:", NULL, GID_Speed, 0, NULL, NULL};

ngSSpeed.ng_LeftEdge += MyWindow->BorderLeft;
ngSSpeed.ng_TopEdge += MyWindow->BorderTop;
ngSSpeed.ng_TextAttr = &Topaz8;
ngSSpeed.ng_VisualInfo = VI;
gSSpeed = (struct Gadget *)CreateGadget(SLIDER_KIND, gILAddr, &ngSSpeed,
GA_Disabled, FALSE,
GA_RelVerify, TRUE,
PGA_Freedom, LORIENT_HORIZ,
GTSL_Min, 0,
GTSL_Max, 28,
GTSL_Level, 0,
GTSL_LevelPlace, PLACETEXT_LEFT,
GTSL_LevelFormat, (ULONG)"%ld ",
GTSL_MaxLevelLen, 0,
GTSL_Justification, GTJ_LEFT,
TAG_END);


Drugi problem to jak podmieniaę tekst na juű istniejâcych przyciskach BUTTON_KIND z gadtools.

I trzecia rzecz. Jak program moűe odczytaę nazwë swojego pliku wykonywalnego i ôcieűkë do katalogu w którym sië znajude. Znalaîem funkcje dosu: GetCurrentDir, GetProgramName i GetProgramDir ale dziaîajâ mi poprawnie tylko jak swój progam uruchomië z CLI. Jak uruchamiam z ikony to nic nie zwracajâ.
[#10] Re: Kurs programowania AmigaOS i C - POMOCY :)

@dolek, post #9

Ad. 2.
By podmienić tekst pewnie trzeba wywołać metodę do ustawiania atrybutów (pewnie: SetAttrsA) i odrysować gadżety (pewnie RefreshGadgets)

Ad. 3.
Jest coś takiego jak ProgDir: - ścieżka do katalogu uruchomionego programu.

Ostatnia aktualizacja: 25.02.2015 09:06:17 przez tygrysekHD
[#11] Re: Kurs programowania AmigaOS i C - POMOCY :)

@tygrysekHD, post #10

Ad.2.
Próbowałem to zrobić za pomocą SetAttrs ale później nie odświeżałem więc pewnie dlatego mi nie chciało działać.

Ad.3.
A gdzie tego szukać, jak się do tego dobrać? To jest funkcja jakiejś biblioteki, czy element jakiejś struktury?
[#12] Re: Kurs programowania AmigaOS i C - POMOCY :)

@dolek, post #11

PROGDIR: używa się bezpośrednio w ścieżce np. load "PROGDIR:plik". Jak chcesz dojść do rzeczywistej nazwy to jest structura Process->Homedir.

Ostatnia aktualizacja: 25.02.2015 09:43:18 przez cholok
[#13] Re: Kurs programowania AmigaOS i C - POMOCY :)

@dolek, post #9

Nie chce mi się myśleć, ale na dzień dobry podajesz dużo niepotrzebnych i domyślnie ustawianych tagów:
GA_Disabled, FALSE,
GTSL_Level, 0,
GTSL_LevelFormat, (ULONG)"%ld ",

Po drugie ustawiasz MaxLevelLen na 0, a jednocześnie podajesz tagi justujące tekst.
[#14] Re: Kurs programowania AmigaOS i C - POMOCY :)

@cholok, post #13

Ten Process->Homedir zwróci mi tylko ścieżkę do katalogu z którego został uruchomiony program czy całość tzn. razem z samą nazwą programu? Zaznaczam, że potrzebuję uzyskać pełną ścieżkę programu uruchomionego z ikony pod WB, wraz z jego nazwą. Przy uruchamianiu z CLI nie ma problemu, tu mi działa GetProgramName i GetCurrentDirName.

Wydaje mi się, że podawanie domyślnie ustawionych tagów nie powinno mieć znaczenia.
MaxLevelLen ustawiłem na 0 bo nie chcę żeby mi się wyświetlało to pole, potrzebuję sam suwak z nazwą.
[#15] Re: Kurs programowania AmigaOS i C - POMOCY :)

@dolek, post #9

Czy naprawdę nie ma na Amie przeglądarki co wstawia tekst w Latin2 ?
[#16] Re: Kurs programowania AmigaOS i C - POMOCY :)

@dolek, post #9

OK te problemy jakos rozwiazalem.

Ad.1. Winne byly tagi WA_DetailPen i WA_BlockPen podawne przy otwrciu okna. Za rada autora jednej ksiazki podawalem wartosci -1, dzieki czemu intuition mialo samo dobrac odpowiednie kolory ale tak nie bylo. Najlepiej jako wartosci tych tagow podac odpowiednio DETAILPEN i BLOCKPEN albo w ogole ich nie podawac.

Ad.2. Wyglada na to, ze jedyna metoda jest odlaczenie gadgetu przycisku od okna i jego ponowne utworzenie z juz nowa nazwa i ponowne dodanie dookna.

Ad.3. Robie to tak:
int main(int argc, char **argv)
{
if (argc)
{
// nazwa pliku programu uruchomionego z CLI
GetProgramName(&AppName, 32);
} else {
// nazwa pliku programu uruchomionego z ikony z workbencha
wbmsg = (struct WBStartup *)argv;
wbarg = wbmsg->sm_ArgList;
strcpy((char *)&AppName, wbarg->wa_Name);
}
// sciezka do pliku wykonywanego (dla CLI i WB)
stLck = (struct Lock *)GetProgramDir();
NameFromLock(stLck, AppPath, 256);

Kolejny problem mam taki. Jesli uzyjemy SERF_SHARED przy konfiguracji portu szeregowego to moze z niego kozystac wiele programow jednoczesnie (wiele instancji tego samego programu) no i z wysylaniem danych nie mam problemu ale jak zrobic, zeby dane odebrane byly dostepne przez wszyskie uruchomione instancje mojego programu. Dopoki uruchomie tylko jedna instancje programu to mi wszystko dziala OK ale jak uruchomie kolejne to odbior danych sie sypie. Dane odbieraja wszytkie programy na zasadzie kto pierwszy ten lepszy i ile sie uda wyrwac pozostalym przez co zaden program nie dostaje kompletnego pakietu tylko jakies poszatkowane fragmenty.
Czy da sie tak zrobic, zeby dane odebrane przez port szeregowy byly dostepne w calosci dla wszystkich uruchomionych instancji mojego programu?
[#17] Re: Kurs programowania AmigaOS i C - POMOCY :)

@dolek, post #16

Nie jestem ekspertem, ba nawet kabanem nie jestem w tym temacie, ale wydaje mi się, że trzeba by użyć komunikatów. Byłby jeden port do którego robimy PutMsg a wszystkie instancje by czekały i sprawdzały ten port i ewentualnie odbierały komunikat. Ale to tylko taka idea, niekoniecznie poprawna.
[#18] Re: Kurs programowania AmigaOS i C - POMOCY :)

@asman, post #17

Dzieki za odzew.

Nie do konca rozumie co masz na mysli. Czy chodzi o to zeby napisac osobny program do odbioru danych z portu szeregowego ktory bedzie rozsylal komunikaty do innych programow z odebranymi danymi?

Generalnie w swoim programie uzywam komunikatow, a wyglada to tak:

winSignal = 1L << MyWindow->UserPort->mp_SigBit;
serSignal = 1L << SerialRMP->mp_SigBit;
appSignals = winSignal | serSignal;

while (!bLoopEnd)
{
tmpSignal = Wait(appSignals);
if (tmpSignal & winSignal) bLoopEnd = ProcessWinSig();
if (tmpSignal & serSignal) ProcessSerSig();
}

Jesli chodzi o odbior samych danych to wyglada to tak, ze:
1. Wysylam komende SendIO z parmetrem CMD_READ asynchronicznego odbioru 3 bajtow (minimalna dlugosc pakietu danych jakie przychodza do mojego programu) no i oczekuje na informacje z systemu, ze zostaly odebrane te 3 bajty.
2. Odczekuje chwile na ewentualne pozostale dane (maksymalnie 6 bajtow) za pomoca Delay(1).
3. Sprawdzam czy i ile bajtow jest do odebrania za pomoca DoIO z parametrem SDCMD_QUERY.
4. Jesli sa dostepne to odbieram pozostale dane za pomoca DoIO z parametrem CMD_READ.
5. Wracam do punktu 1.

Efekt jest taki, ze jak przyjdzie pakiet 9 bajtowy a mam uruchomione 3 instancje mojego programu to pierwsza, ktora dostanie komunikat o odebraniu przez port 3 bajtow odbierze bajty 1-3, druga 4-6 a trzecia 7-9.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem