coordinamento di Andrea de Prisco Programmare in C su Amiga … · AMIGA coordinamento di Andrea de...

5
AMIGA coordinamento di Andrea de Prisco Programmare in C su Amiga di Dario de Judicibus Prima puntata Iniziamo con questo articolo una nuova serie dedicata alla programmazione in C su Amiga. Tali articoli si prefiggono come scopo quello di fornire allettare una visione quanto più completa ed esauriente delle possibilità che il linguaggio C offre su una macchina come l'Amiga. Conseguentemente, una conoscenza anche elementare del C e della programmazione strutturata è prerequisito fondamentale alla comprensione di tali articoli. È opportuno inoltre, che il lettore abbia anche una certa familiarità con l'Amiga 005 tramite interfaccia CLI e con le procedure di compilazione e linkedit del C MCmicrocomputer n. 74 - maggio 1988 Gli esempi riportati nei listati [Iisting] sono scritti seguendo le convenzioni del Lattice C, ma potranno comunque es- sere utilizzati con minime modifiche an- che da altri compilatori, grazie alla eleva- ta portabilità di tale linguaggio. La terminologia utilizzata sarà, nei li- miti del possibile, completamente in italiano, per facilitarne la comprensione anche a chi abbia poca dimestichezza con la lingua inglese; tuttavia, dato che molti manuali Amiga non sono stati ancora tradotti in italiano e che comun- que ci può essere chi ha parte della propria manualistica in lingua originale, ogni qualvolta comparirà un termine specifico ne verrà data anche la tradu- zione in inglese. Viceversa, essendo il C un sottoinsieme dell'inglese, e non po- tendo ovviamente tradurre anche i ter- mini propri del linguaggio stesso [keyword], i listati riportati seguiranno la convenzione inglese anche per le varia- bili e le funzioni definite dal programma- tore. Questo servirà principalmente ad evitare la confusione che potrebbe sca- turire dallo scegliere una convenzione bilingue. In ogni caso i commenti saran- no sempre in italiano. Ogni articolo sarà diviso in due o tre parti. La prima parte introdurrà l'argo- mento che verrà trattato nell' articolo stesso e definirà gli obiettivi che si intende far raggiungere al lettore. La seconda parte costituirà il corpo vero e proprio dell'articolo. La terza parte, non sempre presente, proporrà al lettore un semplice esercizio per verificare se gli obiettivi che erano stati specificati all'i- nizio dell'articolo sono stati raggiunti. Nella puntata successiva sarà riportata una possibile soluzione dell' esercizio che servirà al lettore come verifica del livello di conoscenza raggiunto. È importante tener presente che non è assolutamente detto che il codice prodotto dal lettore e quello proposto dall'autore siano identici. È risaputo che in programmazione esistono infiniti mo- di di ottenere le stesse cose. Di fatto, la migliore verifica della bontà dei propri programmi si ha solo quando si cerca di compilarli e di farli girare [run] sul com- puter stesso. Tuttavia è sempre possibi- le ricavare dal listato proposto come soluzione ali' esercizio qualche buona idea per migliorare il proprio codice [code] Introduzione In questo primo articolo introdurremo l'Architettura Software di Sistema del- l'Amiga, definiremo i concetti base e la terminologia necessaria per quando ci inoltreremo più a fondo nella program- mazione in C dell'Amiga. Gli obiettivi che ci riproponiamo di raggiungere sono i seguenti: essere in grado di aprire una libreria in fase di esecuzione; sapere come verificare il successo dell' operazione effettuata; chiudere la libreria dopo averla utiliz- zata. Il Software di Sistema Il Software di Sistema [kernel] è quel- l'insieme di moduli che permettono di utilizzare l'hardware di una macchina. Sebbene sia sempre possibile controlla- re direttamente l'hardware via softwa- re, ciò richiede una conoscenza più che buona della struttura interna della mac- china. L'Amiga mette tuttavia a disposizione dei programmatori tutta una serie di moduli distribuiti su quattro differenti livelli. Ogni livello utilizza i servizi di quello sottostante, come mostrato in figura 1. Il livello più basso è quello immediatamente al di sopra dell'hard- ware, mentre quello più alto è quello che interfaccia direttamente l'utilizzato- re del Sistema, od utente [user] Parte dei moduli del Software di Si- stema risiedono permanentemente in una area di memoria protetta della mac- china, quella cosiddetta del KickStart. Nell'Amiga 1000 il KickStart (<<Calcio di avvio») viene caricato da dischetto su 153

