6
SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco AreaEllipse lrp&,x,y,rx,ry) l.ome sopra, ma rIempie l'interno Draw Irp~.x.y' Disegna una lInea dal Plxel Cursor a lX,y' Dra'Wllllpse Irp&:,x,y,rx,ry) DIsegna un'ellisse vuota con centro in (x,y) e raggI rx lorizzontale) e ry (verticale) kectFilllrpÒ:.xl,yl,x2,y2) Disegna un rettangolo da lxl,ylJ a (x2,y2J WrltePlxel lrp&,x,y" lJlsegna un pixel a (x,yJ I nomi che avevo visto nei sorgenti in C di alcuni program- mi public domain che mi ero faticosa- mente procurato li avevo già visti da qualche altra parte, e, precisamente, nei suddetti filesbmap. Il giorno dopo, tra un verso e l'altro della Divina Commedia, buttai giù un dump di graphics.bmap, e trovai la mag- gior parte delle istruzioni grafiche che avevo scovato nei sorgenti. Nella figura 1 cito le più importanti, senza approfon- dire troppo il discorso altrimenti rag- giungiamo la decina di pagine . Due parole su come utilizzare queste routine. Innanzitutto, va precisato che ogni operazione di disegno viene effet- tuata considerando il foreground color e il background color: cioè, se ho settato il foreground a 2, ogni punto, linea o rettangolo che andrò a disegnare sarà disegnato con il colore 2. Analogo di- scorso vale per il background color, che equivale al secondo parametro dell'i- struzione COLaR del Basic. rp& è il puntatore al RastPort Record, quella struttura dati che definisce l'allo- cazione dei piani di bit nella memoria, la loro dimensione e parametri di altra natura. Esiste un RastPort Record per ogni finestra, che nel caso di una win- dow aperta dal Basic, è sistemato a partire dall'indirizzo WINDOW(8) - det- to tra di noi, questo indirizzo è ottenibile anche con delle mie arrabbiature per acquistare all'estero i famigerati manuali della Ban- tam Books, dunque sarei stato ben pre- sto costretto a scegliere la seconda via, cioè quella di tornare al Basic. Ma c'era qualcosa che mi faceva spe- rare in un futuro migliore: la relativa- mente facile espandibilità dell'interpre- te, adoperando le famigerate « librerie esterne». Dunque, cominciai ad esami- nare i vari files.bmap presenti su Extras e da lì cominciai a capire che quello che avevo intenzione di fare da C era possi- bile anche da Basic - cioè il viceversa di quanto avevo detto prima - natural- mente con molta più facilità. Una notte - insonne - mi venne il colpo di genio I zione di buon livello. Ne è testimonianza il gran numero di utenti che, per pro- grammare questo computer nel cuore delle sue feature, passa dal buon vec- chio Basic ad un linguaggio di livello minore e, quindi, più vicino all'architet- tura della macchina: il C e il Linguaggio Macchina, tanto per fare un esempio. /I mio lavoro Il sottoscritto, in maniera inusuale, ha percorso la via inversa: ha cominciato con il Basic, è passato al C per dispera- zione ed è ritornato al Basic con dolori - spirituali, s'intende - ancora mag- giOri ... Mi spiego: tutto quello - e non è poco - che si può fare in Basic è ovviamente, possibile anche da C, ma con la necessità di molto lavoro in più e di molta documentazione: a questo punto il bivio - o comprare tutti i manuali dell'Amiga o tornare al Basic ed accontentarsi - era chiaro. Sinceramente parlando, non avevo nemmeno la minima intenzione di inve- stire il fior fiore del mio (poco) denaro e Larlca la ColorMap - le componenti dei colori precostltuitl . a partire dall' indirizzo addr& nella ViewPort il numero del colorI e' ncol Setta Il colore alle componenti r, geb (che vanno da O a l::') Setta Il background colar ac Setta Il foreground colar ac ~etta il modo di scrittura e dIsegno Spost.:; Il Fixel '_ursor antidl1uviano rlcor do a lx.y,1 v ~ JAMI lil backgraund vIene el1mlnato) 1 )AM2 .t : COMrLEt-1EN J l i m'erte l'area) 4: INVERSVID lln reverse' Per capll-e come I unzionano, provate con l' IconEd l i troverete tut t i E'tl'r!'ld l rp':'.. mode' LoadRGB/J \vp&,addr&,ncol! SetAF'en lrp&,C) SetRGB4 lvp&,c,r.g,b) '::etBPen Irp&,c J Mo':e r p&. x . Readf-'lxel lrp&.x,y' Ritorna il colore logico - cioe' la rappre sentazlone nella bltmap del pixel a lX,y), dunque va dichIarata con OECLAREfUNCTION prima di essere usata di Maurizio Mangrella - Eboli (SA) Grafica evoluto con l'Amiga Premessa Le possibilità grafiche che l'Amiga è in grado di offrire vanno ben oltre le prestazioni del Basic, che pure conosce, su questa macchina, una implementa- Questo mese il software dei lettori è davvero speciale. Non si tratta infatti del solito programma preconfezionato, ma di un insieme di routine, consigli e trucchetti assai preziosi per chi vorrà sfruttare maggiormente alcune capacità nascoste di Amiga. Sul prossimo numero, Invece .... , behl meglio non fare anticipazioni ... Figura 1 PEEKL (WINDOW(7)+50) Esiste anche un RastPort Record, del 192 MCmicrocomputer n. 76 -luglio-agosto 1988

SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco · 2010. 2. 3. · SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco AreaEllipse lrp&,x,y,rx,ry) l.ome sopra, ma rIempie l'interno

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco · 2010. 2. 3. · SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco AreaEllipse lrp&,x,y,rx,ry) l.ome sopra, ma rIempie l'interno

SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco

AreaEllipse lrp&,x,y,rx,ry) l.ome sopra, ma rIempie l'interno

Draw Irp~.x.y' Disegna una lInea dal Plxel Cursor a lX,y'

Dra'Wllllpse Irp&:,x,y,rx,ry) DIsegna un'ellisse vuota con centro in (x,y)e raggI rx lorizzontale) e ry (verticale)

kectFilllrpÒ:.xl,yl,x2,y2) Disegna un rettangolo da lxl,ylJ a (x2,y2J

WrltePlxel lrp&,x,y" lJlsegna un pixel a (x,yJ

I nomi che avevo vistonei sorgenti in C di alcuni program-

mi public domain che mi ero faticosa-mente procurato li avevo già visti daqualche altra parte, e, precisamente, neisuddetti filesbmap.

Il giorno dopo, tra un verso e l'altrodella Divina Commedia, buttai giù undump di graphics.bmap, e trovai la mag-gior parte delle istruzioni grafiche cheavevo scovato nei sorgenti. Nella figura1 cito le più importanti, senza approfon-dire troppo il discorso altrimenti rag-giungiamo la decina di pagine .

Due parole su come utilizzare questeroutine. Innanzitutto, va precisato cheogni operazione di disegno viene effet-tuata considerando il foreground color eil background color: cioè, se ho settatoil foreground a 2, ogni punto, linea orettangolo che andrò a disegnare saràdisegnato con il colore 2. Analogo di-scorso vale per il background color, cheequivale al secondo parametro dell'i-struzione COLaR del Basic.

rp& è il puntatore al RastPort Record,quella struttura dati che definisce l'allo-cazione dei piani di bit nella memoria, laloro dimensione e parametri di altranatura. Esiste un RastPort Record perogni finestra, che nel caso di una win-dow aperta dal Basic, è sistemato apartire dall'indirizzo WINDOW(8) - det-to tra di noi, questo indirizzo è ottenibileanche con

delle mie arrabbiature per acquistareall'estero i famigerati manuali della Ban-tam Books, dunque sarei stato ben pre-sto costretto a scegliere la seconda via,cioè quella di tornare al Basic.

Ma c'era qualcosa che mi faceva spe-rare in un futuro migliore: la relativa-mente facile espandibilità dell'interpre-te, adoperando le famigerate « librerieesterne». Dunque, cominciai ad esami-nare i vari files.bmap presenti su Extrase da lì cominciai a capire che quello cheavevo intenzione di fare da C era possi-bile anche da Basic - cioè il viceversadi quanto avevo detto prima - natural-mente con molta più facilità. Una notte- insonne - mi venne il colpo digenio I

zione di buon livello. Ne è testimonianzail gran numero di utenti che, per pro-grammare questo computer nel cuoredelle sue feature, passa dal buon vec-chio Basic ad un linguaggio di livellominore e, quindi, più vicino all'architet-tura della macchina: il C e il LinguaggioMacchina, tanto per fare un esempio.

/I mio lavoroIl sottoscritto, in maniera inusuale, ha

percorso la via inversa: ha cominciatocon il Basic, è passato al C per dispera-zione ed è ritornato al Basic con dolori- spirituali, s'intende - ancora mag-giOri ...

Mi spiego: tutto quello - e non èpoco - che si può fare in Basic èovviamente, possibile anche da C, macon la necessità di molto lavoro in più edi molta documentazione: a questopunto il bivio - o comprare tutti imanuali dell'Amiga o tornare al Basic edaccontentarsi - era chiaro.

Sinceramente parlando, non avevonemmeno la minima intenzione di inve-stire il fior fiore del mio (poco) denaro e

Larlca la ColorMap - le componenti dei coloriprecostltuitl . a partire dall' indirizzoaddr& nella ViewPort il numero del colorIe' ncol

Setta Il colore alle componenti r, g e b(che vanno da O a l::')

Setta Il background colar a c

Setta Il foreground colar a c

~etta il modo di scrittura e dIsegno

Spost.:; Il Fixel '_ursor antidl1uviano rlcordo a lx.y,1

v ~ JAMI lil backgraund vIene el1mlnato)1 • )AM2.t : COMrLEt-1EN J l i m'erte l'area)4 : INVERSVID lln reverse'Per capll-e come I unzionano, provate conl' IconEd l i troverete tut t i

E'tl'r!'ld l rp':'.. mode'

LoadRGB/J \vp&,addr&,ncol!

SetAF'en lrp&,C)

SetRGB4 lvp&,c,r.g,b)

'::etBPen Irp&,c J

Mo':e r p&. x .

Readf-'lxel lrp&.x,y' Ritorna il colore logico - cioe' la rappresentazlone nella bltmap del pixel a lX,y),dunque va dichIarata con OECLAREfUNCTION primadi essere usata

di Maurizio Mangrella - Eboli (SA)

Grafica evolutocon l'Amiga

PremessaLe possibilità grafiche che l'Amiga è

in grado di offrire vanno ben oltre leprestazioni del Basic, che pure conosce,su questa macchina, una implementa-

Questo mese il software deilettori è davvero speciale. Non sitratta infatti del solito programmapreconfezionato, ma di uninsieme di routine, consigli etrucchetti assai preziosi per chivorrà sfruttare maggiormentealcune capacità nascoste diAmiga. Sul prossimo numero,Invece .... , behl meglio non fareanticipazioni ...

