Direttive

Le direttive sono particolari istruzioni che sono interpretate al momento della compilazione in memoria di un programma Proteus; tutte le direttive iniziano con il carattere riservato '!' e, come i commenti, possono essere inserite anche tra due parti di una linea interrotta; il nome della direttiva è insensibile alle maiuscole.

Le direttive permettono di includere del codice contenuto in un altro file, oppure eseguire condizionalmente una parte o l'altra del codice, sfruttando il concetto di etichetta.

Un'etichetta è una sequenza di caratteri alfanumerici, sensibile alle maiuscole, di cui si può variare e verificare lo stato di definizione. A tal fine, si utilizzano le seguenti direttive:

!define LABEL

definisce l'etichetta LABEL; è equivalente al parametro sulla linea di comando -n

!undef LABEL

elimina la definizione dell'etichetta LABEL; è equivalente al parametro sulla linea di comando -u

!ifdef LABEL
   ...
!else
   ...
!endif

la direttiva !ifdef verifica che LABEL sia definita; in caso affermativo, compila tutto il codice compreso tra !ifdef e !else (se presente, oppure !endif); se LABEL non risulta definita, viene compilato il codice che segue !else (se presente) e precede il relativo !endif; questa costruzione è molto simile al metodo IF..ELSE..ENDIF

!ifndef LABEL
   ...
!else
   ...
!endif

analoga alla direttiva !ifdef, inverte la logica di compilazione; se LABEL è definita, compila la parte dopo il relativo !else, altrimenti la parte che lo precede.

Proteus è dotato delle seguenti etichette predefinite all'avvio (salvo rimozione della definizione con -u o !undef):

UNIX è definita se il sistema operativo in uso è di tipo Unix™
MS_DOS è definita se il sistema operativo in uso è di tipo Ms-Dos™ oppure Windows 95™
WINDOWS è definita se il sistema operativo in uso è di tipo Windows™ (95, 98, ME, NT, 2000, XP)
INTERACTIVE è definita se la versione di Proteus in esecuzione supporta le funzioni a console interattive
SERVICE è definita se la versione di Proteus in esecuzione è un servizio
ISAPI è definita se la versione di Proteus in esecuzione è una ISAPI

Le etichette permettono di pseudo-compilare condizionalmente in memoria solo alcune parti del proprio codice, ad esempio per realizzare programmi Proteus multilingua oppure platform-independent.

Una direttiva particolare è:

!include "pathname"

causa l'inclusione nel programma del testo contenuto nel file specificato; il parametro indicato è sempre una stringa (tra virgolette) corrispondente ad un nome di file completo di eventuale percorso.

Proteus viene fornito con alcuni file inclusi standard, elencati di seguito, contenenti costanti e definizioni utili per scrivere i propri programmi attraverso stringhe mnemoniche invece di oscure costanti:

Nel seguente esempio:

!ifdef UNIX
   !include "unxspec.prt"
!else
   !include "dosspec.prt"
!endif

il programma risultante includerà il file "unxspec.prt" se UNIX è definito, il file "dosspec.prt" altrimenti. I file inclusi possono a loro volta includere altri file, senza limitazioni (eccetto la memoria). La regola di ricerca del file oggetto della direttiva !include è la medesima impiegata per l'apertura del file di programma, con la seguente eccezione: prima di valutare i percorsi in PATH, viene considerata la directory corrispondente al file di programma specificato sulla linea di comando. L'utilizzo della direttiva !include permette la creazione di librerie di funzioni personali, che possono quindi essere riutilizzate in più programmi.

Le direttive possono anche essere impiegate per documentare il programma con del testo formattato; a tal fine, sono fornite due speciali direttive:

!bdoc

tutto il testo che segue è ignorato, ad eccezione delle eventuali direttive !bdoc ed !edoc

!edoc

riprende l'interpretazione del programma dopo una direttiva !bdoc

Le direttive !bdoc ed !edoc possono essere nidificate; l'importante è che il numero delle direttive di un tipo corrisponda al numero delle direttive dell'altro tipo; per quanto riguarda l'interpretazione del programma, si può pensare idealmente ad un contatore che viene incrementato da !bdoc e decrementato da !edoc: solo quando tale contatore è nullo il programma viene interpretato (e tale contatore non deve mai diventare negativo). Ecco un esempio:

!bdoc
  Qui posso scrivere quello che voglio; l'unica cosa di cui devo
  tenere conto è di non iniziare mai una riga con !bdoc o !edoc.
!edoc
CONSOLELN "Salve, mondo!"

Un'altra direttiva interessante è:

!endprog

termina il programma, indipendentemente dalla posizione nel file (e dal fatto che si trovi in un file incluso)

Mediante !endprog è possibile "tagliare fuori" tutto il codice che segue un determinato punto del programma, utile per velocizzare il caricamento se, ad esempio, ciò che segue nel file sono solo commenti o documentazione.
Non solo: è possibile eventualmente includere dei dati nel file di programma stesso; infatti, quando all'interno del programma compare questa direttiva, viene predefinito l'identificatore PROG_DATA, che assume come valore l'offset all'interno dello script della prima riga che segue la direttiva !endprog. Con questo semplice frammento di codice è possibile accedere ai dati seguenti alla direttiva:

SET H = FOPEN(ARGV(2), 1)
FSEEK(H, PROG_DATA, 0)

Di default, se Proteus non riconosce una direttiva emette un messaggio di errore e non esegue il programma; questo comportamento può essere cambiato utilizzando il parametro sulla linea di comando '-g'.

Un'altra direttiva molto importante, disponibile nella versione Windows™ dell'interprete, è !extern; attraverso questa direttiva è possibile utilizzare in Proteus funzioni compilate in DLL esterne, seguendo lo schema documentato nel capitolo "Collegamento di funzioni esterne a Proteus".

Inizio pagina Prossimo argomento Argomento precedente Indice per argomenti Indice analitico