posta - Amiga Magazine Online

posta - Amiga Magazine Online posta - Amiga Magazine Online

amigamagazine.info
from amigamagazine.info More from this publisher
16.06.2013 Views

S e avete due programmi, uno dei quali produce dei dati che il secondo deve leggere, potete porre i dati intermedi nel RAM Disk. Ecco un esempio: supponiamo che vogliate creare l'elenco del contenuto di una directory in ordine alfabetico. Il comando List genera l'elenco che invierete nel RAM Disk. Il comando Sort leggerà il file e lo ordinerà. Potrete impartire i seguenti comandi: CD DFO : (il drive O diventa la direc- tory corrente, può essere qualsiasi altro drive) LI ST >RAM : TEMP (creiamo I'elen- co della directory; invece di inviare I'output verso lo schermo, lo man- diamo in un file di nome Temp nel RAM Disk) STACK 50000 (alcune versioni del comando Sort necessitano di un grosso stack; ne eleviamo di conse- guenza la quantità) SORT RAM : TEMP * (S0rt legge i dati dal file RAM:Temp e li invia ordinati verso il file *, che corrisponde allo schermo. Vedrete apparire l'elenco dei file in ordine alfabetico) QUANDO I DATI SONO TROPPI Il metodo citato funziona bene per compiti piuttosto semplici e limitati. Volete esaminare comodamente il contenuto di una directory? Inviate il suo elenco in un file in RAM: e legge- telo mediante More o con un text editore come Ed. Qualche volta, tuttavia, il file inter- medio può essere troppo grande da gestire. Potrebbe non esserci memoria sufficiente per contenere il 76 AMIGA MAGAZINE file. In tal caso si può usare PIPE. Ecco come funziona PIPE: riceve i dati generati da un programma e quando il suo buffer è pieno, pone in stato di attesa il programma che invia i dati. Quando un altro pro- gramma legge i dati da PIPE, lo spazio per i dati diventa nuovamen- te disponibile e PIPE richiede altri dati al programma che li invia. Se il programma che genera i dati li produce più rapidamente di quanto il programma ricevente possa ge- stirli, PIPE rallenterà la trasmissione. Se il programma ricevente è più veloce di quello che li invia, PIPE farà scorrere i dati direttamente. In entrambi i casi non verrà a mancare la memoria. USIAMO PIPE Volete vedere PIPE al lavoro? Aprite due Shell e posizionatele in modo di poterle osservare contemporanea- mente. PIPE non ha necessariamente biso- gno di due finestre per funzionare, le usiamo solo per capire come funzio- na PIPE. Ecco il nostro obiettivo: vogliamo esaminare un programma, per esempio Clock, alla ricerca della stringa INT al fine di capire se il programma usa I'lntuition.library. Dal momento che Clock è un pro- gramma, non possiamo leggerlo come se fosse un semplice file di testo. Ma possiamo esaminarlo mediante il comando Type Hex. Selezioniamo una delle due finestre e digitiamo: TYPE >PIPE:AA HEX SYS:UTILITIES/ CLOCK Type inizierà a inviare il dump esa- decimale di Clock verso PIPE:AA. Ben presto PIPE sarà colmo, I'attivi- tà del disco cesserà e la finestra non darà più segni di vita. Non possiamo inserire nuovi co- mandi perché Type non ha ancora terminato il suo lavoro. Sta aspettan- do che PIPE gli richieda altri dati. Iniziamo a estrarre i dati da PIPE. Selezioniamo la seconda finestra e digitiamo MORE PIPE:AA. Stiamo chiedendo a PIPE di leggere il contenuto di AA mediante More. Vedrete apparire nella finestra un lungo elenco di numeri e lettere. E' solo una parte dell'output di Type Hex che proviene da PIPE. Ora chiediamo a More di ricercare la stringa INT. Premiamo il tasto del punto, seguito da l, N, T e Return. Vedremo lo schermo modificarsi immediatamente. Sul lato destro, apparirà la scritta "intuition.library". L'abbiamo trova- ta! Premiamo il tasto N per cercare altre occorrenze di INT. Quando raggiungeremo la fine del file, accadranno due cose. La prima finestra tornerà a vivere, perché ha completato l'esecuzione di Type. Nella seconda finestra, apparirà il messaggio "not found" che segnala la fine del file AA di PIPE. Premete Q e More terminerà. Non chiedete a More di terminare prima di raggiun- gere la fine del file. Se lo fate, verrà meno il programma che svuota PIPE e il programma inviante resterà bloccato. A O Com ute Publication International, Ltd., 1991. futti i diritti sono riservati.

miga è sicuramente un com- puter insolito: permette di svolgere egregiamente una grande quantità di applicazioni ad un costo ridotissimo, inoltre quando la configurazione base non è più sufficiente, non ci sono difficoltà ad espandere il computer in direzioni particolari. E' sicuramente noto a tutti che le elevate capacità di questo compu- ter sono dovute al lavoro dei chy? custom capaci di generare ottima grafica, spostare blocchi di memo- ria in modo veloce, generare suoni paragonabili ai sintetizzatori della prima generazione, ecc. Raramente si elogia il sistema ope- rativo, trovo che non si possa resta- re impassibili ad un computer che dispone di una ROM 256 K nelle ver- sioni 1.3 e di ben 51 2 K nelle versioni 2.04. Pochi computer possono vantare software di qualità unito ad una in- terfaccia grafica standard operante in un sistema multitasking a sole 700.000 lire! Il Kickstart è composto da varie entità quali librerie, device, risorse, task, ecc; ogni entità ha una speci- fica funzione e svolge parte di un lavoro sinergico. Per avere una visione d'insieme del funzionamento del computer, è doveroso conoscere discretamente ogni singola parte, questa rubrica ovviamente vi aiuterà ad acquisire questa visione globale. In Amiga le librerie si trovano quasi tutte in ROM (come è naturale che sia!), ma alcune, per motivi di eleva- te dimensioni o possibili cambia- menti in nuove versioni del S.O., sono collocate nella directory LIBS: del Workbench. Il fatto di dover ca- ricare alcune librerie da disco può sembrare una forte limitazione, e in parte ciò è vero, ma questo ha an- che permesso il proliferare di molte librerie di pubblico domino di altissi- ma qualità, basti pensare al proget- to ARP, alla libreria PowerPacker, alla req.library, alle librerie MIDI, ecc. Nella tabella 1 sono state elencate le librerie della versione 1.3 del Kickstart. Questa lista è stata ottenuta tramite I'ausilio del volume Amiga ROM Kernel Manual: Includes & Auto- docs, pubblicazione ufficiale Com- modore-Amiga in cui sono elencate e discusse tutte le funzioni di tutte le librerie 1.3 (oltre ad esaurienti infor- mazioni sul formato IFFe sull'uso dei device). E' significativo notare che alcune librerie, come la info.library, non sono dichiarate nei ROM Kernel Manual nonostante siano presenti nel disco del Workbench fin dalle prime release del sistema operati- vo, inoltre, disponendo di utility ade- guate come ResAnalyzer, Xoper, ARTM, ecc, capaci di indagare tra le liste di Exec, si può notare che spesso sono presenti altre librerie non documentate, come, ad esem- pio, la ramlib.library. Di queste librerie non si sa nulla e su di esse si possono fare solo ipotesi, da alcune prove ho potuto appurare che la info.library viene utilizzata quando si richiede un info da Work- bench, la ramlib.library viene chia- mata quando si invoca per la prima volta RAM:, mentre la version.library viene utilizzata quando si richiede un version da Workbench o si lancia l'omonimo commando da CLI. Volendo fare alcune considerazioni sulle librerie private, si può citare il caso della info.library, non più pre- sente nell'OS 2.04. Probabilmente gli sviluppatori della Commodore avevano già previsto da tempo di inglobare questa libre- ria all'interno di un'altra (workbench.library), e non hanno diffuso le informazioni sul suo utiliz- zo nell'intento di limitare la diffusio- ne di programmi incompatibili. Ogni libreria Amiga dispone sempre di un puntatore denominato BASE, il quale punta ad una struttura library, definita nei file include in questo modo: struct Library struct UBYTE UBYTE UWORD UWORD UWORD UWORD APTR ULONG UWORD i; Node lib-Node; lib-Flags; lib-pad; 1ibNegSize; lib-PosSize; lib Version; lib Revision; lib-IdString; lib-Sum; lib-0penCnt; Il primo campo è gestito automati- camente dal sistema operativo e serve per concatenare questa strut- tura alle strutture library di ogni sin- gola libreria caricata nel sistema. In questo modo si viene ad avere una lista facilmente accessibile, conte- nente le informazioni di tutte le libre- rie sparse nella memoria. lib-Flags indica lo stato della libreria in esa- me, nella versione 1.3 del Kickstart i flag possono essere quattro: AMIGA MAGAZINE 77