Figura 1PEEKL (WINDOW(7)+50)

Esiste anche un RastPort Record, del

192 MCmicrocomputer n. 76 -luglio-agosto 1988

Page 2: SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco · 2010. 2. 3. · SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco AreaEllipse lrp&,x,y,rx,ry) l.ome sopra, ma rIempie l'interno

SOFTWARE

AMIGA

Il foreground color e il backgroundcolor del titolo servono a specificare lenostre preferenze sul titolo dello scher-mo: il Basic, tanto per citare un esem-pio, specifica sempre, rispettivamente,O e 1.

Il ViewPort Mode dello schermo rI-sponde alle specifiche della tabella difigura 3.

Vle...,F'ort Mode (hex.)

LontenutoASClssa dell'angolo superIore SInIstroOrdinata dell'angolo superiore SInistroLarghezza dello schermoAltezza dello schermoNumero di bitplanesForeground colar del titolo deloo schermoBackground colar del tItolo dello schermoViewPort Mode dello schermoTi po di schermoIndirIzzo della struttura TextAttrIndIrizzo del tItolo dello schermoPuntatore ad altrI eventualI gadgets

VI e Port Mode (dee. )

o-1&384

2048128

1024

precisamente come vadano usati: sup-pongo riguardino in particolare il corsi-vo, il grassetto e il sottolineato. Se nonavete problemi, settateli entrambi a O.

Il puntatore ad altri gadget punta allastruct Gadget. che punta ad un'altrastruct Gadget... e così via, fino alla finedei gadget. Settate O se non specificategadget aggiuntivi.

0000LU00080000800400

\.o,JORDWORDWORDWORDI"rJ()RD

BYTEBYTEWORDWORDLONGLONGLONG

Formato

LùRES ~32Ux200)HIRES ~b40x2IJO)HAMEXTRA_HALfBR I-I EDUALPF

Figura 2

Modo

tutto analogo, per ogni schermo: perottenerlo basta dare

rp& = 84 + scr&

dove scr& è l'indirizzo dello ScreenRecord, ottenibile con

scr& = PEEKL (WINDOW(7)+46)

che fornisce l'indirizzo dello ScreenRecord dello schermo che contiene laCurrent Output Window - che confu-sione'

Dunque, a seconda delle vostre esi-genze, potrete lavorare all'interno di unafinestra o a tutto schermo - ve loassicuro, quest'ultimo modo di fare gra-fica è veramente un sottile piacere perchi, come me, viene dal mondo deglismanettomani ad 8 bit e, quando vede320 o 640, pensa allo spazio realmenteutilizzabile e non ad un indice dellarisoluzione adoperata.

Come dimostrazione dell'uso di alcu-ne delle routine descritte a tutto scher-mo, troverete, sul dischetto allegato,DK, un programmino che lentamente vidistruggerà lo schermo del Work-Bench ..

Per chi non si accontenta ...... c'è un'altra, grande novità. Da Ba-

sic è possibile aprire uno schermo inHAM o in HalfBrite o in Dual Playfield,come più vi aggrada.

Per fare ciò, dovrete prima creare -se non lo avete già fatto - la intuition.li-brary utilizzando il ConvertFD del di-schetto Extras. Fatto ciò - dovrebberisultare il file intuition.bmap - poteteiniziare a lavorare.

Il listato di figura 1 - che ho dattilo-scritto essendo al momento sprovvistodi stampante - apre uno schermo inHold&Modify e vi disegna sopra alcunirettangoli con sfumature di Rosso, Ver-de e Blu.

Per aprire uno schermo è necessariola routine OpenScreen& della intuitition-.Iibrary, che, a sua volta necessita diuna piccola struttura dati la cui confor-mazione è rappresentata in figura 2.

L'ascissa e l'ordinata dell'angolo su-periore sinistro specificano la posizionedello schermo rispetto al WorkBenchScreen: specificando (0,0) si ha la com-pleta coincidenza col suddettoschermo.

Figura 3

Il «-16384» si spiega tenendo contoche in Basic tutti gli interi short hannoun segno, dunque, per la cronaca,-16384 corrisponde a 49152.

Il tipo di schermo indirizza Intuitionsull'uso che di questo schermo dovràfare: noi utenti specificheremo CU-STOMSCREEN, cioè 15 dee.

La struct TextAttr è un'altra piccolastruttura, così composta:

Formato ContenutoLONG Indirizzo del nome del lontWORD Altezza del lontWORD FlagsWORD Prelerences

Il nome del font è, appunto, il nomedel font che si vuole utilizzare nel titoloin testa allo schermo: per non averefastidi, e se non avete particolari prefe-renze, settate «topaz.font», cioè il fontdi sistema

L'altezza è il numero di pixel verticalidi cui è composto ogni carattere delfont: setta te 8 per il topaz di sistema.

Flags e Preferences, infine, non so

Due note alle strutture ora viste: 1)ogni stringa di caratteri, comunque siacomposta, deve terminare con unCHR$(O), che è un carattere riservatodei compilatori C; 2) una WORD equiva-le a due byte, una LONG-word a quattrobyte (32 bit)

Magicamente, passeremo l'indirizzodella struttura precedente - quella piùlunga per intenderei - ad OpenScreendella intuition.library, ed otterremo iltanto agognato schermo ... ! In pratica, lasintassi è questa:

