Debug e Amiga

Hello world!

Re: Debug e Amiga

Messaggioda ShInKurO » mer apr 09, 2008 11:50 pm

clros ha scritto:
MemGuard funziona come MungWall, dunque:

"The ``wall'' part of Mungwall allocates extra memory before and after
every memory allocation and fills this memory ``wall'' with a fill pattern
(normally $BB) and some information Mungwall uses to perform certain tests
on an application's memory blocks"


Scusa Shinky ma... questo spiega il perchè se lancio MemGuard il mio programma nn fa i capricci?


Non ti farà crashare il programma semplicemente perchè alloca un pò di più della memoria che il tuo programma avrebbe richiesto se fosse stato lanciato senza, oppure il tuo programma legge/scrive zone interne ai wall fatti da memguard ma in modo errato...
Avatar utente
ShInKurO

Eroe
 
Messaggi: 1428
Iscritto il: dom mar 14, 2004 3:10 pm

Re: Debug e Amiga

Messaggioda clros » gio apr 10, 2008 6:47 am

Non ti farà crashare il programma semplicemente perchè alloca un pò di più della memoria che il tuo programma avrebbe richiesto se fosse stato lanciato senza,

Ok, questo va bene...

oppure il tuo programma legge/scrive zone interne ai wall fatti da memguard ma in modo errato...


....ma cmq il programma leggerebbe da una zona di memoria "nn sua" e qindi riempita cn un pattern da memguard ( -> e qundi il programma leggerebbe delle informazioni errate) oppure scriverebbe sempre nella stessa zone e quindi (penso che) mungwall se ne accorgerebbe...

Sbaglio qualcosa nel mio ragionamento??

Cmq, ho provato a riempire di KPrintF() il sorgente e collegato la seriale al PC dv uso HyperTerminal o simili e...il programma gura sempre nel costruttore (OM_NEW) ma in punti sempre differenti...
Only AMIGA makes it possible !!
La colpa è sempre del Kernel!!
...un bit è formato da 8 byte...

Claudio "CP" La Rosa
Avatar utente
clros

Supremo
 
Messaggi: 3473
Iscritto il: ven mag 07, 2004 2:41 pm
Località: SYS 64738

Messaggioda ShInKurO » gio apr 10, 2008 9:35 am

Posta OM_NEW per favore :)
Avatar utente
ShInKurO

Eroe
 
Messaggi: 1428
Iscritto il: dom mar 14, 2004 3:10 pm

Messaggioda clros » gio apr 10, 2008 10:24 am

Shinky...è kilometrico!


...ma quello che scrivevo prima sul funzionamento di MemGuard è corretto? :sperduto:
Only AMIGA makes it possible !!
La colpa è sempre del Kernel!!
...un bit è formato da 8 byte...

Claudio "CP" La Rosa
Avatar utente
clros

Supremo
 
Messaggi: 3473
Iscritto il: ven mag 07, 2004 2:41 pm
Località: SYS 64738

Messaggioda NubeCheCorre » gio apr 10, 2008 1:30 pm

@clros

Claudio, controlla il mio thread Tide, magari puo' essere d' aiuto in qualche modo :felice:
W il Veneto :ride:
Avatar utente
NubeCheCorre

Leggenda
 
Messaggi: 10624
Iscritto il: dom set 21, 2003 9:21 pm
Località: San remo

Messaggioda ShInKurO » gio apr 10, 2008 9:10 pm

clros ha scritto:Shinky...è kilometrico!


Embè? :) Allega:)

...ma quello che scrivevo prima sul funzionamento di MemGuard è corretto? :sperduto:


Intendevo dire, è probabile che tu in una TUA area di memoria faccia qualcosa di errato, memguard ti avverte di cose come quelle che hai elencato tu, ma se leggi o scrivi su una TUA locazione sono cavoli tuoi :)
Avatar utente
ShInKurO

Eroe
 
Messaggi: 1428
Iscritto il: dom mar 14, 2004 3:10 pm

