Originariamente pubblicato in data 16/05/1999
A
C
C
O
M
A
Z
Z
I
Introduzione al toolbox
Introduzione al toolbox
Introduzione al sistema operativo. Come funziona? Come può un programma chiedere al sistema operativo di eseguire un compito per lui?
Probabilmente molti lettori ci avranno già fatto caso: le buone idee hanno la peculiarità di sembrare scontate quando ci ripensate; capita un bel giorno di sommare improvvisamente due più due, e di giungere allo sconcertante risultato di quattro. Nel nostro caso, mentre stavamo baloccandoci con alcuni progetti per il 1988, abbiamo pensato che non è poi tanto difficile tenere una rubrica che interessi tutti i proprietari di un computer Apple II o Macintosh, e solletichi anche gli altri: basta parlare del toolbox.Ci sono 256 Kbyte di codice macchina evolutissimo nelle Rom delle macchine Apple: una quantità fino a ieri concepibile solo per la memoria utente. Lo scopo, una volta di più, è duplice. Ovviamente, c'è la curiosità di scoprire come funziona un oggetto complesso: cosa lo fa ticchettare. C'è anche uno scopo più pragmatico: accumuleremo esperienza, scopriremo qualche trucco e qualche scorciatoia in più per sfruttare meglio l'amato bene... Ripetiamo per un ultima volta la definizione di toolbox prima di cominciare: il toolbox (termine che significa "scatola degli attrezzi") è una raccolta di strumenti software scritti dai migliori programmatori che casa Apple abbia potuto reclutare e concepiti perché chiunque scriva un programma per un computer Apple possa sfruttarli, creando così un prodotto più potente, più veloce e soprattutto più semplice da usare di quanto sia possibile altrove.
Le routine sono raggruppate per scopo in gruppi (i singoli "tool", ovvero "attrezzi"), ciascuno dei quali viene attivato su richiesta del programmatore. Per lavorare sullo schermo grafico, ad esempio, è sufficiente rivolgersi a QuickDraw, il più importante dei tool, che fornisce più di duecento distinte funzioni.
Nella tabella uno scopriamo quali sono i tool del toolbox. Ciascuno di essi è capace di compiere azioni anche molto complesse su richiesta: i più semplici si limitano ad una dozzina di funzioni, ma alcuni superano abbondantemente il centinaio. Tutti i tool svolgono il proprio compito con notevole sofisticazione: non basta dare un bel nome al codice che gestisce una stampante per farne un Print manager!
Ecco elencati i tool dei computer Apple, in coppie di corrispondenza quasi perfetta.
Macintosh Apple IIgs Scopo
Segment loader System loader Caricamento programmi
Package manager Facilita l'uso del toolbox,
Trap dispatcher Tool locator ne permette l'aggiornamento
Memory manager Memory manager Gestione della memoria Ram
Toolbox utilities Miscellaneous tools Di tutto un po: uso dell'o-
O.S. utilities rologio ed altro.
QuickDraw QuickDraw II Routine grafiche evolute
Desk manager Desk manager Gestione della "scrivania"
Event manager Event manager Controllo delle azioni
dell'utente
Sound manager Sound manager Creazione di suoni
SANE ( SANE Routine matematiche evolute
Window manager Window manager Gestione finestre
Menu manager Menu manager Gestione menu a discesa
Control manager Control manager Sfogliatori, bottoni, etc.
Print manager Print manager Uso delle stampanti
TextEdit LineEdit Trattamento testi
Dialog manager Dialog manager Gestione finestre di colloquio
Scrap manager Scrap manager Gestione taglia-e-incolla
Standard file package Standard file operat. Accesso ai file
Font manager Font manager Uso degli stili dei caratteri
List manager List manager Manipolazione liste col mouse
Resource manager --- Permettono la nazionalizzazio-
International utilities --- ne dei programmi. Cominciamo la nostra passerella da un tool che normalmente resta nell'ombra, senza che noi utenti possiamo accorgerci della sua esistenza. Non ci vuole molto acume per intuire che esiste uno strumento che crea e gestisce i menù a discesa (il menu manager), ma è considerevolmente più difficile accorgersi dell'esistenza del Tool locator.
Il Tool locator (questa è terminologia GS - come potete notare dalla tabella Macintosh utilizza il Trap dispatcher e il Package manager per ottenere le funzionalità equivalenti) risolve un problema di notevolissima rilevanza: senza di lui infatti sarebbe impossibile utilizzare il toolbox.
Sappiamo che il toolbox consiste di migliaia di funzioni, pronte per essere usate da un programma: dalla funzione che, consultando l'orologio, ci informa sulla data corrente fino a quella che fa apparire sul video il Pannello di controllo.
Tuttavia, perché sia possibile attivare una funzione qualunque, è necessario conoscere il suo indirizzo. Il microprocessore che esegue tutto il lavoro in un computer può attivare una routine, (una funzione o una procedura, si direbbe in Pascal) usando la istruzione JSR, "jump to subroutine". Quella istruzione richiede l'indirizzo della routine.
E' un po' come quando voi fate un ordine postale: potete mandare una lettera con la richiesta, o magari un pacco oppure un vaglia con i soldi, ma in ogni caso dovete conoscere l'indirizzo della ditta che riceve gli ordini.
Nel caso del nostro computer, possiamo pensare a tre possibili soluzioni del problema: la prima soluzione è primitiva (per esempio, la usa il Pc Ibm nel Bios), la seconda è usata in Apple IIgs e la terza in Macintosh.
La prima soluzione è la più semplice: richiediamo che il programmatore conosca l'indirizzo di ogni routine che vuole usare. Possiamo pubblicare una bella guida, una specie di rubrica telefonica dove associamo ad ogni routine il suo indirizzo: se il programmatore ha bisogno di utilizzare, per esempio, la funzione chiamata "TECopy" per gestire le operazioni di copia e incolla consulterà un bel librone dove potrà leggere l'indirizzo ad essa associato. Istruirà allora il suo programma perché esso esegua un salto JSR a quell'indirizzo. (Nel Pc Ibm il programmatore deve conoscere l'indirizzo di una tabella degli indirizzi: gira gira, il sistema è sempre quello).
Questa soluzione non ci va bene. Si rende spesso necessaria una modifica al codice che costituisce il toolbox: e quando si sostituiscono le Rom può cambiare anche la mappa di memoria del computer. Ora, quando una routine viene modificata certamente diventerà più lunga o più corta, e pertanto molti indirizzi dovranno cambiare. Si potrebbe, certo, stampare una edizione aggiornata della guida; in fin dei conti la Sip prepara una nuova edizione della sua guida ogni anno. Ma se Apple facesse una cosa del genere tutti i vecchi programmi non funzionerebbero più, perché continuerebbero a "telefonare ai vecchi numeri" senza che sia possibile informarli del cambio.
Veniamo alla soluzione GS. Il programmatore deve conoscere un solo indirizzo, quello di Tool locator (eccolo entrare in scena): Tool locator effettua un servizio "di cassetta postale" o, se preferite, "di centralinista". Riceve tutte le chiamate e le smista alle routine.
Se il programma ha bisogno di usare la routine TECopy che abbiamo citato prima chiamerà Tool locator, comunicandogli la sua necessità ed aggiungendo un eventuale messaggio per la routine (cioè i parametri, o se preferite lo input). Tool locator, diligentemente, dirotterà la chiamata all'indirizzo di quella routine che lui conosce. Come può conoscerla, si chiederà qualcuno? Lui, e lui solo, possiede la famosa "guida telefonica" di cui parlavamo prima: nessun altro ne ha bisogno.
Tool locator svolge anche altri compiti, oltre a servire da cassetta postale: ci ritorneremo dopo aver parlato della soluzione Macintosh.
Per quanti conoscono un po' di assembler, ecco come viene fatta una richiesta al Tool locator:
TeCopy EQU 14 ;Numero di riferimento di TeCopy
Dispatcher EQU $E10000 ;Indirizzo di Tool locator
...
LDX #TeCopy ;Si mette in X il n° di riferimento
PEA {BEGIN relazione_articoli_paragrafi} {testo} {rawHtml} {END relazione_articoli_paragrafi}00 ;Si mettono sullo stack i parametri
...
JSL Dispatcher ;Si chiama Tool locator
Terza soluzione, usata in Apple Macintosh. Con questa soluzione non è neppure necessario conoscere l'indirizzo del Locator!
Si tratta di un trucco che chiama in causa il modo in cui funzionano i microprocessori. Esiste sempre una istruzione speciale (o una intera famiglia, nel caso del 68000 di Macintosh) che non corrisponde a nessun comando: se viene eseguita il processore si interrompe ed esegue una serie di operazioni che culminano cedendo il controllo ad un certo indirizzo di memoria. L'uso tradizionale di questa caratteristica è semplice: nel caso in cui venga eseguita una operazione non valida, il processore smette di eseguire il programma che la conteneva e cede il controllo al sistema operativo (che si trova in quel certo indirizzo speciale) che salva la situazione.
Nel nostro caso in quel certo indirizzo si trova, guarda caso, il Trap dispatcher (parente strettissimo del Locator di GS): questi deve il suo nome al fatto che reagisce quando il programma è caduto in trappola (trap) passando il controllo alla routine richiesta (dispatching).
Come notate l'effetto netto è il medesimo nei due computer Apple. Per la cronaca, le primissime versioni di Apple IIgs (e tutti i vecchi Apple III) usavano un Trap dispatcher, che è stato poi abbandonato perché, con il processore 65816 del IIgs, il meccanismo del Locator è più veloce.
Che altro fa il Tool locator? Ricordate che il toolbox è una struttura viva e vegeta che viene continuamente migliorata (resa più veloce, più flessibile, più vasta). Pertanto, quando viene prodotto un nuovo tool, deve essere possibile usarlo nello stesso modo dei tool già esistenti.
Mentre il codice dei vecchi tool si trova nella memoria permanente Rom, i nuovi tool si trovano nella memoria temporanea Ram, e vengono caricati come un qualunque programma (quando viene diffusa una versione successiva delle Rom, cosa che avviene ogni qualche anno, anche i nuovi tool sono inclusi).
Quando il computer viene acceso, il codice dei nuovi tool viene caricato ed il Tool locator (su Macintosh si tratta di Package manager, un tool distinto da Trap dispatcher ma che lavora fianco a fianco con esso) permette di trattarli in modo perfettamente analogo a quelli Rom. Non c'è modo per il programma di distinguere tra i tool Rom e quelli Ram.
Su Apple IIgs il codice dei tool Ram si trova nella cartelletta Tools dentro System. Su Macintosh si tratta di risorse 'PACK' (vedremo in una prossima puntata cosa sia una risorsa) del file System.
Infine, Tool locator e il cugino Package manager permettono di sostituire ad una funzione memorizzata permanentemente in Rom che si scopre essere errata una sostituta in Ram. Le chiamate che sarebbero pervenute alla funzione bacata sono dirottate sulla versione corretta che è stata installata.
In Apple IIgs le routine che sostituiscono la Rom sono memorizzate nel file Tool.Setup della cartelletta System.setup; in Macintosh si tratta, ancora, di risorse.