sScreen& = OpenScreen& (indirizzo dellastruttura, cioè LONG)

dove «indirizzo della struttura» è unaLONG-word che punta al primo bytedella struttura stessa. OpenScreen& ri-torna un valore - che esamineremodopo -, dunque va dichiarata prima diessere adoperata.

Il valore ritornato da OpenScreen nonè altro che un puntatore allo ScrrenRecord dello schermo in questione:questa struttura dati ingloba al suo in-

MCmicrocomputer n. 76 - luglio-agosto 1988 193

Page 3: SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco · 2010. 2. 3. · SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco AreaEllipse lrp&,x,y,rx,ry) l.ome sopra, ma rIempie l'interno

è sistemata una sfilza di WORD nelformato.

XXXXRRRRGGGGBBBB X = don't care

dove ogni lettera rappresenta un bit:ad esempio, GGGG sono 4 bit cheindicano i 16 possibili livelli del verde

Il RastPort Record, il cui indirizzo è

rp& = sScreen& + 84

contiene informazioni sull' allocazionedei bitplane in memoria ed altre cosuc-

SOFTWARE

AMIGA

temo altre due strutture, la ViewPort ela RastPort.

La ViewPort contiene dati sulla visua-lizzazione dello schermo: colori, modografico, centratura, etc. Il modo graficoè dato da

PEEKW (vp& + 32)

secondo il seguente codice hard-ware:

Modo Codice (dee)LORES 16384HIRES -16384HAM 18432EXTRA-HALFBRITE 16512DUALPF 17408

Ah , dimenticavo, a tutti questi valori- come ai ViewPort Modes visti prima- dovete aggiungere 4 per avere l'ln-terlace.

vp& è l'indirizzo della ViewPort, otte-nibile al secolo con

sScreen& + 44

Se vi interessa sapere dove sonosituati i colori dello schermo, sappiateche a partire dall'indirizzo

ColorTab& = PEEKL (PEEKL (vp&+4)+4)

Formato

WJkL·(",AJKL'<.X.JklJt",.\)k(.oBYTLBYTEl.vl'lt .•Lul~GLONGLuNlrLuNL..L0N\'"LONI..1'•••~'l''([}~JR[)

WuRLJ'",\..'kl'\iXJRU

ASClssa dell'angolo superIore SInIstroOrdInata dell'angolo superIore SInIstroLarghezza della fInestraAltezza della IlnestraForeground colar del tItoloBackground colar del tItoloIOCMP FlagsIntultlon FlagsPuntatore al prImo gadget addIZIonalePuntatore al "flrst user checkmark" {:l»)Yuntatore al titolo della fInestraPuntalore allo Screen RecordF-'untatore alla Super Bi tmapMInima dImensIone orIzzontaleMInIma dImenSIone verticaleM3s3lma dImensione orIZzontaleMaSSIma dImenSIone vertIcaleTIpO dI schermo

ce del genere; ad esempio, gli indirizzidei bitplane sono dati da

bPlane&(i) = PEEKL (rp&+4)+8+4*i)0<=i<=5

Terribile, non è vero 7A questo punto, come abbiamo visto

precedentemente, potete lavorare a tut-to schermo, il che è una bella comodità.Può risultare utile anche la funzioneText - la metto ora, lo confesso, per-ché ho dimenticato di inserirla prima ..- che vi consentirà di scrivere sulloschermo: la sintassi è

Grafica evoluta