Messaggioda clros » gio apr 10, 2008 9:34 pm

ShInKurO ha scritto:
clros ha scritto:Shinky...è kilometrico!


Embè? :) Allega:)

...ma quello che scrivevo prima sul funzionamento di MemGuard è corretto? :sperduto:


Intendevo dire, è probabile che tu in una TUA area di memoria faccia qualcosa di errato, memguard ti avverte di cose come quelle che hai elencato tu, ma se leggi o scrivi su una TUA locazione sono cavoli tuoi :)


Per MIA area di memoria intendi...memoria allocata staticamente?
Per ilk codice...aspetta che cerco di isolare meglio il punto dv si focalizza il codice... e posto quello.
Only AMIGA makes it possible !!
La colpa è sempre del Kernel!!
...un bit è formato da 8 byte...

Claudio "CP" La Rosa
Avatar utente
clros

Supremo
 
Messaggi: 3473
Iscritto il: ven mag 07, 2004 2:41 pm
Località: SYS 64738

Messaggioda clros » gio apr 10, 2008 10:10 pm

KPrintF("OM_NEW (5) gadget 0x%08x\n",g);

//devo mettere qualche bottone di servizio?
if ( (LBMF->presenzabottonevolumi) || (LBMF->presenzabottonesolonomi) )
{//Creo il layout con i bottoni per lo scorrimento...
LBMF->LayoutBottoni = libBase->IIntuition->NewObject( libBase->ILayout->LAYOUT_GetClass(),NULL,
LAYOUT_Orientation,LAYOUT_HORIZONTAL,
LAYOUT_ShrinkWrap,TRUE,
LAYOUT_InnerSpacing,2,
LayoutEnd;
}
KPrintF("OM_NEW (5a) gadget 0x%08x\n",g);
//vediamo quale bottone aggiungere...
if (LBMF->scr)
{
if (LBMF->presenzabottonevolumi)
{
LBMF->Button1 = libBase->IIntuition->NewObject( libBase->IButton->BUTTON_GetClass(),NULL,
GA_RelVerify,TRUE,
BUTTON_RenderImage,libBase->IIntuition->NewObject( libBase->IBitMap->BITMAP_GetClass(),NULL,
BITMAP_Screen,LBMF->scr,
BITMAP_SourceFile,"TBIMAGES:device",
BITMAP_Masking,TRUE,
BitMapEnd,
ButtonEnd;
KPrintF("OM_NEW (5a- 1) gadget 0x%08x\n",g);
if ((LBMF->Button1) && (LBMF->LayoutBottoni)) libBase->IIntuition->SetAttrs((struct Gadget *)LBMF->LayoutBottoni, LAYOUT_AddChild,LBMF->Button1,
CHILD_MinWidth,35, CHILD_MinHeight,35,
TAG_DONE);
KPrintF("OM_NEW (5a- 2) gadget 0x%08x\n",g);
}//endif bottone volumi
KPrintF("OM_NEW (5b) gadget 0x%08x\n",g);
if (LBMF->presenzabottonesolonomi )
{
//creo le due immagini...
LBMF->ImgNoIcone = libBase->IIntuition->NewObject( libBase->IBitMap->BITMAP_GetClass(),NULL,
BITMAP_Screen,LBMF->scr,
BITMAP_SourceFile,"TBIMAGES:treeunfold",
BITMAP_Masking,TRUE,
BitMapEnd;

//creo le due immagini...
LBMF->ImgSiIcone = libBase->IIntuition->NewObject( libBase->IBitMap->BITMAP_GetClass(),NULL,
BITMAP_Screen,LBMF->scr,
BITMAP_SourceFile,"TBIMAGES:treedirunfold",
BITMAP_Masking,TRUE,
BitMapEnd;

LBMF->ButtonOnlyName = libBase->IIntuition->NewObject( libBase->IButton->BUTTON_GetClass(),NULL,
GA_RelVerify,TRUE,
BUTTON_RenderImage,LBMF->solonomi == TRUE ? LBMF->ImgSiIcone : LBMF->ImgNoIcone,
ButtonEnd;

if ((LBMF->ButtonOnlyName) && (LBMF->LayoutBottoni)) libBase->IIntuition->SetAttrs(LBMF->LayoutBottoni,LAYOUT_AddChild,LBMF->ButtonOnlyName,
CHILD_MinWidth,35, CHILD_MinHeight,35,
TAG_DONE);

}//endif bottone volumi
KPrintF("OM_NEW (5c) gadget 0x%08x\n",g);
//Bene, adesso, se ho creato il layout per i pulsanti di servizio, lo attacco al mio gadget...
if (LBMF->LayoutBottoni) libBase->IIntuition->SetAttrs(g,LAYOUT_AddChild,LBMF->LayoutBottoni,
CHILD_WeightedWidth,0,
CHILD_WeightedHeight,0,
TAG_DONE);


}//endif ok puntatore schermo.

KPrintF("OM_NEW (5d) gadget 0x%08x\n",g);


//Creo il ListBrowser
LBMF->ListBrowser = libBase->IIntuition->NewObject( libBase->IListBrowser->LISTBROWSER_GetClass(),NULL,
GA_ID,LBMF->idgdg, //<--lo stesso ID del layout padre??? :-I
LISTBROWSER_Hierarchical,TRUE,
LISTBROWSER_HorizontalProp,TRUE,
LISTBROWSER_ShowSelected,TRUE,
LISTBROWSER_VirtualWidth,1000,
LISTBROWSER_ColumnInfo, (ULONG)LBMF->ci,
//LISTBROWSER_HorizSeparators,TRUE,
ListBrowserEnd;
KPrintF("OM_NEW (5e) gadget 0x%08x\n",g);




Tutto questo e all'interno di OM_NEW.
Cm vedi, sn chiamate abbastanza ad alto livello...ho messo divesi KPrintf per capire il punto esatto, ma si "blocca" sempre in posti diversi;
A volte dopo il punto "a" ma più spesso tra "b" e "c".

L'impressione è che cmq ci sia qualcosa che nn va prima.
"g" è il puntatore al mio gadget custom.
Un possibile problema al quale pensavo è questo...è possibile che la creazione di oggetti BitMap ReAction nn possa essere effettuata da più processi contemporaneamente (in pratica...se sto creando un oggetto bitmap da un processo, posso fare lo stesso cn un altro processo usando lo stesso file immagine?
E' possibile che le routine interne alla bitmap.image - e quindi alla datatype.library- "lockkino" completamente il file immagine?

Bho, magari è solo qualche colossale svista da parte mia... :-(
Only AMIGA makes it possible !!
La colpa è sempre del Kernel!!
...un bit è formato da 8 byte...

Claudio "CP" La Rosa
Avatar utente
clros

Supremo
 
Messaggi: 3473
Iscritto il: ven mag 07, 2004 2:41 pm
Località: SYS 64738

Messaggioda ShInKurO » ven apr 11, 2008 2:10 am

clros ha scritto: LBMF->LayoutBottoni = libBase->IIntuition->NewObject( libBase->ILayout->LAYOUT_GetClass(),NULL,

libBase->IIntuition->SetAttrs(LBMF->LayoutBottoni,


A parte l'indettazione non mantenuta per via della mancanza di tag nel forum (vedi utilityBase in cui ci sono tag proprio per il codice), io non mi raccapezzo. Innanzitutto non capisco il bisogno di usare libBase->INTERFACCIA->FUNZIONE(), quando dovresti usare INTERFACCIA->FUNZIONE(), o meglio, se vuoi del codice più chiaro e non hai la necessità di differenziare le interfaccie di OS4 (praticamente nella programmazione che facciamo noi non le consideriamo per la maggior parte dei casi) ti conviene usare la direttiva:
#define __USE_INLINE__

o durante la compilazione, come parametro al gcc:

-D__USE_INLINE__

in questo modo i tuoi:

libBase->INTERFACCIA->FUNZIONE();

diventano

FUNZIONE();

E già sicuramente il codice diventa più chiaro.
Poi apri tutte le chiamate normalmente e le finisci con le macro, come ad esempio " ButtonEnd; ", o usi le macro o non usi le macro :)

Tutto questo e all'interno di OM_NEW.


Devi subclassare, troppe cose in un metodo, fai delle sottoclassi e così nel tuo costruttore avrai solo istanziazioni di sottoclassi, non questo casino...

Un possibile problema al quale pensavo è questo...è possibile che la creazione di oggetti BitMap ReAction nn possa essere effettuata da più processi contemporaneamente (in pratica...se sto creando un oggetto bitmap da un processo, posso fare lo stesso cn un altro processo usando lo stesso file immagine?


Si, a patto che tu non lo modifichi, il Lock al file in apertura avviene solo in scrittura e non in lettura.
Avatar utente
ShInKurO

Eroe
 
Messaggi: 1428
Iscritto il: dom mar 14, 2004 3:10 pm

Messaggioda clros » ven apr 11, 2008 9:58 am

ShInKurO ha scritto:

FUNZIONE();

E già sicuramente il codice diventa più chiaro.


Si, vabbè, ma nn è questo il problema...

Poi apri tutte le chiamate normalmente e le finisci con le macro, come ad esempio " ButtonEnd; ", o usi le macro o non usi le macro :)


...e nemmeno questo, anche se qui c'è un motivo di fondo; nn posso iniziare le chiamate cn le ReAction macro perchè...devo nel mio caso sempre riferirmi ai puntatori a libreria che appunto si trovano in libBase.
Chiudo le macro in quella maniera perchè è più semplice, ma è identico a mettere TAG_DONE);


Devi subclassare, troppe cose in un metodo, fai delle sottoclassi e così nel tuo costruttore avrai solo istanziazioni di sottoclassi, non questo casino...


Subclassare...cosa?
Tt il gadget è già sottoclasse di layout, ma servono dei pulsanti "di servizio" e li creo qui per poi aggiungerli al mio gadget subclassato.

E poi, sinceramente, per aggiungere solo 2 pulsanti e uno string... su un altro layout...bhe, penso che il casino aumenterebbe se subclassassi solo per la toolbar da aggiungere!

Siamo in intuition...non in Java (...e nemmeno in C++)!

Ma nn è nè IL nè UN problema ;-)


Si, a patto che tu non lo modifichi, il Lock al file in apertura avviene solo in scrittura e non in lettura.


Come immaginavo...
Only AMIGA makes it possible !!
La colpa è sempre del Kernel!!
...un bit è formato da 8 byte...

Claudio "CP" La Rosa
Avatar utente
clros

Supremo
 
Messaggi: 3473
Iscritto il: ven mag 07, 2004 2:41 pm
Località: SYS 64738

Messaggioda ShInKurO » ven apr 11, 2008 10:35 am

clros ha scritto:
Si, vabbè, ma nn è questo il problema...


In realtà i tuoi problemi derivano proprio da questo, se il codice non è chiaro e facilmente leggibile dubito molto che tu possa venire a capo dei bug che potrebbero presentarsi...

...e nemmeno questo, anche se qui c'è un motivo di fondo; nn posso iniziare le chiamate cn le ReAction macro perchè...devo nel mio caso sempre riferirmi ai puntatori a libreria che appunto si trovano in libBase.
Chiudo le macro in quella maniera perchè è più semplice, ma è identico a mettere TAG_DONE);


Si ok, ma non è leggibile... Scusa mi spieghi perchè nel tuo caso devi riferirti ai puntatori di libreria? Io non ho mai visto alcun sorgente in cui vengono invocate le funzioni passando per i puntatori di libreria, mi piacerebbe sapere che caso è :)

Subclassare...cosa?
Tt il gadget è già sottoclasse di layout, ma servono dei pulsanti "di servizio" e li creo qui per poi aggiungerli al mio gadget subclassato.

E poi, sinceramente, per aggiungere solo 2 pulsanti e uno string... su un altro layout...bhe, penso che il casino aumenterebbe se subclassassi solo per la toolbar da aggiungere!


Esempio: Hai una finestra, una toolbar in alto, una lista a sinistra ed una serie di oggetti a destra.

1) Subclassi window;
2) Subclassi layout (credo sia la classe reaction adibita alla disposizione dei gadget);
3) subclassi layout;
4) subclassi layout;
5) subclassi layout;

-in 1) aggiungi le cose di corredo al tuo programma, chessò i menu ad esempio;

