kategorie: ANSI C, MUI
[#1] Jak zrobić poprawie Hooka do listview MUI
Ok, nie wiem czy to ja cos robie złe, bo ten sam kod działa poprawnie na OS 3.2 i 3.9. A wiec, mam Hooka do listview, którego używam prodefiniowanego z nagłówków SDI.

struct Tune {
  STRPTR tu_Name;
  STRPTR tu_BitRate;
  STRPTR tu_Codec;
  STRPTR tu_Country;
  STRPTR tu_Description;
};
HOOKPROTONH(DisplayCode, VOID, char **array, struct Tune *tune) {
  if (tune != NULL) {
    *array++ = tune->tu_Name;
    *array++ = tune->tu_Codec;
    *array++ = tune->tu_BitRate;
    *array = tune->tu_Country;
  } else {
    // Column headers
    *array++ = "\033c\033uName";
    *array++ = "\033c\033uCodec";
    *array++ = "\033c\033uBitRate";
    *array = "\033c\033uCountry";
  }
}
MakeStaticHook(DisplayHook, DisplayCode);


Tak go dodaje do Listview:
MUIA_List_Format,
  "BAR MIW=70 P=\033l, BAR MIW=10 P=\033c, BAR MIW=10 P=\033c, BAR MIW=10 "
  "P=\033c",
  MUIA_List_DisplayHook, &DisplayHook,


A tak dodaje do listy dane:
tune1.tu_Name = "Chillout Radio";
 tune1.tu_BitRate = "128bits";
 tune1.tu_Codec = "MP3";
 tune1.tu_Country = "UK - United Kingdom";
 tune1.tu_Description =  "Chillout Radio description";
 DoMethod(objApp->LSV_Tune_List, MUIM_List_Clear);
 set(objApp->LSV_Tune_List, MUIA_List_Quiet, TRUE);
 DoMethod(objApp->LSV_Tune_List, MUIM_List_InsertSingle, &tune1, MUIV_List_Insert_Bottom);



Ten sam kod działa ok na 3.2 i 3.9 z MUI 3.8. Ale na czystym 3.1 z zainstalowanym MUI lista jest zupełnie czysta. Pytanie czy cos zle robie. Nie mogę znaleźć zbyt wiele przykładów na GCC, jedyne co znałem używają listy w identyczny sposób.


Reszta kodu jest tutaj.

Ostatnia aktualizacja: 13.12.2024 18:51:32 przez sand
[#2] Re: Jak zrobić poprawie Hooka do listview MUI

@sand, post #1

Czy ktoś mógłby mi to sprawdzić na ROM 3.1 na a1200. Nie wiem czy to problem mojego romu czy emulacja. Na A4000 z 3.1 działa wszystko ok, na A1200 z romem 3.1 po wciśnięciu Find Tunes pokazuje na liście krzaki. Niestety nie mam 3.1 do swojej A1200 :( Tu jest link
[#3] Re: Jak zrobić poprawie Hooka do listview MUI

@sand, post #2

Sprawdzałem na WinUAE. Działa jak jest Z3 fast mem, nie działa jak nie ma.
[#4] Re: Jak zrobić poprawie Hooka do listview MUI

@sand, post #2

Niestety nie mam 3.1 do swojej A1200


Zawsze możesz remapowac programowo.
[wyróżniony] [#5] Re: Jak zrobić poprawie Hooka do listview MUI

@sand, post #1

z pewną taką nieśmiałością przypomnę tylko o hookach konstrukcyjnych i destrukcyjnych
1
[#6] Re: Jak zrobić poprawie Hooka do listview MUI

@cholok, post #3

Troche dziwne, chyba ze program wymaga bardzo duzej ilosci fastu.
A na 8MB fast Z2 i na 8MB fast Z3 dziala czy nie?
Ewentualnie moze program alokuje jakis specyficzny typ fastu, ktory wystepuje tylko w obszarze Z3?
[#7] Re: Jak zrobić poprawie Hooka do listview MUI

@michal_zukowski, post #5

Jeżeli wyświetlane struktury Tune oraz stringi, do których adresy są w tych strukturach, istnieją przez cały czas istnienia obiektu List, to można tych hooków nie używać i powinno to działać.

Problem, moim zdaniem, tkwi gdzie indziej, w app.c/387 mamy ustawiony dla listy hook MUIV_List_ConstructHook_String, co jest błędem. Ten hook traktuje adres przekazywany do MUIM_List_Insert jako string i usiłuje wykonać jego kopię. Czyli jest próba kopiowania struktury Tune jako stringa. To tłumaczy dlaczego jeżeli w systemie jest pamięć z obszaru Z3, to "działa". Bo jak jest tylko chip, to każdy adres (a więc i adresy stringów w strukturze Tune) ma pierwszy bajt $00 i "kopiowanie stringa" się kończy. Czyli nic nie jest skopiowane. A jeżeli jest fast Z3, to pierwszy bajt nie jest zerem i jest spora szansa, że pozostałe też nie. Więc zazwyczaj cała struktura zostaje skopiowana i bóg wie co jeszcze za nią, aż się napatoczy bajt $00...

Jeżeli nie chcemy, żeby elementy wstawiane do listy były kopiowane (sami zapewniamy ich istnienie przez cały czas działania programu) po prostu nie specyfikujemy tagów MUIA_List_Construct/DestructHook.

Ostatnia aktualizacja: 14.12.2024 19:31:22 przez Krashan
2
[#8] Re: Jak zrobić poprawie Hooka do listview MUI

@michal_zukowski, post #5

Mam oba hooki w liscie:

MUIA_List_ConstructHook, MUIV_List_ConstructHook_String,
 MUIA_List_DestructHook, MUIV_List_DestructHook_String,

Problem z alokacja pamięci, może być tu problemem. Część tego kodu odziedziczyłem, postawam się go przepisać.
[#9] Re: Jak zrobić poprawie Hooka do listview MUI

@sand, post #8

No i to jest właśnie błędem. Przecież nie wstawiasz do listy stringów, tylko struktury Tune, patrz post #7.
2
[#10] Re: Jak zrobić poprawie Hooka do listview MUI

@Krashan, post #9

Super dzięki, teraz to działa. Teraz już w pełni rozumiem działanie tych HOOKow.
[#11] Re: Jak zrobić poprawie Hooka do listview MUI

@Krashan, post #7

No mniej wiecej o to mi chodziło ale nie chcialo mi się tyle pisać :)
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