CLSDIM font%(4) scr%(13)PRINT "Premere un tasto per USCIre"DECLARE FUNCTION Ope~Screen& LIBRARYLIBRARY "graphlcs. lqhrary"LIBRARY 'lntultlon.l1hrary'·DATA 0.0.320.200.6.0.2048.15.0.0.0.0.0.0DATA 0.0.8.0.0RESTOREFOR k - O TG 13 READ scr%fk) NEXTFOR k - O TO 4 READ font%lk) NEXTfont$ = "lOPàZ font"+CHR$IO)tltle$ • "HAM"+CHR$IO)font& • SADD(fonl$)tltle& - SADDltltle$)font%IO) • PEEKW(VARPTRlfont&»font%ll) • PEEKWIVARPTRlfont&) +2)fon & = VARPTRlfont%(O»)scr%(8) • PEEKWIVARPTRlfont&»tu-scr%(9) • PEEKWIVARPTRlfont&) +2)sCI-%IIO) - PEEKW(VARPTRltltle&»oscr%(ll) PEEKWIVARPTRltltle&)+2)sScreen& - OpenScreen&(VARPTR{scr%(O»)vp& - sScreen&t44rp& = sScreen&+84CALL SetRGB4Ivp&.0.0.O.O)FOR y • O TO 2

y& • 70'ycbase& - 16-(y+l)FOR x • O TO 15 '

x& ., 20"'"xc& - cbase&+xCALL SetAPen(rp&.c&1CALL RectFllllrp&.x&.y&.x&+19.y&+S9)

NEXT xNEXT yWHILE INKEY$ • WENDstoCALL Clo5e~creen(sScreen&JLIBRARY CLOSECLS END

194

Per ulter 101 l InformaZIonI cfr. dr-t leolo

Strutture TextAttr e ScreenDatd

OpenScreen rItorna un valoreLe lIbrerIe utIlIzzate

lnlZlal1zzaZIone delle strutture

Nome de l fontTItolo dello scher"moPuntatore al nome del tontPuntetore al tItolo dello schermoLo SIstemIamo nella strutturaTextAttrIndIrIzzo dI struct TextA tISIstemIamo Il puntatore alla slrut

ra TextAttrdunque Il puntatore al tItolo dell

schermoRagaZZI . SI parte!La VIewPortLa RastPortSfondo neroTre fIle dI rettangoliPOSIzIone vetticaleI prImI due bItS del colore lOgICO16 sfumaturePOSIZIOnp. orIzzontale

Colore dI dIsegnOIl rettangOllnO

PrIma o POI qualcuno premer un ta

ChIudIamo lo schermoE le lIbrerIe . per benlnoArr l vederc 1 ~

Text (rp&,addr&,nchar)Scrive i primi nchar caratteri della stringapuntata da addr&

Per decidere dove scrivere, doveteutilizzare la Move, che posizionerà iltasto in un punto corrispondente allaprima colonna di pixel del primo caratte-re, alla riga - sempre del carattere -indicata dal FontEditor con BaseLine; inpratica, con il topaz 8, la seguente istru-zione.

CALL Move (rp&,0,6)CALL Text (rp&,SADD(<<Prova di testo»).14)

scriverà la stringa «Prova di testo»nella banda verticale compresa tra O e7, dal momento che la BaseLine deltopaz 8 è posta alla settima riga dall'altoe

7 - 1 = 6

Se non ci avete capito niente - èsuccesso anche a me, a suo tempo -è colpa di chi ha inventato l'Amiga: fatequalche prova e tutto sarà chiaro.

Se volete utilizzare qualche altro fontdi caratteri, seguite le istruzioni del de-mo Library, disco Extras, subdirectoryBasicDemos.

Finestre, care finestre".Qualcuno di voi potrebbe desiderare

di utilizzare anche la logica a finestre di

MCmicrocomputer n. 76 - luglio-agosto 1988

Page 4: SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco · 2010. 2. 3. · SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco AreaEllipse lrp&,x,y,rx,ry) l.ome sopra, ma rIempie l'interno

SOFTWARE

AMIGA

la finestra sia stata lnattlvata

la finestra sta stata seleLlonata

Il rnouse sta stato mosso

Intultl0n VI lntorma nel c:a,o che

I modi graficiIn questo paragrafo - il penultimo

dell'articolo, spero ... - mi occuperò inmaniera concisa dei modi grafici specialidell'Amiga: in fondo, è per ottenerli cheabbiamo fatto tutte queste elucubrazio-ni, non è vero ì

È possibile ottenere le coordinate delmouse nell'ambito di una data finestrain questo modo:

x = PEEKW (sWindow&+14)y = PEEKW (sWindow&+ 12)

dove x e y possono assumere anchevalori negativi - quando la freccina delmouse è fuori della finestra. Le coordi-nate del mouse, anche se viene specifi-cato il GIMMEZEROZERO, sono riferiteSEMPRE all'angolo superiore sinistrodella Title Bar: un trucchetto, questo,che sulle prime potrà creare più di unfastidio, ma che poi si rivelerà di un'utili-tà impagabile.

HAM, ovvero Hold & Modify

In questo modo grafico - uno dei piùfamosi e più utili - avremo a disposi-zione, praticamente senza limitazioni,16 colori precostituiti, e, con limitazionidi una certa entità, tutti i 4096 coloriche l'Amiga è in grado di generare.

In pratica, dato un pixel sullo scher-

Uso del mouse

Un consiglio: non chiudete ancora lefinestre che avete creato, ma lavorateciun po' sopra Sarà il modo migliore percomprendere quanto detto sinora, e,magari, per scoprire tutto ciò che io, nelmio pur frenetico lavoro, non sono riU-scito ad appurare completamente.

Abbiate sempre l'accortezza di chiu-dere le finestre PRIMA di chiudere glischermi: la migliore cosa che vi puòcapitare è quella di avere un bel po' dimemoria occupata senza sapere beneperché.

le dImenSIonI della t lnestra stano cambIate

la. t lnestra sia stata chiusa

\'01 chIedIate le att.uall dImenSIonI della Ilnestra

siano stati premutI i bottonI del mouse

'J

Lodice \ hex. J

1.::T"[FiI FY

F lag

NEIJ.":.ILL 2

HOUSEBUTTON5 8

MUU':>lMUVE. lO

LLOSFWI NUuW cOV

AL rl ',1E.WI NlXJ\.l.1 4UOO0

I NAL I I 'JEWI Nl.Jlh' 8uOOO

Figura 5

Un momento ...sento già le grida dei lettori: «Ehi,

questo ci ha lasciato con uno schermoe una finestra aperti: come facciamo achiuderliì».

È molto semplice: per chiudere unoschermo si esegue l'istruzione

CALL CloseScreen (sScreen&)

mentre, per chiudere una finestra, silancia la

CALL CloseWindow (sWindow&)

.Iibrary, e vedrete la tanto desideratafinestra: la sintassi è

sWindow& = OpenWindow&(indirizzo della struttura, cioè LONG)

sWindow& è analogo alla funzioneWINDOW(7) del Basic, e rappresenta ilpuntatore alla struttura denominata co-me Window Record, che contiene tuttele informazioni sulla finestra: il puntato-re allo schermo è

sScreen& = PEEKL (sWindow&+46)

mentre la RastPort della finestra èdata darp& =PEEKL (sWindow&+50)

passando quest'ultimo valore alleroutine grafiche potremo lavorare nellefinestre come ci pare e piace ..

cate il WINDOWDEPTHAI solito, per specificare più di una

caratteristica, potete sommare i codici.Il titolo della finestra, come al solito,

deve terminare con un CHR$(O).Il puntatore allo Screen Record non è

altro che lo sScreen& visto prima, cioè ilparametro ritornato dalla OpenScreen.Solo in un caso potete non specificarlo:quando la finestra è sul WorkBenchScreen; in tal caso, al posto di 15 per loScreen Type, dovrete specificare 1 (W-BENCHSCREEN).

A questo punto, signore e signori,passate l'indirizzo di questa strutturaalla routine OpenWindow della intuition-

Intuition: è possibile anche questo, conun po' di pazienza e la famigerata intui-tion.library.

Per aprire una finestra, dovete aprireuna struttura di dati come appare infigura 4.

Le prime specifiche della finestra so-no abbastanza ovvie, se non fosse perla possibilità che ci viene offerta - eche quasi nessuno sfrutta - di sceglie-re i colori del titolo e, volendo, di tutta laTitle Bar della finestra.

Intuition, l'interfaccia utente di Ami-ga, comunica con i task attivi in un datomomento tramite dei sistemi di trasferi-mento dati, detti «portS». E così Intui-tion, che è uno dei tanti processi chel'Amiga può gestire contemporanea-mente, riesce ad informare tutti i taskattivi sullo stato del sistema, in partico-lare - è quello che ci interessa - sullostato delle finestre: infatti ogni finestracontiene, nel suo Window Record -che vedremo fra poco - un puntatoread uno speciale port, gestito da Intui-tion. In Basic è assai difficile maneggia-re i dati dei port, visto che ciò richiede-rebbe la maggior parte del tempo mac-china disponibile: in C, però, dove lavelocità intrinseca dei processi è piùelevata, è possibile, ad intervalli regola-ri, dedicarsi ai porto Gli IDCMP Flaginformano Intuition su ciò che Intuitionstessa dovrà mettere a disposizione diun dato processo sul port di una datafinestra (Vedi figura 5).

Per selezionare una finestra si inten-de clickare all'interno di essa in modoche la Title Bar sia perfettamente leggi-bile; al contrario, inattiva re significa c1ic-kare in un'altra finestra e deselezionaretutte le altre.

Il port di Intuition fornisce due dati,C1ass e Code: Class vi restituisce ilcodice dell'lDCMP Flag relatiVO all'even-to accaduto, mentre Code vi informaancora più efficacemente sulla tipologiadell'evento stesso.

Per specificare più di un flag, è suffi-ciente sommare i relativi codici.

Gli Intuition Flag (che pubblichiamo infigura 6) sono sicuramente più impor-tanti: essi definiscono il comportamen-to della finestra.

Per attivare un refresh che si rispettidovete allocare dei piani di bit e creareuna piccola struttura dati che ne conten-ga l'indirizzo, analoga alla Bitmap deglischermi - non so come questa siacomposta: vedete di scoprirlo voi, spul-ciando in qualche demo ... -: dico: «do-vete» perché, se non lo fate, una GuruMeditation è sempre in agguato ...

Per «cambiare priorità rispetto allealtre finestre» compariranno, nell'ango-lo superiore destro della finestra, i Backe i Front Gadget: sempre se voi specifi-

MCmicrocomputer n. 76 - luglio-agosto 1988 195

Page 5: SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco · 2010. 2. 3. · SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco AreaEllipse lrp&,x,y,rx,ry) l.ome sopra, ma rIempie l'interno