Transcript of coordinamento di Andrea de Prisco Programmare in C su Amiga … · AMIGA coordinamento di Andrea de...

Page 1: coordinamento di Andrea de Prisco Programmare in C su Amiga … · AMIGA coordinamento di Andrea de Prisco Programmare in C su Amiga di Dario de Judicibus Prima puntata Iniziamo con

AMIGAcoordinamento di Andrea de Prisco

Programmare in C su Amigadi Dario de Judicibus

Prima puntataIniziamo con questo articolouna nuova serie dedicata allaprogrammazione in C suAmiga.Tali articoli si prefiggonocome scopo quello di fornireallettare una visione quantopiù completa ed esaurientedelle possibilità che illinguaggio C offre su unamacchina come l'Amiga.Conseguentemente, unaconoscenza ancheelementare del C e dellaprogrammazione strutturata èprerequisito fondamentale allacomprensione di tali articoli. Èopportuno inoltre, che illettore abbia anche una certafamiliarità con l'Amiga 005tramite interfaccia CLI e conle procedure di compilazionee linkedit del C

MCmicrocomputer n. 74 - maggio 1988

Gli esempi riportati nei listati [Iisting]sono scritti seguendo le convenzioni delLattice C, ma potranno comunque es-sere utilizzati con minime modifiche an-che da altri compilatori, grazie alla eleva-ta portabilità di tale linguaggio.

La terminologia utilizzata sarà, nei li-miti del possibile, completamente initaliano, per facilitarne la comprensioneanche a chi abbia poca dimestichezzacon la lingua inglese; tuttavia, dato chemolti manuali Amiga non sono statiancora tradotti in italiano e che comun-que ci può essere chi ha parte dellapropria manualistica in lingua originale,ogni qualvolta comparirà un terminespecifico ne verrà data anche la tradu-zione in inglese. Viceversa, essendo il Cun sottoinsieme dell'inglese, e non po-tendo ovviamente tradurre anche i ter-mini propri del linguaggio stesso[keyword], i listati riportati seguiranno laconvenzione inglese anche per le varia-bili e le funzioni definite dal programma-tore. Questo servirà principalmente adevitare la confusione che potrebbe sca-turire dallo scegliere una convenzionebilingue. In ogni caso i commenti saran-no sempre in italiano.

Ogni articolo sarà diviso in due o treparti. La prima parte introdurrà l'argo-mento che verrà trattato nell' articolostesso e definirà gli obiettivi che siintende far raggiungere al lettore. Laseconda parte costituirà il corpo vero eproprio dell'articolo. La terza parte, nonsempre presente, proporrà al lettore unsemplice esercizio per verificare se gliobiettivi che erano stati specificati all'i-nizio dell'articolo sono stati raggiunti.Nella puntata successiva sarà riportatauna possibile soluzione dell' esercizioche servirà al lettore come verifica dellivello di conoscenza raggiunto.

È importante tener presente che nonè assolutamente detto che il codiceprodotto dal lettore e quello propostodall'autore siano identici. È risaputo chein programmazione esistono infiniti mo-di di ottenere le stesse cose. Di fatto, lamigliore verifica della bontà dei propri

programmi si ha solo quando si cerca dicompilarli e di farli girare [run] sul com-puter stesso. Tuttavia è sempre possibi-le ricavare dal listato proposto comesoluzione ali' esercizio qualche buonaidea per migliorare il proprio codice[code]

IntroduzioneIn questo primo articolo introdurremo

l'Architettura Software di Sistema del-l'Amiga, definiremo i concetti base e laterminologia necessaria per quando ciinoltreremo più a fondo nella program-mazione in C dell'Amiga.

Gli obiettivi che ci riproponiamo diraggiungere sono i seguenti:• essere in grado di aprire una libreria

in fase di esecuzione;• sapere come verificare il successo

dell' operazione effettuata;• chiudere la libreria dopo averla utiliz-

zata.