S<br />

e avete due programmi, uno<br />

dei quali produce dei dati che<br />

il secondo deve leggere, potete<br />

porre i dati intermedi nel RAM<br />

Disk. Ecco un esempio: supponiamo<br />

che vogliate creare l'elenco del<br />

contenuto di una directory in ordine<br />

alfabetico. Il comando List genera<br />

l'elenco che invierete nel RAM Disk.<br />

Il comando Sort leggerà il file e lo<br />

ordinerà.<br />

Potrete impartire i seguenti comandi:<br />

CD DFO : (il drive O diventa la direc-<br />

tory corrente, può essere qualsiasi<br />

altro drive)<br />

LI ST >RAM : TEMP (creiamo I'elen-<br />

co della directory; invece di inviare<br />

I'output verso lo schermo, lo man-<br />

diamo in un file di nome Temp nel<br />

RAM Disk)<br />

STACK 50000 (alcune versioni del<br />

comando Sort necessitano di un<br />

grosso stack; ne eleviamo di conse-<br />

guenza la quantità)<br />

SORT RAM : TEMP * (S0rt legge i dati<br />

dal file RAM:Temp e li invia ordinati<br />

verso il file *, che corrisponde allo<br />

schermo. Vedrete apparire l'elenco<br />

dei file in ordine alfabetico)<br />