SOFTWAREAMIGA

Flag Codice (hex. )

WINDl,,)I.JSl2ING

WINDOW[)RAG ~Wl NDO\i.IDEPTH

WIN~LOSE 8

('IMMEZERùZERO 4UO

BUROERLESS 8UU

AL T1lJATE IUOO

NOCAREREFRESH 20000

Wl NDvWkEFRESH lOuOQ

SUPEkB I ~IMAP 80

Figura 6

Caratteristica

Cambio delle dimensioni ~type 1 del 8ASIC>

Cambio della posizione (typl 2 del 8ASIC)

Cambio della priorita' rispetto alle altrefinestre (type 4 del 8ASIC)

Chiusura della finestra ltype 8 del BASIC>

Pone l'origine delle coordinate non nell'angolo superiore sinistro della Title Bar) maneli' angolo superiore sinistro dello spaziointerno alla finestra stessaNiente bordi della finestra (solo la Title Bar'

Attiva la finestra (specificatelo SEMPRE>

Non si preoccupa del refresh della finestra

Rinfresca la finestra ltype 16 del 8ASIC)

Specit ica l'esistenza di piani di bi t riservati alla finpc,tr~

ConclusioniSe n~onci mettevo un altro paragrafo,

non mi sentivo bene ..Il mio lavoro è principalmente indiriz-

zato a quanti intendono lavorare con imodi grafici speciali dell'Amiga nellamaniera più semplice possibile, cioè daBasic - come sono belli i sinonimi ...

Qual,cuno obietterà che una tale po-tenza e degna solo del C: non ha tutti itorti, specie per quanto riguarda la velo-cità~ Ma bisogna anche sapersi accon-tentare: non tutti hanno la voglia e lapossibilità di comperare un compilatoreC e tanti bei manualoni in inglese.

Quando avrò delle buone nuove sul-l'Amiga, mi risentirete Ciao.

EXTRA-HALFBRITE

In questo modo grafico avremo adisposizione 32 colori precostituiti e iloro corrispondenti a luminosità dimez-zata (si faccia riferimento alla tabella B).

mo, Il suo colore sarà dettato dallespecifiche riportate in tabella A

