|
ATTIVITÀ
:
Programmare
:
Linguaggi
:
Linguaggio C
:
Imparare il C a costo ZERO
Referente: Alessandro MENOZZI (parti di Eugenio MORASSI)
Imparare il C a costo ZERO
Non tutti sanno che per programmare in modo hobbistico con il nostro Mac non è indispensabile comprare costosissimi compilatori ed
ambienti di programmazione... Quella che trovate di seguito vuole essere una breve guida, per tutti coloro che si affacciano alla programmazione
con il Macintosh sotto Mac OS Classic (7.x --> 9.x).
Alessandro MENOZZI
Purtroppo parti di questo articolo di Alessandro non sono più plausibili, ma la pagina resta ancora interessante, se non altro da punto
di vista storico; peraltro, se fate un salto nella rinnovata pagina del Mac OS
X, scoprirete che oggi è nuovamente possibile (grazie alla casa madre in Cupertino ed il programma sviluppatori ADC - Apple Developer
Connection)... imparare a programmare a costo zero sul Mac.
Eugenio MORASSI
Indice
- Parte 1: Introduzione alla programmazione per Macintosh
- Parte 2: il linguaggio C (e...)
- Parte 3: preparatevi a diventare veri "guerrieri del codice"
- Bibliografia & Link
- Copyright e Licenza
Gli eventi
Una delle caratteristiche che ha reso il Macintosh così differente dagli altri computer sta nel fatto che il Mac è un computer
event-driven, controllato per mezzo di eventi.
Nei Macintosh prodotti fino a qualche tempo fa, il Mac OS (si chiamava System) risiedeva in parte sulla scheda madre, in un modulo ROM (memoria a
sola lettura) ed in parte era caricato al momento della fase di avvio dal disco. Oggi, i nuovi Mac non possiedo più le ROM fisiche, ma
caricano tutto il sistema operativo dal disco di avvio e ha dunque fatto la sua comparsa un file chiamato proprio Mac Os ROM,
contenuto nella Cartella Sistema (si parla anche di ROM in RAM, in quanto all'avvio il file ROM viene caricato in una zona
riservata della RAM). Comunque sia, uno dei compiti del sistema operativo, nel nostro caso proprio il Mac OS, è quello di controllare
tutto l'hardware di cui dispone il nostro computer: mouse, tastiera, disk drive, ma anche CPU, il microprocessore che controlla l'audio, e
così via. Molti degli eventi vengono generati a livello hardware: quando premiamo ad esempio il tasto del nostro mouse, lo
rilasciamo, oppure premiamo un tasto sulla tastiera, o ancora inseriamo un dischetto nel floppy (per quelli che ancora lo hanno...) viene
generato un evento, che permette al Mac, o meglio al Mac OS di capire le nostre richieste. Gli eventi vengono memorizzati in una parte della RAM
che si chiama EventQueue che ne contiene in una coda appunto fino a venti. Tutti i programmi per Mac consistono in un
EventLoop, cioé di un ciclo che intercetta gli eventi leggendoli proprio da questa coda.
Con questo sistema il
software è capace di intercettare solo gli eventi che gli interessano (quelli il cui case of è presente nel proprio
EventLoop. Si dice che il software è un listner (ascoltatore) e reagisce solo ai 'suoni' conosciuti. Una conseguenza di questo modo di
operare è ad esempio quella che il comando Cmd-C (Mela-C, Copia) viene eseguito dal sistema (dal Finder per l'esattezza) se
non c'è alcuna applicazione attiva ovvero allinterno dell'applicazione correntemente utilizzata.
In breve un programma chiede
alla EventQueue l'evento più vecchio e controlla se lo ha tra quelli di prorio interesse. Se si cancella l'evento dalla coda ed esegue il
codice relativo, se no lascia che a fare questo siano le altre applicazioni aperte; per ultimo, se nessuan applicazione attiva lo ha
riconosciuto, lo fa il Finder. Dovreste avere chiaro, ora, che il comando Copia, ad esempio, viene eseguito quasi sempre dal Finder, visto che
quasi nessun programmatore si sentirebbe di riscriverlo. Alcune applicazioni (come Photoshop) invece utilizzano il proprio ed intercettano anche questo evento.

Il Macintosh Toolbox
Tutte le applicazioni che girano sul nostro Mac hanno una cosa in comune: l'aspetto, ovvero quel "look and feel" che tutti conosciamo.
Questo perche' le applicazioni fanno uso delle API (Application Programmers Interface) messe a disposizione dal sistema: le API, anche se in
ambiente Mac si preferisce parlare di System Software Managers, sono pacchetti di funzioni racchiuse in quello che si chiama
Macintosh Toolbox. Sono vere e proprie funzioni ad alto livello (almeno si utilizzano come tali) che richiamate dal programmatore permettono
di sfruttare l'interfaccia grafica del Macintosh, e non solo. Originariamente, il linguaggio di sviluppo ufficialmente scelto per il Mac era il
Pascal, e per tale ragione le funzioni dei ToolBox si aspettano come argomenti dati e strutture di tipo Pascal, così come lo sono i
parametri restituiti. Dal Mac OS 8 in poi buona parte dei Managers sono stati riscritti nativamente per PPC ed in linguaggio C, e dunque
sono mutate anche le loro interfacce; per questo se ne è parlato tanto diffusamente nella pagina del Mac OS 9. Questo non significa che il programmatore sia costretto a
programmare in Pascal, è sufficente un po' di attenzione (bastera' ricordare ad esempio che una stringa Pascal è rappresentata in
modo differente dal C. Fortunatamente vi sono gia' pronte numerose funzioni che eseguono le conversioni del caso). Possiamo vedere il
Macintosh Toolbox come un vero e proprio contenitore di pacchetti di funzioni (system software routines) che permettono di interfacciare il
nostro programma alle risorse del nostro Mac. Tipicamente esisterà un pacchetto per ogni tipo di risorsa. Per fare un esempio il
Toolbox comprende, tra gli altri, i seguenti "managers" o pacchetti di funzioni:
- QuickDraw
- Window Manager
- Dialog Manager
- Control Manager
- Menu Manager
- TextEdit
- Event Manager
- Resource Manager
- Sound Manager
- ...
Per poter programmare in ambiente Macintosh è necessario quindi avere una buona conoscenza delle funzioni messe a disposizione del
Toolbox.
Altre System Software Routines non fanno parte del Toolbox ma sono fornite dal sistema operativo, ovvero dal Mac OS. Ne sono un
esempio:
- Process Manager
- Memory and Virtual Memory Manager
- File Manager
- Device Manager
- ...
Altre ancora sono introdotte dalle Estensioni al sistema operativo, l'esempio più evidente è costituito dalle
routines messe a disposizione da QuickTime. Le Estensioni sono un mezzo inesauribile per aumentare la capacità operativa dei Mac, ma
anche la pricipale fonte di guai e di malfunzionamenti.
Il concetto di risorsa
Il Mac sfrutta un altro concetto molto importante, che fortunatamente può rendere più semplice il lavoro del programmatore: nei
programmi è necessario mantenere separata l'area dati da quella del codice. L'area dati è strutturata in modo regolare, e
racchiude quelle che si chiamano risorse della applicazione. In generale una risorsa è costituita da un record consistente, unico e
strutturato, e puo' ad esempio essere usata per descrivere le finestre, i menu, delle immagini, icone, bottoni, stringhe di teso e molto altro
ancora. A queste vanno a sommarsi le risorse messe a disposizione dal sistema operativo, quali ad esempio fonts, patterns, ancora le icone
di sistema, ecc... I vantaggi sono innumerevoli: senza dover ricompilare il sorgente è possibile modificare il linguaggio con cui
appaiono i messaggi della nostra applicazione, semplicemnte aprendo la risorsa che contiene le stringhe di testo e modificandole. Allo stesso
modo potremo cambiare la disposizione dei menu, e così via.
Tipicamente un file Macintosh si compone di due parti: la
Data Fork e la Resource Fork. La prima generalmente contiene il codice oggetto, la seconda le risorse, che come
detto non sono altro che collezioni di dati appartenenti ad una particolare e definita struttura.

ResEdit
Esistono programmi che permettono di editare la Resource Fork in modo immediato e molto semplice. Tra tutti, uno dei più diffusi è
sicuramente ResEdit, della stessa Apple, che è distribuito
gratuitamente. Lo si trova su numerosi CD, allegati alle principali riviste per Macintosh, da "Macintosh Magazine" and "Internet", a
"MacFormat Italia", tanto per citarne alcune (senza la pretesa d'aver citato le migliori, anzi...). Il punto di forza di ResEdit sta nella
sua semplicità d'uso. È possibile creare ed editare le risorse in modo visuale, con l'utilizzo del mouse, al punto che creare il
proprio menu o le proprie finestre di dialogo diventa semplice quanto disegnare a video con un programma di grafica. Non dovrebbe essere
difficile riuscire a reperire ResEdit su qualche sito http internet. Ad esempio lo potete trovare all'indirizzo:ASU n.10964 All'indirizzo:
http://developer.apple.com/techpubs/mac/resedit/resedit-2.html è invece disponibile un'utile libro in formato PDF che riguarda
ResEdit.
Se avete difficoltà nello scaricarlo, ricordatevi che stiamo preparando un CD contenente tutte le risorse freeware e
sharewaree inerenti la programmazione Mac. Per maggiorni informazioni leggete il Paragrafo 3.3.

Scopriamo il C
A parere di molte persone, l'utente medio Macintosh non è interessato alla programmazione. è parere degli stessi Apple Center,
almeno di quelli che ho interpellato per richiedere informazioni su quali compilatori fossero disponibili per la nostra macchina. Alla domanda
"vorrei un compilatore C" mi hanno passato di ufficio in ufficio, rimbalzandomi da una persona all'altra, per carita' tutte molto gentili, ma
altrettanto ignoranti in materia. Alla fine la risposta è stato un timido: "credo che il C sia un linguaggio di programmazione per PC che
si usava qualche anno fa.". D'accordo che siamo lontani dai tempi del magico Aplle II, con tanto di linguaggio AppleSoft BASIC in ROM,
pero'...
Oggi qualcosa sta iniziando a cambiare, anche grazie all'introduzione dell'iMac che ha contribuito a diffondere il Macintosh anche al di fuori
dell'ambito ristretto del settore grafico professionale, in cui il Mac è molto diffuso.
Non crediate pero' che sia semplicissimo reperire informazioni utili riguardo alla programmazione con il Mac. Tutto questo lo dico non tanto per
scoraggiarvi, quanto per mettervi subito in guardia: se volete programmare con il vostro Mac dovrete dari da fare per recuperare cio' di cui
avrete bisogno, a partire dagli strumenti necessari: i compilatori. Fortunatamente Internet ci viene in contro. Non crediate che
procurarsi un compilatore debba essere necessariamente dispendioso: in rete è possibile trovare moltissime risorse a poco prezzo, in
alcuni casi senza spendere assolutamente nulla.
La conoscenza del C è quasi obbligatoria: la maggior parte delle applicazioni oggi e scritta in C. È anche vero comunque che
oggi in commercio esistono strumenti che permettono di programmare secondo un principio molto più intuitivo ed immediato, ovvero i
cosidetti ambienti di sviluppo visuali. Questi sono disponibili anche per l'ambiente Macintosh, per il quale troviamo pacchetti come "Vip-C",
"Vip-BASIC", oppure l'ottimo "RealBASIC". In ogni caso una volta che si è appreso il linguaggio C diventa molto più semplice
produrre codice multipiattaforma, che con qualche modifica possa essere portato su diverse piattaforme. In questo CodeWarrior è maestro.

CodeWarrior
Per progetti di un certo livello la conoscenza del C diviene praticamente indispensabile. L'ambiente C per eccellenza per la programmazione Mac
è decisamente CodeWarrior della Metrowerks. Si tratta di un ambiente completo, che permette di realizzare codice eseguibile per Mac OS, ed addirittura per
Windows, Linux ed altri sistemi operativi ancora (si avete capito bene. Potrete realizzare applicazioni Windows 95/98/NT che gireranno su
piattaforma Intel con il vostro Mac) ottimizzato per x86, AMD, PowerPC o 68k. Il pacchetto comprende i compilatori C, C++, Object C, Java e
Pascal, ed i linguaggi possono essere utilizzati tutti assieme grazie all'IDE (ambiente di sviluppo interno) integrato. Unico neo, per
un appassionato, il prezzo un po' alto. Esiste comunque la possibilita' di acquistare la versione Accademic, riservata a studenti ad un prezzo
veramente competitivo. Inoltre in rete si trovava la versione Lite, ora non più disponibile, che permetteva di compilare, modificare
e realizzare applicazioni per Mac di progetti esistenti. Ciò, non toglie che riusciate a venirne in possesso da CD-Rom allegati a
riviste o da collezioni vecchie di Freeware. Sorgerà una domanda in voi: perché non ce lo dave voi? Beh, l'intenzione
c'è, ma attendiame che Metrowerks ci risponda ufficialmente in merito alla possibilità di ridistribuire il pacchetto come
UserGroup. Comunque... È sufficente procursi CodeWarrior in una delle sue incarnazioni, una manciata si esempi e con una spesa nulla
possiamo gia' iniziare a realizzare qualche applicazione. Al sito della rivista MacTech
troviamo una serie nutrita di esempi che possiamo modificare a piacimento, salvare e ricompilare con la versione lite di CodeWarrior.
Lo
so cosa state pensando. È necessario procurarsi anche un buon libro, ed avete proprio ragione. Non disperate pero', almeno se avete
un minimo di conoscenza della lingua inglese. Beh, se la vostra conoscenza di base del C ha qualche lacuna vi consiglio il libro di Dave Mark
"Learn C on the Macintosh", 2nd Edition, edito dalla AW (prezzo circa 34$, che lievitano a circa 100.000 lire nelle librerie italiane).
Si tratta di un libro che vuole insegnare la programmazione in standard C ed è indirizzato a chi si trova alle prime armi, che NON tratta
neppure di striscio la programmazione in ambiente Mac. Ha l'unico pregio di essere venduto con allegato un CD contenente proprio CodeWarrior
Lite, ma puo' essere sostituito da un qualsiasi altro libro sul linguaggio C ansi, magari in italiano. Se pero' masticate gia' qualcosa di
C, allora il consiglio è di orientarsi su qualcosa di più impegnativo, che si addentri piu' nell'ambiente Macintosh, in modo da
permette di sfruttare il supporto dei Macintosh Toolbox. Ad esempio "Programming Starter Kit for Macintosh" di Jim Trudeau, edito dalla
Hayden Books (45$, l'ho comprato in Italia a circa 130.000), viene indicato come la soluzione completa, "The Complete Solution", contiene il
solito CD con CodeWarrior Lite, e vi accompagna passo passo nella realizzazione di una vera applicazione Mac. Nelle oltre 800 pagine di cui e
composto trova spazio anche un'appendice con una introduzione al linguaggio C, molto utile anche come riferimento veloce. Tutto sommato pero', a
mio parere il migliore manuale di riferimento per il programmatore Mac a livello non professionale, e "MACINTOSH C - A Hobbyist's Guide to
Programming the Mac OS in C" e, udite udite, è completamente gratuito! Lo trovate anche questo a partire dal sito della
rivistaMacTech, piu' precisamente nella sezione dedicata alla programmazione C http://www.mactech.com/macintosh-c/ L'ultima versione disponibile riporta indicazioni utili a chi voglia realizzare
applicazioni per Mac OS 8, ed è (al momento) la numero 2.2. Si compone di oltre 900 pagine ed è consultabile on line, oppure
può essere scaricata gratuitamente nei formati PDF (richiede Acrobat Reader 3 o succ.) e Word (richiede Word98).
Non solo, chi
preferisce il Pascal puo' trovare l'attrettanto indispensabile all'indirizzo Macintosh Pascal/. Sempre nei tre formati HTML, PDF e Word.

MPW (Macintosh Porgrammer’s Workshop)
Un'altra occasione per programmare senza spendere una lira, è quella offerta dalla Apple, che ha da poco rilasciato gratuitamente una suite che permette di programmare in C su Macintosh. Il pacchetto si chiama
MPW (Macintosh Programmer's Workshop) e si tratta di un prodotto completo, con supporto per C, C++ e Assembler per realizzare applicazioni Mac e
PowerMac. Inoltre è estremamente configurabile ed espandibile. Utilizarlo pero' non è così semplice, e viste le dimensioni in MByte è quasi improponibile scaricarlo da internet. Speriamo
che qualche rivista decida di inserirlo in uno dei tanti CD allegati, spesso pieni zeppi delle solite inutili applicazioni.
e... (Java dove lo mettiamo?)
Non dobbiamo dimenticare che un modo gratuito per incominciare a programmare con il nostro Mac e quello di procurarsi un JDK (Java Development
Kit), solitamente completamente gratuito, che permette di realizzare le proprie applicazioni Java. Apple mette a disposizione gratuitamente il proprio SDK, SoftWare Development Kit, e il Mac OS Runtime for Java
(MRJ) per poter eseguire le applicazioni Java. Purtroppo ancor oggi (agosto 2000) è disponibile solo la versione compatibile con la
versione 1.1.8 del JDK ufficiale della Sun. Nessun supporto per il JDK 1.2 e versioni superiori, ovvero niente da fare per applicazioni scritte
in Java 2. Java puo' essere considerato come un linguaggio di programmazione a meta' tra il C ed il C++, che cerca di unire la semplicita' e
versatilità del C con la potenza propria di un linguaggio orientato ad oggetti quale il C++, sollevando il programmatore da molti
grattacapi. Va ricordato che Java nasce come un linguaggio che permette di creare applicazioni totalmente svincolate dall'hardware e dalla
piattaforma su cui sono implementate. Il vantaggio principale di tale filosofia risiede nel poter eseguire la propria applicazione Java su
qualsiasi macchina, purchè dotata di un'opportuna Java Virtual Machine; il rovescio della medaglia sta nell'impossibilita' di sfruttare a
fondo le risorse messe a disposizione dalla piattaforma su cui si sta' sviluppando, con il risultato in diretta conseguenza di applicazioni meno
performanti (in Java non esiste alcun riferimento diretto a A.P.I - Application Programming Interfaces - proprie di alcun sistema
operativo). Un qualsisi libro sull'argomento puo' essere un buon punto di partenza: solitamente includono un CDROM contenente il JDK per
Windows e per Macintosh. In rete è d'obbligo dare uno sguardo al sito ufficale creato appositamente da chi ha introdotto Java: Sun http://java.sun.com Unica nota decisamente negativa: il rilasio delle ultime versioni di
Java per Mac OS avviene spesso in ritardo rispetto a quelle per Windows e Linux :-(

Finalmente si inizia!
Ecco quindi riassunto tutto cio' che vi serve:
- Procuratevi ResEdit;
- procuratevi CodeWarrior (magari Lite...);
- scaricate "MACINTOSH C - A Hobbyist's Guide to Programming the Mac OS in C"...
- ...dallo stesso sito scaricate i progetti degli esempi presentati nelle pagine della guida;
Sarete così pronti per realizzare le prime vostre applicazioni per Mac, senza aver speso assolutamente nulla!!
Il primo programma in C: Hello World!
Iniziamo... Ho preparato un progetto pronto per essere compilato con CodeWarrior Lite (adatto alla versione IDE 3.0). Per una volta
concedeteci una divagazione dal "think different" e... indovinate cosa fa? Apre una console e saluta. Di seguito trovate i links per
scaricare il solo sorgente oppure il progetto completo di eseguibile (in versione 68k) già compilato:
Sono in un archivio compresso; per decomprimerli potete utilizzare Stufflt Expander (gratis :-). Compilare HelloWorld Procuratevi il
sorgente, decompattatelo e cliccate sul file di progetto HelloWorld.prj. Se lo avete installato correttamente (non vedo come avreste potuto
non :-), si aprirà CodeWarrior Lite, presentandovi la finestra che segue:
HelloWorld.prj
A questo punto potete aprire il sorgente con l'editor di CodeWarrior, nel nostro caso il file HelloWorld.c, semplicemente cliccandovi sopra due volte.
Per compilarlo ed allo stesso tempo eseguirlo è necessario selezionare Run dal menu Project
L'esecuzione di HelloWorld può avvenire direttamente dall'IDE di CodeWarrior
L'output L'esecuzione si presenta come segue
L'output di HelloWorld
Nota: potete modificare il sorgente a piacere, salvarlo e ricompilarlo. Purtroppo la versione Lite di CodeWarrir non vi permette di creare nuovi
progetti.
I CD-Rom del programmatore
Stiamo cercando di preparare un paio di CD contenenti tutte le risorse inerenti alla programmazione Mac. Si DEVE trattare di materiale freeware,
eventualmente shareware, E DEL QUALE SIA COMUNQUE LEGALE FARE UNA COPIA. Avremmo il piacere di scambiare materiale o link sulla programmazione
Mac con tutti quanti si interessano dell'argomento, per rendere sempre più completa la raccolta di risorse. Potete contattarci attraverso
la form di Feedback.
Bibliografia & Link
|