[#1] [C, OS2.x+] Wlasny IDCMP
Czy da sie stworzyc wlasny sygnal IDCMP, np: IDCMP_CUSTOM, tak aby mial wlasna klase (Class) i kod (Code)?
Chcialbym go wyslac do okna i dobierac przez GetMsg();
[#2] Re: [C, OS2.x+] Wlasny IDCMP

@Phibrizzo, post #1

Wszystkie bity na klasy masz już chyba zajęte. Nie prościej stworzyć sobie swój MsgPort, po czym czekać na oba (swój + port okna) za pomocą Wait()? Wtedy możesz przesłać cokolwiek.
1
[#3] Re: [C, OS2.x+] Wlasny IDCMP

@Krashan, post #2

Moze i prosciej. Poprostu nie wiedzialem jak to zrobic.
W sumie to do tej pory nie wiem jak to ugryzc.
[#4] Re: [C, OS2.x+] Wlasny IDCMP

@Phibrizzo, post #3

Jak dobrze zrozumiałem Krashana, to plan działania powinien być taki (poprawcie mnie jeśli się mylę).

1. Tworzysz MsgPort (CreateMsgPort)
2. Wkładasz coś co chcesz za pomocą PutMsg wypełniając strukturę Message (jak dobrze rozumiem, tam tworzysz drugi MsgPort dla nadawcy, coby on też miał szansę się dowiedzieć że wiadomość została odebrana i coś można z nią zrobić (zwolnić zasoby) )
3. Używasz Wait (na dany sygnał z MsgPort)
4. odbierasz za pomocą GetMsg
5. wysyłasz do nadawcy za pomocą ReplyMsg.


Edit: Jest taka książka Amiga System Programmer's Guide i tam od strony 247 jest o komunikacji pomiędzy taskami i można sobie poczytać.

Ostatnia aktualizacja: 25.08.2021 23:03:39 przez asman
[#5] Re: [C, OS2.x+] Wlasny IDCMP

@asman, post #4

@Phibrizzo

Tak, można mieć własne IDCMP.

Trzeba zrobić własną klasę gadżetu BOOPSI, które będzie wysyłać notyfikacje.

Obadaj IDCMP_IDCMPUPDATE. Żeby wysyłać notyfikacje do okna należy ustawić atrybut gadżetu ICA_TARGET na ICTARGET_IDCMP.

W wiadomości IDCMP_IDCMPUPDATE pod msg->IAddress dostajesz listę tagów, które przekazywane są za pomocą wiadomości OM_NOTIFY/OM_UPDATE gadżetu. Możesz w ten sposób przekazywać informacje o zmianie atrybutów swojego gadżetu.

Za pomocą ICA_MAP można mapować atrybuty na inne.

Można też ustalić własny msg->Code takiej wiadomości mapując wybrany atrybut na ICSPECIAL_CODE - wówczas dostaniesz go w tym polu.

Atrybuty ustalasz samodzielnie dla swojej klasy BOOPSI.

Ostatnia aktualizacja: 26.08.2021 03:21:46 przez Hexmage960
[#6] Re: [C, OS2.x+] Wlasny IDCMP

@Hexmage960, post #5

Wlasciwie to sprawa sie wyjasnila dzieki jednemu z artykulow Asmana.
Calkowicie zapomnialem o nim. Jest tam wszystko czego mi potrzeba.
[#7] Re: [C, OS2.x+] Wlasny IDCMP

@Phibrizzo, post #6

Rozumiem, jasne. Czy chodzi o omawiane rozwiązanie z własnym MsgPortem?
[#8] Re: [C, OS2.x+] Wlasny IDCMP

@Hexmage960, post #7

Glownie to chodzilo o pogodzenie przychodzacych sygnalow dla okna z klawiatury z tymi ktore przychodza z portu joysticka.
Nie wyrazielm sie dokladnie w pierwszym poscie o co mi chodzi, ale tylko dlatego ze nie wiedzialem absolutnie jak sie za to zabrac.
[#9] Re: [C, OS2.x+] Wlasny IDCMP

@Phibrizzo, post #8

OK. Sam używam wielu sygnałów w mojej grze. Również m.in. sygnału z joysticka.

Robię to w następujący sposób: Zbieram sygnały i używam komendy Wait(). Następnie reaguję na poszczególne sygnały.

enum
{
	WINDOW,
	JOYSTICK,
	SIGNALS
};

ULONG signals[SIGNALS], total;

total = signals[WINDOW] = 1L << userPort->mp_SigBit;
total |= signals[JOYSTICK] = 1L << joyPort->mp_SigBit;

while (!done)
{
	ULONG result = Wait(total);


	if (result & signals[WINDOW])
	{
		...
	}

	if (result & signals[JOYSTICK])
	{
		...
	}
}
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