-nel OM_NEW di 3) istanzi le parti della tua toolbar se essa è piccola (altrimenti devi subclassare ulteriormente);

-nel OM_NEW di 4) istanzi la tua lista;

-nel OM_NEW di 5) istanzi la serie di oggetti a destra;

nel OM_NEW di 2) istanzi gli oggetti dalle sottoclassi 3), 4) e 5).

Ogni subclasse overloada almeno i metodi OM_SET, OM_GET ed aggiunge metodi pubblici per gestire alcune operazioni interne alla classe. set e get servono per interagire dall'esterno con i dati della classe, set in particolare NON deve mai fornire puntatori ad oggetti interni alla classe.
Le classi 3) 4) e 5) si parlano attraverso la classe 2) per mezzo dei metodi pubblici, la classe 1) non deve avere la possibilità di parlare in modo diretto con le classi 3) 4) e 5), ma solo tramite la classe 2) potrà interagire con esse.

Questo esempio utilizza l'incapsulamento, l'information hiding e le subclassi sono create attraverso composizione.
Stai programmando in BOOPSI (OOP), non in Intuition, i tuoi principali strumenti devono essere quelli forniti da BOOPSI. Nel caso in cui ci fossero cose non fornite da BOOPSI crei subclassi (immagino di gadget) che forniscano i servizi di cui senti la mancanza.
Se hai dubbi ti consiglio di guardare i sorgenti di ToolManager, per la maggior parte scritto in BOOPSI, con solo le preferenze MUI...
ToolManager è scritto utilizzando tutto questo o quasi... L'unico motivo per il quale non l'ho portato su AROS è che è davvero tosto come programma e non mi piace pensare di scervellarmi con le primitive classi BOOPSI, ma visto che a te piacciono allora il tuo punto di riferimento potrebbero essere proprio quei sorgenti (il programmatore li aveva difatti rilasciati proprio per fare capire agli altri come si programma in BOOPSI).
Avatar utente
ShInKurO