Il colore logiCO di un plxel è la suarappresentazione numerica nella bitmapmentre Il colore fisico è il reale coloreche quel pixel assumerà sullo schermo.

Ad ogni fine di riga, il registro internodi colore viene settato a 0, dunque sinparte dal nero~

DUALPF, cioè dual Playfield

Con questo modo grafico avremo dueschermi separati, ognuno da 3 bitplane(se abbiamo specificato 6 bitplane) Po-co posso dirvi. sul comportamento logi-co del colon In quanto tutte le speri-mentazioni che ho condotto non hannodato i risultati sperati - leggi: non sicapisce niente .. Secondo me è proprioora di comprare qualche manuale dellaBantam Books ..

Tabella AColore logico%OOxxxx%Olxxxx

%10xxxx

%11xxxx

Tabella BColore logico%Oxxxxx%lxxxxx

196

LoadlLBM

Ed eccoci alla fine dell'articolo (quasimi dispiace ...): voglio parlarvi del piùImportante tra I programmi del dischet-to che ho allegato: Loadllbm.

Questo programma in Basic è unarielaborazione del famoso LoadlLBM -?ave~CBM di Carolyn Scheppner none PIU capace di salvare in formatoACBM - ma non è che si perda molto,In fin dei conti - ma può adattarsi acaricare qualunque schermata, in qua-lunque modo grafico. Quindi, se avetequalche immagine un po' strana, magaripresa col Grabbit. potete visualizzarlacon questo software~

IL caricamento delle immagini com-pattate, specie se con molti bitplane,nsulta un po' lento: sto lavorando aduna seconda versione, con un decom-pattatore scritto in Linguaggio Macchi-na. Sul salvataggio in ACBM non viprometto nulla.

Ironia della sorte, sul dischetto trove-rete un programma in C compilato, Vie-wlLBM - è di pubblico dominio - chesvolge esattamente la stessa cosa, solomolto più velocemente ..

Colore fisicoIl p,ixel avr~ il colore n. xxx x della paletteIl p,xel e~ed'ta ro~so e verde dal pixel adiacente alla sinistra e avrà unvalore d, blu paro a xxxxIl pixel eredita verde e blu dal pixel adiacente alla sinistra e setta ilrosso a xxxxIl pixel eredita rosso e blu dal pixel precedente e setta il verde a xxxx

Colore fisicoIl colore xxxxx della palette a~luminosità pienaIl colore xxxxx della palette a luminosità dimezzata

Fantdi Maurizio Lotauro - Bolzano

Il programma che presento vuole esse-re un esempio sull'uso delle libreriedisponibili all'interno dell' Amiga, e con-temporaneamente far vedere comeusare i font col Basic.

Le librerie dell'Amiga contengono unagrande quantità di funzioni con le quali èpOSSibile fare di tutto, come ad esem-pio chiamate del dos o funzioni grafi-che. Per usare una libreria occorre chesia presente un file nomelibreria.bmapnella directory corrente oppure nella SY-S:L1BS (SYS: rappresenta il disco da cuisi è fatto il bootstrap) Questi file siottengono partendo dal file nomelibre-ria_lib.fd che si possono trovare neidischi dell' Assembler, Lattice e AtzecC. La conversione dal formato ~fd a.bmap si ottiene tramite il programmaCONVERTIFD che si trova nella directo-ry BASICDEMOS del disco EXTRAS for-nito insieme al calcolatore (v. in seguitole modifiche da apportare a tale pro-gramma). Qui si trovano già i file dos.b-map e graphics.bmap che vengono uti-lizzati dai demo.

Per accedere alle funzioni contenuteall'interno di una libreria bisogna aprirela Ilbrena con la funzione L1BRARY:

L1BRARY"nomelibreria"Ora quando l'interprete' Basic troverà

una funzione non compresa tra quelledel linguaggio o tra quelle dichiarate nelprogramma, la cercherà all'interno dellelibrerie aperte. I parametri da passa'redevono sempre essere di tipo LONGINTEGER. Per le funzioni che hannocome output un valore bisogna anchedichiararle come funzioni·

MCmicrocomputer n. 76 - luglio-agosto 1988

Page 6: SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco · 2010. 2. 3. · SOFTWARE ~mID,iL~----a-cura-di-And-rea-de-pri-sco AreaEllipse lrp&,x,y,rx,ry) l.ome sopra, ma rIempie l'interno

Font

Oue!:>tn proqr amma e I un esempio dicome usare i vari font disponibili

DECLARE FUNCTION OpenFont& LlBRARYDECLARE FUNCTION OpenDiskFont& LIBRARYLlBRARY "graphics. library"LlBRARY "disktont. Iibrary"

WlNDOW 2,"OUTPUT FONT" , (0,44)-(617,186) ,15WlNDOW 3,"INPUT FONT",(O,O)-(617,30),15

