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:
- COMMON.PRT: funzioni comuni di Proteus
- CONSOLE.PRT: funzioni console di Proteus
- WIN32.PRT: funzioni Win32 di Proteus
- DAODEFS.PRT: funzioni DAO di Proteus
- SOCKET.PRT: funzioni socket Win32 di Proteus
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
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 |