Eroe
 
Messaggi: 1428
Iscritto il: dom mar 14, 2004 3:10 pm

Messaggioda clros » ven apr 11, 2008 11:58 am

In realtà i tuoi problemi derivano proprio da questo, se il codice non è chiaro e facilmente leggibile dubito molto che tu possa venire a capo dei bug che potrebbero presentarsi...


Vabbè, shinky...sto lavorando da solo, da programmatore, nn me ne frega nulla della chiarezza, oltre al fatto che per me, è chiarissimo (almeno quel pezzo di codice)!!!


Si ok, ma non è leggibile... Scusa mi spieghi perchè nel tuo caso devi riferirti ai puntatori di libreria? Io non ho mai visto alcun sorgente in cui vengono invocate le funzioni passando per i puntatori di libreria, mi piacerebbe sapere che caso è :)


Senti...nn me lo ricordo.
ma quando ho iniziato a scrivere librerie ricordo che qualcuno mi disse su utilitybase che cmq devo conservare i puntatori alle libreri aperte nella base della libreri (libBase nel mio caso).
Ricordo bene che anche Elena mi disse la stessa cosa...ma il motivo proprio nn riesco a riocordarlo (forse che...ad ogni invocazione di metodo nn saprei dv prendere le basi delle librerie perchè nn globali ???)