INPUT "Nome del font ";NomeFonUWHILE NomeFont$ (> ""

INPUT "Altezza in Plxel "; AltFont

ta&(O) - SADD(NomeFont$+".font"+CHR$(O» , prepara gli attributi del fontta&(I) - AltFont*65536&pf& - OpenFont&(VARPTR(ta&(O»)IF pf& - O THEN pf& - OpenDiskFont&(VARPTR(ta&(O») , se il font indicato

non e'IF pf& - O THEN ' ne l sistema lo cerca ne l

discoBEE PPRINTPRINT "I l font ":NomeFont$; Il non esiste! ! !"PRINT

ELSEW INDOW OUTPUT 2SetFont WINDOW(8) ,pf&PRINTPRlNT "Questo e' il font ";NomeFont$;" alto ";AItFont;" pixel";

il; serve se il font successivo e' piu' altoaltrimenti coprirebbe in parte la riga precedente

END lFINPUT "Nome del font ";NomeFonU

WEND

WlNDOW CLOSE 2WlNDOW CLOSE 3

END

SOFTWARE

AMIGA

Modifica del programmaConvertfd

Nel numero di settembre-ottobre del-la rivista Amiga World sono riportate lemodifiche da apportare al programmaConvertfd in modo da eliminare degliinconvenienti. Il problema risiedeva nelfatto che alcune funzioni di libreria han-no lo stesso nome delle istruzioni Basic,come ad esempio READ, INPUT ecc.Questo ha portato a una nuova versionedenominata NEWCONVERTFD. Le mo-difiche da apportare sono le seguenti.La prima linea del programma CON-VERTFD risulta essere:

DEFINT a-Z 'by default, ali variables are in-teger

Scrivere subito dopo questa linea leseguenti istruzioni:

RE:.AU CntDIM Cont>(Cnt)FOR f~=O TO Cnt-1

READ Con" O()NEXT K

In questo modo i dati che verrannoaggiunti alla fine del programma verran-no caricati nel vettore Con$. La prossi-ma modifica è nella soubroutine chia-mata GotFunction che si trova 30 lineeal di sotto di quelle appena aggiunte. Laprima linea risulta:

DECLARE FUNCTION nomefunzione L1-BRARY

Veniamo ora al programma proposto.Nella libreria graphics.library si trovanole funzioni per gestire i font. La libreriadiskfont.library serve per aprire i fontpresenti nel disco. Ogni finestra cheviene aperta può avere un proprio fontindipendentemente da quello che c'ènelle altre. La funzione Setfont è quellache impone un determinato forit nellafinestra di output. I parametri che biso-gna passare sono due. Il primo forniscedelle indicazioni sulla finestra di output(si ottiene con WINDOW(8)). mentre ilsecondo è un puntatore del font. Que-sto secondo parametro si ottiene con lafunzione OpenFont. o con OpenDisk-Font, a seconda che il font che si vuoleusare sia già nel sistema oppure debbaessere prelevato dal disco (un font è nelsistema se è stato caricato con Open-font. e vi resta fintanto che non è statoeliminato con closefont (puntatorefont).Il font topaz è l'unico sempre residenteperchè si trova in ROM). Se il valore diquesto puntatore è O allora il font non èstato trovato. Il test su pf& è messoappositamente per evitare un immanca-bile Guru Meditation Il parametro dapassare invece alla funzione OpenFont(o OpenDiskfont) è il puntatore di unalocazione di memoria contenente il no-me del font ed i suoi attributi. Questi

MCmicrocomputer n. 76 - luglio-agosto 1988

ultimi sono separati dal nome da uncarattere nullo. In questo esempio l'uni-co attributo è quello relativo all'altezzadel font. Altri attributi che il font potreb-be avere sono ad esempio lo stile pro-prio del font (da non confondere con lostile determinato in modo algoritmico).che però fino ad ora non ho ancora vistoapplicato. Dalle prove che ho fatto èscaturito che un'altezza sbagliata causal'uso del font con altezza più piccolarispetto a quella impostata, oppure l'uni-ca esistente.

Per coloro che hanno intenzione diusare i font voglio rammentare alcunecose. Quando si cambia font convienemodificare con l'istruzione WIDTH an-che il numero di colonne stampabili perevitare che parte del testo scompaia aldi fuori della finestra Se si voglionousare font che sono in una directorydifferente dall'SYS: FONTS, basta ese-guire da dos ASSIGN FONTS: nomedi-rectory.

Infine un ultimo consiglio. Se, comemi è capitato, volete posizionare unascritta in una determinata posizione del-la finestra e non riuscite a farlo conLOCATE, potete usare la funzione Mo-ve&(WINDOW(8).x&,y&) contenuta nel-la libreria graphics.library, dove x& e y&sono le coordinate del pixel relativoall'angolo basso sinistro del caratterecol quale inizierà la stampa successiva.

GetToken 'Token$=FUNCTION'S NAMESubIto dopo questa lInea. aggIungere:

K$=TokenSFOR K""'O TO Cnt-1

I K$=CQN$(f() THEN TOKEN$="X"+TOKEN$NEXT K

La prossima modifica è nella subrouti-ne Bad file format. in cui bisogna cam-biare la parola STOP in CLOSE e RE-TURN in STOP

Infine aggiungere le seguenti righe didata alla fine del programma (cioè dopola sobroutine GETCHAR):

DATA 11DATA abs,Close,Exit,Input,Open,OutputDATA Read,tan, Translate,Walt,Write

Si raccomanda nei DATA di trascrive-re letteralmente, rispettando le maiu-scole e le minuscole.

Ora durante la conversione il pro-gramma aggiunge una x davanti al no-me se questo coincide con uno presen-te nei DATA Quando richiamate questeroutine da programma è necessariousare questo nome nuovo, come adesempio XREAD o XOPEN.

Un'ultima osservazione. Tutte questemodifiche sono necessarie solo se ilprogramma chiama le funzioni di libreriaindicate nei DATA

Penso che sia tutto. Buon Lavoro IBibliografia per l'uso dei font: AmigaROM Kernel References Manual: Libra-ries and Devices - Addison Wesley.*

197