Il Software di SistemaIl Software di Sistema [kernel] è quel-

l'insieme di moduli che permettono diutilizzare l'hardware di una macchina.Sebbene sia sempre possibile controlla-re direttamente l'hardware via softwa-re, ciò richiede una conoscenza più chebuona della struttura interna della mac-china.

L'Amiga mette tuttavia a disposizionedei programmatori tutta una serie dimoduli distribuiti su quattro differentilivelli. Ogni livello utilizza i servizi diquello sottostante, come mostrato infigura 1. Il livello più basso è quelloimmediatamente al di sopra dell'hard-ware, mentre quello più alto è quelloche interfaccia direttamente l'utilizzato-re del Sistema, od utente [user]

Parte dei moduli del Software di Si-stema risiedono permanentemente inuna area di memoria protetta della mac-china, quella cosiddetta del KickStart.Nell'Amiga 1000 il KickStart (<<Calciodiavvio») viene caricato da dischetto su

153

Page 2: coordinamento di Andrea de Prisco Programmare in C su Amiga … · AMIGA coordinamento di Andrea de Prisco Programmare in C su Amiga di Dario de Judicibus Prima puntata Iniziamo con

AMIGA

RAM [cold boa t], cioè su di un'area dimemoria che si cancella allo spegnI-mento della macchina.

Tale area tuttavia viene ad essereprotetta in modo tale da poter far riparti-re «a caldo» [warm boot] l'Amiga senzadoverla ricaricare di nuovo. La partenzaa caldo si effettua premendo contempo-raneamente i tastiCTRL + Left AMIGA + Right AMIGA.

Nell'Amiga 500 e 2000, il KickStart ègià presente sulla macchina in ROM,cioè in un componente [chip] hardwaremontato sulla scheda del computer.

La restante parte del Kernel che nonsi trova nel KickStart, vie'ne caricataquando serve dal dischetto di Sistema,da quello cioè che contiene il Work-Bench.

Vediamo adesso in maggior dettaglio

