Exposé su Amiga: Aiuto !)

Hello world!

Exposé su Amiga: Aiuto !)

Messaggioda scusscus » mar mar 13, 2007 6:24 pm

Qualcuno che possiede un AmigaOne e mastica codice C me lo può provare???
Sono anni che non codifico su Amiga e non mi ricordo molto dei nomi dei campi delle strutture e delle API di base...

Il sorgente l'ho scritto di getto senza controllarlo approfonditamente. :ammicca:

showExposé()
{
unsigned int openedWindows, windowIndex;
unsigned int squareSide, squareWidth, squareHeight, targetX,targetY;
unsigned int loop;
unsigned long event;
struct Screen *ActiveScreen,*ExposéScreen;
struct NewScreen newExposéScreen;
struct Window *win,*ExposéWindow;
struct NewWindow newExposéWindow;

ActiveScreen = IntuitionBase->ActiveScreen;

newExposéScreen.Title = "Exposé Screen";
newExposéScreen.width = ActiveScreen->width
newExposéScreen.height= ActiveScreen->height;
newExposéScreen.depth = ActiveScreen->depth;

newExposéWindow.Title = "Exposé Window";
newExposéWindow.width = ActiveScreen->width
newExposéWindow.height= ActiveScreen->height;
newExposéWindow.depth = ActiveScreen->depth;
newExposéWindow.flags = BORDERLESS | BACKDROP;

//Count opened windows
openedWindows=0;
for (win = ActiveScreen->FirstWindow; win!=NULL; win=win->NextWindow)
openedWindows++;

//Compute square side
if (openedWindows>0)
{
squareSide = round(Log( openedWindows ) / Log(2));
squareWidth = round(newExposéScreen.width / squareSide);
squareHeight= round(newExposéScreen.height/ squareSide);
}
else
Exit( OK ); // no windows to show

//Open Exposé main screen
ExposéScreen = OpenScreen( &newExposéScreen );
if (ExposéScreen==NULL) Exit( ERROR_NO_SCREEN );


//Open Exposé main window
newExposéWindow.screen = ExposéScreen;
ExposéWindow = OpenWindow( &newExposéWindow );
if (ExposéWindow==NULL) { CloseScreen(ExposéScreen); Exit( ERROR_NO_WINDOW ); }


//Copy & Resize windows bitmap to Exposé screen
for (win = ActiveScreen->FirstWindow; win!=NULL; win=win->NextWindow)
{
//Compute offsets
targetX = (windowIndex / squareSide)*((ExposéWindow->width)/squareSide);
targetY = (windowIndex % squareSide)*((ExposéWindow->height)/squareSide);

//Copy Gfx Data
BitBlt(win->Bitmap,0,0,win->width, win->height, //Source
ExposéWindow->Bitmap, targetX, targetY, //Destination
targetX+(win->width)/squareSide, targetY+(win->height)/squareSide, COPY_AND_RESIZE);

windowIndex++;
}


//Highlight top left square first
prevX = (0 / squareSide)*((ExposéWindow->width)/squareSide);
prevY = (0 % squareSide)*((ExposéWindow->height)/squareSide);

//Wait user selection
loop = 1;
while (loop)
{
wait(ExposéWindow->MessagePort->mp_SignalBit);
event = ExposéWindow->MessagePort->mp_SignalBit & EVENT_MASK;
switch (event)
{
case MOUSEMOVE:

windowIndex = (ExposéScreen->mouseX / ExposéScreen->width) * squareSide;
windowIndex += (ExposéScreen->mouseY / ExposéScreen->height) * squareSide; // *2 ???

DrawFrame(ExposéWindow->RastPort,prevX,prevY,
prevX+(ExposéWindow->width)/squareSide,prevY+(ExposéWindow->height)/squareSide,COMPLEMENT_PEN);

targetX = (windowIndex / squareSide)*((ExposéWindow->width)/squareSide);
targetY = (windowIndex % squareSide)*((ExposéWindow->height)/squareSide);

prevX = targetX;
prevY = targetY;

DrawFrame(ExposéWindow->RastPort,prevX,prevY,
prevX+(ExposéWindow->width)/squareSide,prevY+(ExposéWindow->height)/squareSide,COMPLEMENT_PEN);
break;
case MOUSECLICK:

loop=0;
}
}

//Bring to front selected window
openedWindows=0;
for (win = ActiveScreen->FirstWindow; win!=NULL; win=win->NextWindow)
{
if (windowIndex==openedWindows) {
ScreenToFront(win->screen);
WindowToFront(win);
break;
}
openedWindows++;
}

//Close Exposé window and custom screen
CloseWindow(ExposéWindow);
CloseScreen(ExposéScreen);
Exit( OK );
}
Puoi alzarti molto presto al mattino, anche all'alba... ma il tuo destino si alza sempre mezzora prima di te. -proverbio africano-