QUANDO I DATI SONO TROPPI<br />

Il metodo citato funziona bene per<br />

compiti piuttosto semplici e limitati.<br />

Volete esaminare comodamente il<br />

contenuto di una directory? Inviate il<br />

suo elenco in un file in RAM: e legge-<br />

telo mediante More o con un text<br />

editore come Ed.<br />

Qualche volta, tuttavia, il file inter-<br />

medio può essere troppo grande da<br />

gestire. Potrebbe non esserci<br />

memoria sufficiente per contenere il<br />

76 AMIGA MAGAZINE<br />

file. In tal caso si può usare PIPE.<br />

Ecco come funziona PIPE: riceve i<br />

dati generati da un programma e<br />

quando il suo buffer è pieno, pone in<br />

stato di attesa il programma che<br />

invia i dati. Quando un altro pro-<br />

gramma legge i dati da PIPE, lo<br />

spazio per i dati diventa nuovamen-<br />

te disponibile e PIPE richiede altri<br />

dati al programma che li invia.<br />

Se il programma che genera i dati li<br />

produce più rapidamente di quanto<br />

il programma ricevente possa ge-<br />

stirli, PIPE rallenterà la trasmissione.<br />

Se il programma ricevente è più<br />

veloce di quello che li invia, PIPE<br />

farà scorrere i dati direttamente. In<br />

entrambi i casi non verrà a mancare<br />

la memoria.<br />

USIAMO PIPE<br />

Volete vedere PIPE al lavoro? Aprite<br />

due Shell e posizionatele in modo di<br />

poterle osservare contemporanea-<br />

mente.<br />

PIPE non ha necessariamente biso-<br />

gno di due finestre per funzionare, le<br />

usiamo solo per capire come funzio-<br />

na PIPE.<br />

Ecco il nostro obiettivo: vogliamo<br />

esaminare un programma, per<br />

esempio Clock, alla ricerca della<br />

stringa INT al fine di capire se il<br />

programma usa I'lntuition.library.<br />

Dal momento che Clock è un pro-<br />

gramma, non possiamo leggerlo<br />

come se fosse un semplice file di<br />

testo.<br />

Ma possiamo esaminarlo mediante<br />

il comando Type Hex. Selezioniamo<br />

una delle due finestre e digitiamo:<br />

TYPE >PIPE:AA HEX SYS:UTILITIES/<br />

CLOCK<br />

Type inizierà a inviare il dump esa-<br />

decimale di Clock verso PIPE:AA.<br />

Ben presto PIPE sarà colmo, I'attivi-<br />

tà del disco cesserà e la finestra non<br />

darà più segni di vita.<br />

Non possiamo inserire nuovi co-<br />

mandi perché Type non ha ancora<br />

terminato il suo lavoro. Sta aspettan-<br />

do che PIPE gli richieda altri dati.<br />

Iniziamo a estrarre i dati da PIPE.<br />

Selezioniamo la seconda finestra e<br />

digitiamo MORE PIPE:AA.<br />

Stiamo chiedendo a PIPE di leggere<br />

il contenuto di AA mediante More.<br />

Vedrete apparire nella finestra un<br />

lungo elenco di numeri e lettere.<br />

E' solo una parte dell'output di Type<br />

Hex che proviene da PIPE.<br />

Ora chiediamo a More di ricercare la<br />

stringa INT.<br />

Premiamo il tasto del punto, seguito<br />

da l, N, T e Return.<br />

Vedremo lo schermo modificarsi<br />

immediatamente.<br />

Sul lato destro, apparirà la scritta<br />

"intuition.library". L'abbiamo trova-<br />

ta! Premiamo il tasto N per cercare<br />

altre occorrenze di INT.<br />

Quando raggiungeremo la fine del<br />

file, accadranno due cose.<br />

La prima finestra tornerà a vivere,<br />

perché ha completato l'esecuzione<br />

di Type.<br />

Nella seconda finestra, apparirà il<br />

messaggio "not found" che segnala<br />

la fine del file AA di PIPE. Premete Q<br />

e More terminerà. Non chiedete a<br />

More di terminare prima di raggiun-<br />

gere la fine del file. Se lo fate, verrà<br />

meno il programma che svuota PIPE<br />

e il programma inviante resterà<br />

bloccato. A<br />

O Com ute Publication International, Ltd.,<br />

1991. futti i diritti sono riservati.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!