la struttura a livelli del Kernel Amiga.Faremo sempre riferimento alla figura1. Prima però, è bene definire due ter-mini: task e processo [processi:

task: è un insieme di istruzioni conun compito specifico (in inglese tasksignifica «lavoro»), che, durante l'esecu-zione, ha il controllo in esclusiva deiregistri hardware della macchina e puòutilizzare tutte le risorse del sistemacondividendole con gli altri task caricati.Dato che solo un'istruzione alla voltapuò essere eseguita dal microprocesso-re, quando un task è in esecuzione, tuttigli altri sono «addormentati» in attesa diun segnale specifico [interrupt] che lisvegli. Quando un task viene svegliato,lo stato del task precedente viene salva-to in un'area di memoria, mentre quellodel nuovo task viene rigenerato comeera al momento dell'interruzione. Uninterrupt può essere generato sia da unaltro task, sia da una periferica esternao dal meccanismo di controllo del multi-tasking.

Processo: un processo è un superin-sieme del task. Esso è formato da untask più altre strutture di dati utilizzatedall' AmigaDOS.

La conoscenza di tali termini è impor-tante in un sistema multitasking quale èl'Amiga. Data tuttavia la complessità ditale argomento, rimandiamo agli ultimiarticoli la spiegazione su come scrivereprogrammi formati da più task in comu-nicazione fra di loro Tornando quindialla struttura del Software di Sistema,partiamo dal livello più basso, quellocioè a più stretto contatto con l'hardwa-re. Esso è formato di sei parti [seti:

EXEC: è l'insieme dei moduli checontrollano direttamente il processoreprincipale dell'Amiga, cioè il Motorola68000. Tali moduli sono responsabilidella gestione multitasking del 68000.Essi inoltre si occupano di allocare lamemoria che serve ai vari tasks ed agestire gli interrupts che sono generatidai chip speciali (Agnus, Denise andPortia) e dal software applicativo. Ve-

LI VELLO tlur·IERO 3

LI VELLO t/UI·1ERO4

l •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

COt/SOLEDev i ce

Afll GADOSProcessiGestionede i f i I e

Ami gaDOSCLI

Utilities

IIiPUTDev i ce

Librariaper

i PianiLI VELLO t1UHERO 2

........•.... .....••...... .•..•...............•..............

EXEC- Lavori

1·lessaggiSegna l iI/O

TRACKDI SKDev i ce

Di sch l

Estraibili& F i ss i

KEYBOARDDev i ce

GAl-IEPORTDev i ce

GRAPIII CS- Gels- Testi- Aree

AUDIO

Dev i ce

SERIALDev i ce

PARALLELDev i ce

LI VELLO 1lUf.1EROl

LI VELLO IIARD~IAREPorle I/OAudioGrafica

lIa rd.·,a re de 11 ' Al11GA

Tastierae

f10use

Controllodei

Dischi

Processo reI-Ioloro I a

68000I

LFigura 1 - /I Software di Sistema Amiga.

154 MCmicrocomputer n. 74 - maggio 1988

Page 3: coordinamento di Andrea de Prisco Programmare in C su Amiga … · AMIGA coordinamento di Andrea de Prisco Programmare in C su Amiga di Dario de Judicibus Prima puntata Iniziamo con

struct lIe·•.Mi ndow

AMIGA

SIIORT LeftEdge. TopEdge; /* Angolo in alto a destra della finestra */SltORT Width. Height; /* Larghezza ed altezza della finestra */UBYTE OetailPen. BlockPen; /* Colori delle varie parti della finestra */ULOIIG IOC/olPflags; /* Gestione degl i eventI da intui tlon */ULOIIG flags; /* Caratteritiche della finestra stessa */struct Gadget *FirstGadget;/* Lista dei gadgets associati */struct Image *CheckMark; /* Simbolo usato per marcare un menu item */UBYTE *Title; /* Titolo della fInestra */struct Screen *Screen; /* Schermo a cui appartiene la finestra */struct BiUlap *BitMap; /* Area usata da finestre SUPER_BIH1AP */SHORT MinWldth. MinHeight; /* dimensioni minIme ammesse */SIIORT MaxWldth. '·laxlleight; /* dimensioni massime ammesse */USHORT Type; /* Tipo di schermo uti I izzato */

};

Figura 2 - Struttura NewWindow.

dremo nelle prossime puntate il signifi-cato di tali termini e l'utilizzo dei modulidi EXEC.

Trackdisk Device: è l'interfaccia dilivello più basso per la gestione deidischi, sia di quelli fissi che di quelliestraibili.

Keyboard e Gameport Device: sonole interfacce verso le periferiche di in-gresso al sistema [Input Devices], cioè:

• la tastiera [kevboard]• il mouse• il joystick• eventuale altro hardware che si

connetta alle prese del mouse e deljoystick [gameports].

Audio Device: interfaccia l'hardwarerelativo al Sistema Audio dell'Amiga.

Device Seriale e Parallela: gestisco-no le due porte seriale e parallela cheservono per la connessione di varieperiferiche esterne come, ad esempio,stampanti e plotter.

Grafica: l'insieme dei moduli che for-mano il set grafico gestisce l'hardwareper la grafica e permette di compierevarie funzioni grafiche come, ad esem-pio, disegnare linee, riempire aree, sele-zionare colori e sfondi [pattern], gestireoggetti grafici.

Incontreremo spesso il termine devi-ce, purtroppo intraducibile in italiano.Esse sono molto importanti nell'archi-tettura Amiga. Vedremo in seguito dicosa si tratta quando parleremo diEXEC in una delle prossime puntate.

Il secondo livello è costituito da dueparti:

Input Device: è un task indipendentedel sistema, che intercetta le informa-zioni in ingresso [input eventsl dallakeyboard e dalla Gameport Device e leunisce [mergel in modo da formare ununico flusso di dati [input data streamlche può essere utilizzato da alcuni com-ponenti del livello superiore.

Layers Library: è un insieme di pro-cedure che permettono di creare diversipiani [Iaversl grafici che si possono so-vrapporre e che quindi formano la base

MCmicrocomputer n. 74 - maggio 1988

di un sistema a finestre [window envi-ronment] quale siamo abituati ad utiliz-zare sull'Amiga.

Il terzo livello è formato da tre parti,estremamente importanti:

AmigaDOS: è il Sistema Operativovero e proprio [Disk Operating Svstem].È un sistema multiprocesso che utilizzaEXEC per permettere ai vari processi dicondividere [sharel le risorse del siste-ma, compreso il processore centrale,condiviso tra vari task. Grazie ad esso èpossibile gestire i dati sotto forma di filee directory. AmigaDOS mette inoltre adisposizione dell'utente vari programmidi utilità [utilitiesl come ad esempioquelli che impostano la data e l'ora disistema, listano a terminale il contenutodi un file ASCII o forniscono informazio-ni su un dischetto inserito nell'appositaunità [driver].

Intuition: è l'interfaccia multischer-mo e multifinestra dell'Amiga. Essa ècomposta da varie funzioni facenti partedi un'unica libreria, che permettono alprogrammatore di definire schermi[screenl, finestre [win do wl, menu [me-nul, solleciti [requesterl, vari strumentidi immissione dati [gadget] e via dicen-do, come vedremo in una delle prossi-me puntate. Essa inoltre seleziona erende disponibili al programmatore soloquegli eventi che interessano fra quelliche vengono forniti dall'lnput Device.

Console Device: viene associata aduna finestra di Intuition per simulare ilcomportamento «classico» di un termi-nale.

Per finire, abbiamo il quarto livello,quello cioè a stretto contatto con l'uten-te. Questo livello non è suddivisibile inparti, in quanto di esso fanno parte tuttii programmi applicativi che utilizzano ilSoftware di Sistema vero e proprio.Quest'ultimo, infatti, è formato più pro-priamente solo dai livelli uno, due e tre,anche se due importantissimi e più omeno conosciuti programmi forniti conil Sistema Operativo appartengono difatto al livello più alto, il quarto appunto:

CLI: è un programma applicativo chepermette di far girare altre applicazioni edi lanciare comandi dell'AmigaDOS tra-mite una finestra gestita dalla ConsoleDevice.

WorkBench: come il CLI, esso per-mette di lanciare altri programmi, utiliz-zando tuttavia un'interfaccia più amiche-vole, anche se in certi casi meno flessi-bile di quella CLI. Il WorkBench è quellache si chiama una interfaccia objectoriented, dato che l'utente interagiscecon essa lavorando su simulazioni dioggetti reali che vengono manipolatetramite icone [icon], cioè immagini grafi-che che rappresentano vari oggetti diuso comune e che si comportano cometali: cassetti [drawerl, dischetti [disk],progetti [project] e via dicendo.

A questo livello apparterranno quindianche tutti i programmi che scriveremoe la maggior parte di quelli disponibili incommercio o come Software di Pubbli-co Dominio [PD SW].

/I C e l'AmigaMolti sono i linguaggi disponibili per

Amiga, ma, se escludiamo l'Assembler,peraltro non alla portata di tutti, quelloche meglio si sposa con l'Amiga è il C.D'altra parte tutte le strutture e le infor-mazioni disponibili sui manuali ufficialidella Commodore sono attualmente ri-portate in questi due linguaggi. Di fatto,il Sistema Operativo dell'Amiga è statoscritto in gran parte in BCPL, un «ante-nato» del moderno C.

Per chi voglia approfondire quantodiremo in questa serie di articoli, siraccomanda la lettura dei ROM KernelManuals (RKMs), i quali riportano inoltreanche buona parte delle strutture conte-nute negli Include Files che utilizzeremonel nostro codice. Non si tratta tuttaviadi una lettura facile, e sarebbe beneaffrontarla dopo aver letto attentamentequesti articoli o qualsiasi altro libro didivulgazione sulla programmazione suAmiga. Ce ne sono ormai diversi sulmercato. Non so se sia già arrivato inItalia l'aggiornamento dei RKMs per l'A-migaDOS 1.2, comunque anche quelliper la versione 1.1 possono fornire mol-te utili informazioni al programmatoreesperto.

Vediamo ora di definire alcuni concet-ti base che ci serviranno in seguitoquando incominceremo a parlare piùdettagliatamente di programmazione.Non spaventatevi se non vi sarà subitotutto chiaro fin dall'inizio. Man manoche andremo sempre più a fondo nelnostro piccolo corso di programmazionesu Amiga le cose diventeranno semprepiù semplici e di facile apprendimento.

155

Page 4: coordinamento di Andrea de Prisco Programmare in C su Amiga … · AMIGA coordinamento di Andrea de Prisco Programmare in C su Amiga di Dario de Judicibus Prima puntata Iniziamo con

AMIGA

libreria(.library)

PuntatoreBase

Contenuto:

Figura 3 - Tipi predefiniti in exec/types.h.

=define GlOBAl extern=define IHPORT extern=define STATIC static=define REGISTER register=define VOlO void

typedef shOrl SHORT;typedef unslgned shOrl USlIORT;

typede f fl oa t FLO,\T ;tl'pedef dOllble DOUBtE;typede f short COUIIT ;typedef unsigned short UCOUIIT ;tl'pede! shorl BOOL;tl'pedef unslgned char TEXT;

=deflne TRUE l'define FhLSE 0.:tele fIne IIULL 0

=de Il ne RYTEl-li\SK OxFF

Strutture: le strutture [structure] rap-presentano in Amiga uno degli strumen-ti fondamentali per trasferire dati tradifferenti funzioni. Esse possono essereanche molto complesse e permettonoal programmatore di ottenere una quan-tità impressionante di informazioni im-postate da alcuni dei componenti delSofware di Sistema quali Intuition odEXEC. Una struttura «classica» e cheincontreremo di frequente è quella cheserve a definire una finestra in unoschermo: NewWindow (vedi figura 2).

Alcune considerazioni sull'esempio ri-portato:

1. Innanzitutto osserviamo che unastruttura può contenere altre struttureal suo interno, o comunque puntatori adaltre strutture. Vedremo che questa ca-ratteristica è spesso utilizzata nellestrutture che useremo in seguito.

2. In secondo luogo è importante ri-cordare che è necessario sempre ri-spettare la convenzione mista per i no-mi delle variabili, delle funzioni ed ingenerale per tutti gli elementi della sin-tassi C. I due nomi MyStruct ed my-struct rappresentano quindi strutturedifferenti. Mettere un carattere in maiu-

necessario chiedere al sistema stesso ilpuntatore alla libreria che si intendeaprire. Per farlo si usa la routine OpenLi-brary() che si trova nella exec.library.Questa infatti, insieme alla dos.library,viene aperta automaticamente dal codi-ce di inizializzazione [startup] a cui biso-gna collegarsi nella fase di linkedit delprogramma. Si assume che il lettoreabbia familiarità con i processi di compi-lazione e link di un programma C. Even-tualmente fate riferimento al manualedel vostro compilatore preferito.

Il puntatore che viene fornito dallaOpenLibrary si chiama Base. In figura 4è riportata la lista delle librerie di siste-ma ed i nomi dei puntatori Base. Talinomi sono fissi e non vanno assoluta-mente cambiati'

Una volta aperta una libreria, il punta-tore Base non cambia fino alla chiusuradella stessa, tramite CloseLibrary. Seper un qualunque motivo il sistema nonriesce ad aprire la libreria richiesta,OpenLibrary ritorna il valore NULL, cioèzero. Quando si utilizzano delle librerie«Fun-time», è bene seguire le seguentiprecaUZioni:

1. Includere sempre exec/types.h pri-ma di ogni altro comando #include;

2. definire la OpenLibrary come EX-TERNAL;

3. verificare sempre che il puntatoreBase non sia nullo;

4. non usare mai una routine di libre-ria se prima non si è aperta la stessa ola Base è nulla;

5. chiudere sempre le librerie aperteprima di uscire dal programma, sia allafine che in caso di uscita forzata [abort].

In figura 5 è riportato un esempio diapertura e chiusura «pulita» di una li-breria.

Il secondo parametro della OpenLi-brary serve a specificare la versione delSoftware di Sistema che si vuole utiliz-zare. Ad esempio, per l'AmigaDOS 1.1il numero della versione è 31. Se noninteressa assicurarsi di stare utilizzandoroutine di una versione piuttosto che di

ClistBase gestione di stringhe di caratteriOiskfontBase gestione dei tipI (font) di caratteriExecBase procedure EXECOosBase procedure OOSGfxBase funzioni graficheIconBase gestione degli oggetti del WorkBenchIntui tionBase funzioni dell' interfaccia Intui tionLal'ersBase gestione dei layer graficir·lathBase matematica baseHa thTransBase ma temat ica trascendenta leHathleeeDoubBasBase matematica in doppia precisione IEEETimerBase aritmetica per il timerTranslatorBase traduzione fonemi

c I istdiskfontexecdosgraph icsleoointuitionlayersmathffpmathtransmathieeedoubbast i Inertrans Ia tor

Figura 4 - Librerie di Sistema e rispettivi punta tori Base.

scolo piuttosto che minuscolo o vice-versa, può quindi portare ad un erroredurante la compilazione o peggio ancorain esecuzione. Fate molta attenzione,quindi. Sempre riguardo le convenzioniutilizzate nello scrivere codice C, è buo-na norma scrivere in maiuscolo tutti inomi definiti tramite #define e typedef.

3. Infine è bene utilizzare sempre itipi predefiniti riportati in figura 3 pergarantire la massima portabilità del pro-prio codice tra. più sistemi o computerdifferenti.

librerie: d'ora in poi, quando parlere-mo di librerie. non intenderemo tantoquelle librerie che si accedono in fase dicompilazione e che permettono di utiliz-zare le funzioni e le macro fornite con ilcompilatore quali ad esempio la classicaprintf() oppure isspace(), strcat() e simili.quanto piuttosto le cosiddette librerie diesecuzione [run-time libraries]. Questesono un insieme di funzioni correlatelogicamente dato che ogni libreria sioccupa di fornire servizi relativi ad unben specifico aspetto del sistema. Adesempio, la intution.library contiene tut-te quelle funzioni che permettono digestire l'interfaccia a finestre tipica del-l'Amiga. Viceversa è necessario aprirela libreria mathfpp.library se si voglionoutilizzare le procedure per la matemati-ca a virgola mobile (Fast Floating PointRoutines).

Una libreria consiste in un file checontiene una sorta di indice [Jump Ta-ble] che specifica la posizione nella li-breria di ogni singola routine, e dallasuccessione vera e propria delle proce-dure.

Parte delle librerie si trova nell'areaprotetta del KickStart, parte si trovanella directory libs: del dischetto da cuisi è fatta la partenza [bootstrap]. Perpotere utilizzare una qualunque routinedi una libreria, bisogna quindi innanzitut-to ricavare la posizione in cui è stata(KickStart) o sarà (Libs:) caricata la libre-ria in questione. Dato che tale posizioneè scelta volta per volta dal sistema, è

lOIIG;UlOIIG;lOllGB ITS;~!ORO;UWORO;\·!OROBITS;BYTE;UBYTE;BYTEB ITS;*STRPTR;1(APTR;

typede f longtypedef unslgned longtypedef unsigned longtypede! shorttypedef unsigned shorttypedef unsigned shorttypede f cha rtypedef unsigned chartypedef unsigned chartypedef unslgned chartypede f STRPTR

156 MCmicrocomputer n. 74 - maggio 1988

Page 5: coordinamento di Andrea de Prisco Programmare in C su Amiga … · AMIGA coordinamento di Andrea de Prisco Programmare in C su Amiga di Dario de Judicibus Prima puntata Iniziamo con

AMIGA

Figura 5 - Apertura e chiusura di una libreria.

/*, Corpo del programma: uti l izza le procedure della I ioreria aperta,/

/,* Chiudi la 1 ibrerla prima dI uSCire defini tivamente,/C I o 5 e L i b r a ry ( I n t li i t i li nlla 5 e ) ;

un'altra, basta impostare tale valore azero.

L'esercizio

Quando si devono aprire più librerieuna dopo l'altra, è necessario, qualorauna delle richieste fallisca, chiudere an-che tutte quelle precedenti. Questovuoi dire scrivere dopo ogni controllouna sequenza di C10seLibrary come in-dicato in figura 6

Questo può essere abbastanza sco-modo e poco flessibile. Infatti, nel casosia necessario modificare il programmaaggiungendo un'altra libreria, occorremodificare tutto il codice di controllodelle aperture successive.

Per ovviare a ciò ci sono molte tecni-che. Nella puntata successiva ve nepresenteremo una. Per il momento pro-vate voi ad inventarvi un trucco che evititale appesantimento del codice e sem-plifichi le modifiche future. Magari risul-terà migliore del nostro' Parleremo inol-tre del terzo livello, e più precisamentedi AmigaDOS

Buon lavoro I Me

L<i t(OL);

; f (LibllBase -- IIULL)(

CloseLi brarv(L I bIBase);C I oseL I brary (L I bZB,15e);ClnseLlbrary(LJb3RJse) ;

Figura 6printf("lIon posso aprire la libreria Intuition\n");Exi t(OL);

/,, Apri la I ibrer;a. Se qualcosa va male. esci.*/i f «Intui tion8ase = (struct Intui tlon8ase*)

OpenLibrary("intuition.library",OL» -- IIULL)

ma i n ()(

/,, Come aprire e chiudere in modo corretto una libreria (intuition),/.include "e.ec/types.h"#jnclude "intuition/inluitioll.h"-include "intuition/intuitionbase.h"e.tern struct Library 'OpenLibrary();LOIIG Intuition8ase 'Intuitlon8ase

••••• ,s.

~IIIIIIIIIIIIIIInTIIIIIIIIIIIIII~"I!!l"j i i i i I i L!.U: I i i i !1l!i!W!lTI2_~,. ~_~u "'_".•-- -- -

]o •

• Il JlIl Il Il, ..I il Il

• ~ Il, ..o • "

• 'Il Q

I 111 n KIII l""ft • li II

m n ti

o • "o " •o " ••o " •·, .m Il 11l'' Il• Il''o ••• Il ~

• Il IlI Il U

• Il UI ~ ;1

-tll ll'll mll·ll'ct "'11 mu-un IllJ' .1.

-111' ~ 1111'

-llll Jt»S ~-1111 110M ,,, ••

-1116 _ ••*"'1" 16m -s-161 mn "'"-N "'7 l'l.-lon =: l~

..(

~------;---------,]o.~.

111110 ~Versione 7.6 ! ::~

lllt

''",i'" ''"per 16M PC, M2C l 1"1.1 ''''". ....'"" ,~

e compatibili. ". .•,.'"" .,

,i'" ..''"" ..". '" .'" , , o

''"" '" .'" - - o

t t 1 ". ". .,'" ~, "'.. o

''"'' ,.. ... •... .... o". ".. -IJ~ ,.. Jlm o. '"" ... ... .. 1111 ..

II~':IlIl -1m ". - '"1 t t 1 '" ..• .... .., o". ,.. -Il. "111 n•• .

Il 1"10 1m .,.. l.llll - ,Il::: "" .... ... ..'" o

lIIl -1111 mu .'" o

\ \ t I ll:~-: )tI' ·111; ..., .ml o". ·111 m" :~ o,i'" ". -1111 .... o

t t t Il·l l \ - - -- ~ - - - - - -- - - - - - -

··l-~-r--[-[

Programma integrato per la progettazioneinterattiva di edifici multipiano in C. A.

• INPUT diretto, dotato di (omandi sintetici che consentonoun veloce ingresso dei dati e la loro rapida modifica.

• GRAFICA in scala per la visualizzazione e la stampa disezioni, prospettive ed armature. Zoom su singoli dettagli.

• DOCUMENTAZIONE completa che chiarisce il modellostrutturale e le scelte del programma, oltre a guidarne l'uso.

• ANALISI basata su u~a accurata modellazione ad elementifiniti, con elevate doti di velocita'.

.INTERATTIVITA' nell'intero processo di progettazione,dal dirnensionamento iniziale alla definizione delle armature.

• OUTPUT selezionabile: dati dell'edificio, sollecitazioni espostamenti, risultati delle verifiche, distinte armature, disegni.

•••••••••••••••••••••• _ ••••••• & _ .c:•••a...o. & , •••

NEWSOFT s.a.s.corso Mazzini 175, 87100 Cosenza0984 / ·27041 - 76424

r---------------------~-,I DDesidero ricevere informazioni sui programmi Newsoft. II D Desidero ricevere, in contrassegno, un dimostrativo a dimensioni ,I ridotte del programma EDISIS al prezzo di lire 50.000. II Nome :

:1n.dirizzO II Hardware. IL J