"Stampando una notizia a grandi lettere, la gente pensa che sia indiscutibilmente vera" (J.L. Borges)

Android Software Developer & iOS Developer

Packard Bell and Amiga Enter Android Tablet Fray 9-4-2011
Avatar utente
scusscus

Eroe
 
Messaggi: 1087
Iscritto il: dom apr 18, 2004 5:54 pm
Località: Alpe Adria

Re: Exposé su Amiga: Aiuto !)

Messaggioda clros » mar mar 13, 2007 7:24 pm

Scusa, una domanda... come sarebbe che l'hai scitto di getto...non sapevo (o non avevo capito) che tu fossi un programmatore!
L'hai compilato?
E... che roba è? (domanda stupidissima e risposta scontata, ma...)
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 elwood » mar mar 13, 2007 10:19 pm

Non sono sviluppatore ma il "é" mi pare in troppo. Non piace a GCC :-)

Poi ti manca sicuramente :

#include <proto/intuition.h>
#include "intuition/intuition.h"
#include "intuition/screens.h"

e altri al'inizio del programma.

Poi il :
else
Exit( OK );

è :skull: :no:

Devi usare una struttura con dei { }

CloseWindow(ExposéWindow);


:sbam:
if ExposeWindow { CloseWindow(ExposeWindow); }
Filippo 'Elwood' Ferrucci
AmigaOS 4.x betatester
Amiga Translator Organisation member
ACube Systems support
Avatar utente
elwood

Maestro
 
Messaggi: 417
Iscritto il: mar dic 13, 2005 9:11 pm
Località: Lione, Francia

Messaggioda clros » mer mar 14, 2007 12:40 am

elwood ha scritto:Non sono sviluppatore ma il "é" mi pare in troppo. Non piace a GCC :-)


Già :eheh:



CloseWindow(ExposéWindow);

:sbam:
if ExposeWindow { CloseWindow(ExposeWindow); }


if (ExposeWindow) CloseWindow(ExposeWindow);

Non ci dovrebbe essere bisogno delle graffe in questo caso.Non ho controllato bene, ma se tutte le operazioni le metti in conseguenza dell'apertura della ExposeWindow, allora non c'è nemmeno bisogno del controllo che ti abbiamo qui indicato.
Ma penso che uno che abbia scritto quel codice, di questi suggerimenti non sappia che farsene (sono troppo da bambini!)
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 Raffaele » mer mar 14, 2007 12:59 am

Beh, se funziona è una santa cosa....


Si potrebbe però chiamare in un modo diverso? Giusto per non far sentire l'influenza culturale del Macintosh, visto che non hanno niente da insegnare all'Amiga?

Semmai hanno tutto da imparare. :annu:

Chessò qualcosa come Prémiere, o Proscenio, o Spettacolo, o Parade, o qualsiasi nome vi venga in mente...
Que viva Amiga! :ammicca:
Avatar utente
Raffaele

Supremo
 
Messaggi: 3501
Iscritto il: dom mag 22, 2005 1:01 pm
Località: Qualche volta qui, qualche volta su altri siti

Messaggioda NubeCheCorre » mer mar 14, 2007 1:16 am