Cmq, tranquillo...non è certo questo il problema!



Esempio: Hai una finestra, una toolbar in alto, una lista a sinistra ed una serie di oggetti a destra.

1) Subclassi window;
2) Subclassi layout (credo sia la classe reaction adibita alla disposizione dei gadget);
3) subclassi layout;
4) subclassi layout;
5) subclassi layout;

[..]


E così divento scemo e passo anni acreare qualcosa!

Va bene l'OOP (anzi, va benissimo!) ma qui siamo su Amiga e su Intuition e BOOPSI!!!!
Quanti file dovrei farmi??
E poi, per voce dell'autore del layout.gadget, è sconsigliabilissimo subclassarlo!!

Questo esempio utilizza l'incapsulamento, l'information hiding e le subclassi sono create attraverso composizione.


Si, certo, ma cm detto nn sono nè Java nè in C++.

Stai programmando in BOOPSI (OOP), non in Intuition, i tuoi principali strumenti devono essere quelli forniti da BOOPSI. Nel caso in cui ci fossero cose non fornite da BOOPSI crei subclassi (immagino di gadget) che forniscano i servizi di cui senti la mancanza.



Scusa ma..che sto facendo?
Subclasso il layout e all'interno ci metto quello che mi serve.
Ma BASTA! Qui nn è semplice immediato e funzionale cm in Java!!!