Propongo un nome di donna come da tradizione amighista :felice:

Margherita !.. oppure Petunia !..
W il Veneto :ride:
Avatar utente
NubeCheCorre

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

Re: Exposé su Amiga: Aiuto !)

Messaggioda ShInKurO » mer mar 14, 2007 9:24 am

scusscus ha scritto:Qualcuno che possiede un AmigaOne e mastica codice C me lo può provare???
Sono anni che non codifico su Amiga e non mi ricordo molto dei nomi dei campi delle strutture e delle API di base...

Il sorgente l'ho scritto di getto senza controllarlo approfonditamente.


Ma prendere l'hardfile per winuae di Louise e provarlo no eh? :)
Avatar utente
ShInKurO

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

Re: Exposé su Amiga: Aiuto !)

Messaggioda scusscus » mer mar 14, 2007 10:11 am

ShInKurO ha scritto:
scusscus ha scritto:Qualcuno che possiede un AmigaOne e mastica codice C me lo può provare???
Sono anni che non codifico su Amiga e non mi ricordo molto dei nomi dei campi delle strutture e delle API di base...

Il sorgente l'ho scritto di getto senza controllarlo approfonditamente.


Ma prendere l'hardfile per winuae di Louise e provarlo no eh? :)


Ho provato ad utilizzare winuae, non mi trovo. :no:
Aspetto di avere un hw reale su cui provarlo... SAM ci sei? :ride:
Puoi alzarti molto presto al mattino, anche all'alba... ma il tuo destino si alza sempre mezzora prima di te. -proverbio africano-

"Stampando una notizia a grandi lettere, la gente pensa che sia indiscutibilmente vera" (J.L. Borges)

Android Software Developer & iOS Developer

Packard Bell and Amiga Enter Android Tablet Fray 9-4-2011
Avatar utente
scusscus

Eroe
 
Messaggi: 1087
Iscritto il: dom apr 18, 2004 5:54 pm
Località: Alpe Adria

Messaggioda scusscus » mer mar 14, 2007 10:15 am

elwood ha scritto:Non sono sviluppatore ma il "é" mi pare in troppo. Non piace a GCC :-)


Credo che dipenda dal set di caratteri utilizzato da gcc... :mah:

elwood ha scritto:Poi ti manca sicuramente :

#include <proto/intuition.h>
#include "intuition/intuition.h"
#include "intuition/screens.h"

e altri al'inizio del programma.


Certo :annu: , il mio era solo un frammento di riferimento per il programma che volevo ottenere, non certo il programma completo.

Mancano l'inizializzazione delle library di alcune variabili, del main... :riflette:
Puoi alzarti molto presto al mattino, anche all'alba... ma il tuo destino si alza sempre mezzora prima di te. -proverbio africano-

"Stampando una notizia a grandi lettere, la gente pensa che sia indiscutibilmente vera" (J.L. Borges)

Android Software Developer & iOS Developer

Packard Bell and Amiga Enter Android Tablet Fray 9-4-2011
Avatar utente
scusscus

Eroe
 
Messaggi: 1087
Iscritto il: dom apr 18, 2004 5:54 pm
Località: Alpe Adria

Re: Exposé su Amiga: Aiuto !)

Messaggioda scusscus » mer mar 14, 2007 10:19 am

clros ha scritto:Scusa, una domanda... come sarebbe che l'hai scitto di getto...non sapevo (o non avevo capito) che tu fossi un programmatore!

2h di scrittura codice. Niente debug, niente eseguibile.

clros ha scritto:L'hai compilato?

:no:

clros ha scritto:E... che roba è? (domanda stupidissima e risposta scontata, ma...)


*Dovrebbe* essere qualcosa di simile (e notevolmente semplificato) alla controparte su Mac.
Un programma del genere è utile quando hai tante finestre aperte sullo schermo. :ammicca:
Puoi alzarti molto presto al mattino, anche all'alba... ma il tuo destino si alza sempre mezzora prima di te. -proverbio africano-

"Stampando una notizia a grandi lettere, la gente pensa che sia indiscutibilmente vera" (J.L. Borges)

Android Software Developer & iOS Developer

Packard Bell and Amiga Enter Android Tablet Fray 9-4-2011
Avatar utente
scusscus

Eroe
 
Messaggi: 1087
Iscritto il: dom apr 18, 2004 5:54 pm
Località: Alpe Adria

Messaggioda scusscus » mer mar 14, 2007 10:22 am

NubeCheCorre ha scritto:Propongo un nome di donna come da tradizione
amighista :felice:

:ride: Si, sono sempre stati scelti nomi di donna...

NubeCheCorre ha scritto:.. oppure Petunia !..

L'hanno già utilizzato se lo uso mi denunciano!!! :ride: :ride:
Puoi alzarti molto presto al mattino, anche all'alba... ma il tuo destino si alza sempre mezzora prima di te. -proverbio africano-

"Stampando una notizia a grandi lettere, la gente pensa che sia indiscutibilmente vera" (J.L. Borges)

Android Software Developer & iOS Developer

Packard Bell and Amiga Enter Android Tablet Fray 9-4-2011
Avatar utente
scusscus

Eroe
 
Messaggi: 1087
Iscritto il: dom apr 18, 2004 5:54 pm
Località: Alpe Adria

Messaggioda scusscus » mer mar 14, 2007 10:25 am

Raffaele ha scritto:Beh, se funziona è una santa cosa....

Ci saranno sicuramente una marea di bachi, sopratutto nel calcolo delle coordinate...

Raffaele ha scritto:Si potrebbe però chiamare in un modo diverso? Giusto per non far sentire l'influenza culturale del Macintosh, visto che non hanno niente da insegnare all'Amiga?

...
Parade


Parade mi piace! :annu:
Puoi alzarti molto presto al mattino, anche all'alba... ma il tuo destino si alza sempre mezzora prima di te. -proverbio africano-

"Stampando una notizia a grandi lettere, la gente pensa che sia indiscutibilmente vera" (J.L. Borges)

Android Software Developer & iOS Developer

Packard Bell and Amiga Enter Android Tablet Fray 9-4-2011
Avatar utente
scusscus

Eroe
 
Messaggi: 1087
Iscritto il: dom apr 18, 2004 5:54 pm
Località: Alpe Adria

Messaggioda clros » mer mar 14, 2007 10:43 am

Ma qualche buona anima non ha un A1 da prestare al nostro scusscuss?
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 afxgroup » mer mar 14, 2007 12:10 pm

La nelle variabili non è il massimo. magari gcc non si incazza ma non è comunque buona abitudine.

Per il resto bisognerebbe provarlo.
Elf.library.. a noi due....
The BUG Hunter.. +1..
AMIGAONE - SAM - MOANA - A1200 - A600 - A500 - C64
Avatar utente
afxgroup

Admin
 
Messaggi: 3647
Iscritto il: ven giu 11, 2004 9:49 am
Località: Taranto

Messaggioda scusscus » gio mar 15, 2007 3:12 pm

clros ha scritto:Ma qualche buona anima non ha un A1 da prestare al nostro scusscuss?

NON chiedo che qualcuno mi presti il suo A1.

Mi basta che *qualcuno* dia un'occhiata (a tempo perso, senza impegno) se il programma è compilabile o vi sono molte modifiche da fare nelle chiamate alla funzioni che ho utilizzato...
Puoi alzarti molto presto al mattino, anche all'alba... ma il tuo destino si alza sempre mezzora prima di te. -proverbio africano-

"Stampando una notizia a grandi lettere, la gente pensa che sia indiscutibilmente vera" (J.L. Borges)

Android Software Developer & iOS Developer

Packard Bell and Amiga Enter Android Tablet Fray 9-4-2011
Avatar utente
scusscus

Eroe
 
Messaggi: 1087
Iscritto il: dom apr 18, 2004 5:54 pm
Località: Alpe Adria

Prossimo

Torna a Programmazione su Amiga

Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti

cron