Ma porca miseria, posso capire lo stile, ma qui si parla di accessi illegali in memoria...


Se hai dubbi ti consiglio di guardare i sorgenti di ToolManager, per la maggior parte scritto in BOOPSI, con solo le preferenze MUI...


Lo guarderò, ma prima vorrei finire questo.
Only AMIGA makes it possible !!
La colpa è sempre del Kernel!!
...un bit è formato da 8 byte...

Claudio "CP" La Rosa
Avatar utente
clros

Supremo
 
Messaggi: 3473
Iscritto il: ven mag 07, 2004 2:41 pm
Località: SYS 64738

Messaggioda clros » ven apr 11, 2008 1:11 pm

1) Subclassi window;
2) Subclassi layout (credo sia la classe reaction adibita alla disposizione dei gadget);
3) subclassi layout;
4) subclassi layout;
5) subclassi layout;

-in 1) aggiungi le cose di corredo al tuo programma, chessò i menu ad esempio;

-nel OM_NEW di 3) istanzi le parti della tua toolbar se essa è piccola (altrimenti devi subclassare ulteriormente);

-nel OM_NEW di 4) istanzi la tua lista;

-nel OM_NEW di 5) istanzi la serie di oggetti a destra;

nel OM_NEW di 2) istanzi gli oggetti dalle sottoclassi 3), 4) e 5).


Shinky, ho riletto meglio..in effetti sono le stesse cose che faccio quasi ogni giorno cn Java e Swing/awt per il lavoro....
Ma cavolo, nn puoi fare la stessa cosa cn BOOPSI diventerebbe impossibile!

Oltre al fatto, cm ti spiegavo, che BOOPSI è parzialmente OOP.

Infine...bhe, questo penso sia il male peggiore...ads ho un cavolo di programma che si blocca quando vuole lui e nn so perchè!! :uffa:
Only AMIGA makes it possible !!
La colpa è sempre del Kernel!!
...un bit è formato da 8 byte...

Claudio "CP" La Rosa
Avatar utente
clros

Supremo
 
Messaggi: 3473
Iscritto il: ven mag 07, 2004 2:41 pm
Località: SYS 64738

Messaggioda ShInKurO » ven apr 11, 2008 2:31 pm

clros ha scritto:
Shinky, ho riletto meglio..in effetti sono le stesse cose che faccio quasi ogni giorno cn Java e Swing/awt per il lavoro....
Ma cavolo, nn puoi fare la stessa cosa cn BOOPSI diventerebbe impossibile!


Veramente tutti i programmi scritti bene di cui ho letto i sorgenti sono stilati in questo modo. E non solo MUI, prendi ToolManager ad esempio. Su MUI io scrivo così, tutti i sorgenti di alfie sono così, quelli di Ambient sono così, e suppongo che anche AWeb sia almeno in parte così (è un programma vecchiotto, come Yam, il quale peraltro sposta tutto in classi proprio in questi ultimi tempi).

Oltre al fatto, cm ti spiegavo, che BOOPSI è parzialmente OOP.


Non esageriamo questa cosa però... gli mancherà qualche concetto, ma i principi di base sono quelli E SI DEVONO USARE se programmi BOOPSI, altrimenti viene un ibrido tra l'utilizzo di BOOPSI e funzioni varie.

Infine...bhe, questo penso sia il male peggiore...ads ho un cavolo di programma che si blocca quando vuole lui e nn so perchè!! :uffa:


Se riesci a venirne a capo è un miracolo, perchè c'è veramente molta dispersione nel codice tra interfaccie, libBase e senza subclassare nulla e dunque usando puntatori qui e la...
Avatar utente
ShInKurO

Eroe
 
Messaggi: 1428
Iscritto il: dom mar 14, 2004 3:10 pm

Messaggioda ShInKurO » ven apr 11, 2008 2:58 pm

clros ha scritto:Vabbè, shinky...sto lavorando da solo, da programmatore, nn me ne frega nulla della chiarezza, oltre al fatto che per me, è chiarissimo (almeno quel pezzo di codice)!!!


Beato te. Io dopo una settimana non ricordo nemmeno il perchè ho scritto una funzione a meno che non sia scritta in modo logico, ordinato e con qualchè piccolo commento.

Senti...nn me lo ricordo.
ma quando ho iniziato a scrivere librerie ricordo che qualcuno mi disse su utilitybase che cmq devo conservare i puntatori alle libreri aperte nella base della libreri (libBase nel mio caso).
Ricordo bene che anche Elena mi disse la stessa cosa...ma il motivo proprio nn riesco a riocordarlo (forse che...ad ogni invocazione di metodo nn saprei dv prendere le basi delle librerie perchè nn globali ???)


E per quale motivo non sono globali? Nemmeno nelle librerie che usano funzioni di altre librerie le basi sono locali alle funzioni o vengono passate per puntatore... l'unica eccezione è la SocketBase.

E così divento scemo e passo anni acreare qualcosa!


Scusa se te lo dico, ma stai perdendo un sacco di tempo a trovare un puntatore pazzo in 30 righe di codice, quindi c'è qualcosa che non va...

Va bene l'OOP (anzi, va benissimo!) ma qui siamo su Amiga e su Intuition e BOOPSI!!!!


Ci sono programmi che usano BOOPSI bene, altri che mescolano BOOPSI senza rispettare l'OOP impiegando gadtools ed altro. Questi ultimi avevano forse senso negli anni '90 dove tutti dovevano scrivere per 68k e come base c'era uno 030. Adesso non ha veramente senso inquinare il codice BOOPSI...

Quanti file dovrei farmi??


Quanti ne servono, sicuramente 1 per la subclass di window, 1 per la subclass di layout principale ed una per la subclass del layout che contiene la toolbar. Io ne farei anche di più...è proprio una questione di ordine e di isolamento (incapsulamento?).

E poi, per voce dell'autore del layout.gadget, è sconsigliabilissimo subclassarlo!!


Allora è inutile pure utilizzarlo e sarebbe da riscrivere da capo. Potrei capire che non puoi subclassare la classe della stringa, ma se non puoi subclassare la classe "contenitore"... Cmq io ti consiglio di provare... dubito molto che ci abbia scritto originariamente il layout.gadget non abbia pensato alla sua suclassazione (è impossibile).

Ma porca miseria, posso capire lo stile, ma qui si parla di accessi illegali in memoria...


che non riesci ad identificare per i motivi che ti ho elencato...


Lo stile è indettare una cosa come:

DoMethod(arg1, arg2, arg3,...);

così:

DoMethod(arg1,
arg2,
arg3);

Non altro :)
Avatar utente
ShInKurO

Eroe
 
Messaggi: 1428
Iscritto il: dom mar 14, 2004 3:10 pm

PrecedenteProssimo

Torna a Programmazione su Amiga

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti

cron