Gli elementi integrati sono costanti, variabili, funzioni e istruzioni che forniscono informazioni aggiuntive e che consentono la manipolazione dei dati.
Le costanti integrate vengono utilizzate per fornire informazioni sui parametri degli oggetti, ad esempio la lunghezza massima consigliata di nomi, flag e così via. Molti tipi di oggetto dispongono di una sezione Costanti in cui sono elencate le costanti integrate per quel particolare oggetto (ad esempio, UL_PIN).
Le seguenti costanti integrate vengono definite in aggiunta a quelle elencate per i vari tipi di oggetto:
| EAGLE_VERSION | numero versione programma EAGLE (int) |
| EAGLE_RELEASE | numero release programma EAGLE (int) |
| EAGLE_SIGNATURE | una stringa contenente le informazioni relative a nome, versione e copyright del programma EAGLE |
| EAGLE_PATH | una stringa contenente il percorso completo del file eseguibile EAGLE |
| EAGLE_DIR | una stringa contenente la directory del programma di installazione di EAGLE ($EAGLEDIR) |
| EAGLE_HOME | una stringa contenente la home directory dell'utente all'avvio di EAGLE ($HOME) |
| eagle_epf | una stringa contenente il percorso completo del file eagle.epf attualmente utilizzato |
| OS_SIGNATURE | una stringa contenente una firma del sistema operativo (ad esempio, Mac..., Windows... o Linux) |
| REAL_EPSILON | il numero reale positivo minimo tale che 1.0 + REAL_EPSILON != 1.0 |
| REAL_MAX | il più grande valore reale possibile |
| REAL_MIN | il più piccolo valore reale (positivo). Il numero più piccolo rappresentabile è -REAL_MAX |
| INT_MAX | il più grande valore int possibile |
| INT_MIN | il più piccolo valore int possibile |
| PI | il valore di "pi" (3,14..., reale) |
| utilizzo | una stringa contenente il testo della direttiva #usage |
Queste costanti integrate contengono i percorsi di directory definiti nella finestra di dialogo delle directory, con le variabili speciali ($HOME e $EAGLEDIR) sostituite dai loro valori effettivi. Poiché ogni percorso può essere costituito da più directory, queste costanti sono matrici di stringhe con una singola directory in ogni membro. Il primo membro vuoto contrassegna la fine del percorso:
path_lbr[] Libraries
path_dru[] Design Rules
path_ulp[] User Language Programs
path_scr[] Scripts
path_cam[] CAM Jobs
path_epf[] ProjectsQuando si utilizzano queste costanti per creare un nome file completo, è necessario utilizzare un separatore di directory, come in
string s = path_lbr[0] + '/' + "mylib.lbr";Le librerie attualmente in uso tramite il comando USE:
used_libraries[] Le variabili integrate vengono utilizzate per fornire informazioni in fase di esecuzione.
int argc number of arguments given to the RUN command
string argv[] arguments given to the RUN command (argv[0] is the full ULP file name)Le funzioni integrate vengono utilizzate per eseguire attività specifiche, ad esempio la stampa di stringhe formattate, l'ordinamento di matrici di dati o simili.
È inoltre possibile scrivere le proprie funzioni e utilizzarle per strutturare il proprio ULP (User Language Program).
Le funzioni integrate sono raggruppate nelle seguenti categorie:
Riferimento alfabetico di tutte le funzioni integrate:
abs()
acos()
asin()
atan()
ceil()
cfgget()
cfgset()
clrgroup()
country()
cos()
exit()
exp()
fdlsignature()
filedir()
fileerror()
fileext()
fileglob()
filename()
fileread()
filesetext()
filesize()
filetime()
floor()
frac()
inch2u()
ingroup()
isalnum()
isalpha()
iscntrl()
isdigit()
isgraph()
islower()
isprint()
ispunct()
isspace()
isupper()
isxdigit()
language()
log()
log10()
lookup()
max()
mic2u()
mil2u()
min()
mm2u()
neterror()
netget()
netpost()
palette()
pow()
printf()
round()
setgroup()
setvariant()
sin()
sleep()
sort()
sprintf()
sqrt()
status()
strchr()
strjoin()
strlen()
strlwr()
strrchr()
strrstr()
strsplit()
strstr()
strsub()
strtod()
strtol()
strupr()
strxstr()
system()
t2day()
t2dayofweek()
t2hour()
t2minute()
t2month()
t2second()
t2string()
t2year()
tan()
time()
tolower()
toupper()
trunc()
u2inch()
u2mic()
u2mil()
u2mm()
variant()
xmlattribute()
xmlattributes()
xmlelement()
xmlelements()
xmltags()
xmltext()Le funzioni carattere sono usate per manipolare singoli caratteri.
Le funzioni carattere riportate di seguito sono disponibili:
isalnum()
isalpha()
iscntrl()
isdigit()
isgraph()
islower()
isprint()
ispunct()
isspace()
isupper()
isxdigit()
tolower()
toupper()is...()
Funzione
Verifica se un carattere rientra in una determinata categoria.
Sintassi
int isalnum(char c);
int isalpha(char c);
int iscntrl(char c);
int isdigit(char c);
int isgraph(char c);
int islower(char c);
int isprint(char c);
int ispunct(char c);
int isspace(char c);
int isupper(char c);
int isxdigit(char c);Valori restituiti
Le funzioni is... restituiscono un valore diverso da zero se il carattere specificato rientra nella categoria. In caso contrario, restituiscono zero.
Categorie carattere
isalnum letters (A to Z or a to z) or digits (0 to 9)
isalpha letters (A to Z or a to z)
iscntrl delete characters or ordinary control characters (0x7F or 0x00 to 0x1F)
isdigit digits (0 to 9)
isgraph printing characters (except space)
islower lowercase letters (a to z)
isprint printing characters (0x20 to 0x7E)
ispunct punctuation characters (iscntrl or isspace)
isspace space, tab, carriage return, new line, vertical tab, or formfeed (0x09 to 0x0D, 0x20)
isupper uppercase letters (A to Z)
isxdigit hex digits (0 to 9, A to F, a to f)Esempio
char c = 'A';
if (isxdigit(c))
printf("%c is hex\n", c);
else
printf("%c is not hex\n", c);to...()
Funzione
Converte un carattere in maiuscolo o minuscolo.
Sintassi
char tolower(char c);
char toupper(char c);Valori restituiti
La funzione tolower restituisce il carattere convertito se c è maiuscolo. Tutti gli altri caratteri non vengono modificati. La funzione toupper restituisce il carattere convertito se c è minuscolo. Tutti gli altri caratteri non vengono modificati.
Vedere anche strupr, strlwr
Le funzioni di gestione dei nomi file vengono utilizzate con nomi di file, dimensioni e data e ora.
Per informazioni su come scrivere in un file, vedere output().
fileerror()
Funzione
Restituisce lo stato delle operazioni di I/O.
Sintassi
int fileerror();Valori restituiti
La funzione fileerror restituisce 0 se non si verificano errori.
Vedere anche output, printf, fileread
fileerror controlla lo stato di qualsiasi operazione di I/O eseguita dall'ultima chiamata a questa funzione e restituisce 0 se non si verificano errori. Se una delle operazioni di I/O ha causato un errore, verrà restituito un valore diverso da 0.
È necessario chiamare fileerror prima di qualsiasi operazione di I/O per ripristinare eventuali stati di errore precedenti e richiamarlo nuovamente dopo le operazioni di I/O per verificare se sono state eseguite correttamente.
Quando fileerror restituisce un valore diverso da 0 (indicando pertanto un errore), l'utente ha già ricevuto un messaggio di errore corretto.
Esempio
fileerror();
output("file.txt", "wt") {
printf("Test\n");
}
if (fileerror())
exit(1);fileglob()
Funzione
Esegue una ricerca di directory.
Sintassi
int fileglob(string &array[], string pattern);Valori restituiti
La funzione fileglob restituisce il numero di voci copiate nella serie.
Vedere anche dlgFileOpen(), dlgFileSave()
fileglob esegue una ricerca di directory utilizzando pattern.
pattern può contenere i caratteri jolly '' e '?'. Se *pattern termina con "/", verrà restituito il contenuto della directory specificata.
I nomi nella serie risultante che terminano con "/" sono nomi di directory.
La serie viene ordinata alfabeticamente, con le directory visualizzate per prime.
Le voci speciali '.' e '..' (per le directory correnti e principali) non vengono mai restituite nella serie.
Se il pattern non corrisponde o se non si dispone dell'autorizzazione per eseguire la ricerca nella directory specificata, la serie risultante sarà vuota.
per gli utenti di Windows: il delimitatore di directory nella serie è sempre una barra. Questo garantisce che il funzionamento degli ULP sia indipendente dalla piattaforma. Nel pattern anche la barra rovesciata ('\') viene considerata come un delimitatore di directory.
L'ordinamento dei nomi di file in Windows viene eseguito senza distinzione tra maiuscole e minuscole.
Esempio
string a[];
int n = fileglob(a, "*.brd");Funzioni Filename
Funzione
Divide un nome file nelle sue parti separate.
Sintassi
string filedir(string file);
string fileext(string file);
string filename(string file);
string filesetext(string file, string newext);Valori restituiti
filedir restituisce la directory del file (inclusa la lettera dell'unità in Windows).
fileext restituisce l'estensione del file.
filename restituisce il nome del file (inclusa l'estensione).
filesetext restituisce il file con l'estensione impostata su newext.
Vedere anche Funzioni Filedata
Esempio
if (board) board(B) {
output(filesetext(B.name, ".out")) {
...
}
}Funzioni Filedata
Funzione
Ottiene la data/ora e la dimensione di un file.
Sintassi
int filesize(string filename);
int filetime(string filename);Valori restituiti
filesize restituisce la dimensione (in byte) del file specificato.
filetime restituisce la data e l'ora del file specificato in secondi. Il formato è compatibile per l'utilizzo con le funzioni temporali.
Vedere anche ora, funzioni Filename
Esempio
board(B)
printf("Board: %s\nSize: %d\nTime: %s\n",
B.name, filesize(B.name),
t2string(filetime(B.name)));Funzioni di input di file
Le funzioni di input di file vengono utilizzate per leggere i dati dai file. È disponibile il seguente input di file:
Per informazioni su come scrivere in un file, vedere output().
fileread()
Funzione
Legge i dati da un file.
Sintassi
int fileread(dest, string file);Valori restituiti
fileread restituisce il numero di oggetti letti dal file.
Il significato effettivo del valore restituito dipende dal tipo di dest.
Vedere anche lookup, strsplit, fileerror
Se dest è una serie di caratteri, il file verrà letto come dati binari non elaborati e il valore restituito riflette il numero di byte letti nella serie di caratteri (che corrisponde alla dimensione del file).
Se dest è una serie di stringhe, il file verrà letto come un file di testo (una riga per membro della serie) e il valore restituito corrisponderà al numero di righe lette nella serie di stringhe. I caratteri nuova riga verranno rimossi.
Se dest è una stringa, l'intero file verrà letto in tale stringa e il valore restituito sarà la lunghezza di tale stringa (che non corrisponde necessariamente alla dimensione del file, se il sistema operativo memorizza file di testo con "cr/lf" anziché con un carattere "nuova riga").
Esempio
char b[];
int nBytes = fileread(b, "data.bin");
string lines[];
int nLines = fileread(lines, "data.txt");
string text;
int nChars = fileread(text, "data.txt");Le funzioni matematiche vengono utilizzate per eseguire operazioni matematiche. Le funzioni matematiche riportate di seguito sono disponibili:
abs()
acos()
asin()
atan()
ceil()
cos()
exp()
floor()
frac()
log()
log10()
max()
min()
pow()
round()
sin()
sqrt()
trunc()
tan()Messaggi di errore
Se gli argomenti di una chiamata di funzione matematica causano un errore, il messaggio di errore mostrerà i valori effettivi degli argomenti. Pertanto le istruzioni
real x = -1.0;
real r = sqrt(2 * x);causeranno il messaggio di errore
Invalid argument in call to 'sqrt(-2)'Funzioni assolute, massime e minime
Funzione
Funzioni assolute, massime e minime.
Sintassi
type abs(type x);
type max(type x, type y);
type min(type x, type y);Valori restituiti
abs restituisce il valore assoluto di x.
max restituisce il valore massimo di x e y.
min restituisce il valore minimo di x e y.
Il tipo restituito di queste funzioni è uguale al tipo (più grande) degli argomenti. tipo deve essere uno di caratteri, int o real.
Esempio
real x = 2.567, y = 3.14;
printf("The maximum is %f\n", max(x, y));Funzioni di arrotondamento
Funzione
Funzioni di arrotondamento.
Sintassi
real ceil(real x);
real floor(real x);
real frac(real x);
real round(real x);
real trunc(real x);Valori restituiti
ceil restituisce il numero intero più piccolo non minore di x.
floor restituisce il numero intero più grande non maggiore di x.
frac restituisce la parte frazionaria di x.
round restituisce x arrotondato al numero intero più vicino.
trunc restituisce la parte intera di x.
Esempio
real x = 2.567;
printf("The rounded value of %f is %f\n", x, round(x));Funzioni trigonometriche
Funzione
Funzioni trigonometriche.
Sintassi
real acos(real x);
real asin(real x);
real atan(real x);
real cos(real x);
real sin(real x);
real tan(real x);Valori restituiti
acos restituisce l'arcocoseno di x.
asin restituisce l'arcoseno di x.
atan restituisce l'arcotangente di x.
cos restituisce il coseno di x.
sin restituisce il seno di x.
tan restituisce la tangente di x.
Costanti
PI il valore di "pi" (3,14...)
Gli angoli sono espressi in radianti.
Esempio
real x = PI / 2;
printf("The sine of %f is %f\n", x, sin(x));Funzioni esponenziali.
Funzione
Funzioni esponenziali.
Sintassi
real exp(real x);
real log(real x);
real log10(real x);
real pow(real x, real y);
real sqrt(real x);Valori restituiti
exp restituisce l'esponenziale e alla potenza di x. log restituisce il logaritmo naturale di x. log10 restituisce il logaritmo in base 10 di x. pow restituisce il valore di x alla potenza di y. sqrt restituisce la radice quadrata di x.
Esempio
real x = 2.1;
printf("The square root of %f is %f\n", x, sqrt(x));
printf("The 3rd root of %f is %f\n", x, pow(x, 1.0/3));Le funzioni varie vengono utilizzate per eseguire diverse attività.
Le funzioni varie riportate di seguito sono disponibili:
Parametri di configurazione
Funzione
Memorizza e recupera i parametri di configurazione.
Sintassi
string cfgget(string name[, string default]);
void cfgset(string name, string value);Valori restituiti
cfgget restituisce il valore del parametro memorizzato con il nome fornito. Se tale parametro non è stato ancora memorizzato, viene restituito il valore dell'impostazione di default facoltativa (o una stringa vuota, se non viene specificato alcun valore di default). La funzione cfgget consente di recuperare i valori che sono stati memorizzati in precedenza con una chiamata a cfgset().
La funzione cfgset consente di impostare il parametro con il nome specificato sul valore specificato.
I caratteri validi per il nome sono 'A'-'Z', 'a'-'z', '0'-'9', '.'
Ai nomi dei parametri viene applicata la distinzione tra lettere maiuscole e minuscole.
I parametri sono memorizzati nel file eaglerc dell'utente. Per garantire che i diversi ULP non sovrascrivano i parametri reciproci nel caso utilizzino gli stessi nomi di parametro, è consigliabile aggiungere il nome ULP all'inizio del nome di parametro. Ad esempio, in un ULP denominato mytool.ulp che utilizza un parametro denominato MyParam, tale parametro può essere memorizzato con il nome
mytool.MyParamPoiché i parametri di configurazione vengono memorizzati nel file eaglerc, che contiene anche tutti gli altri parametri specifici dell'utente di EAGLE, è possibile accedere ai parametri EAGLE con cfgget() e cfgset(). Per evitare conflitti tra i parametri ULP e i parametri EAGLE, è necessario aggiungere ai parametri EAGLE il prefisso "EAGLE:", come in
EAGLE:Option.XrefLabelFormatNotare che non è disponibile alcuna documentazione relativa ai parametri interni di EAGLE e a come vengono memorizzati nel file eaglerc. Inoltre, fare attenzione quando si modifica uno di questi parametri. Analogamente al file eaglerc stesso, modificare questi parametri solo se si dispone delle conoscenze necessarie. Per rendere effettive le modifiche apportate ad alcuni parametri EAGLE, potrebbe essere necessario riavviare EAGLE. Nel file eaglerc i parametri ULP vengono memorizzati con il prefisso "ULP:". Pertanto, è possibile che questo prefisso venga posizionato facoltativamente davanti ai nomi dei parametri ULP, come in
ULP:mytool.MyParamEsempio
string MyParam = cfgget("mytool.MyParam", "SomeDefault");
MyParam = "OtherValue";
cfgset("mytool.MyParam", MyParam);country()
Funzione
Restituisce il codice del paese del sistema in uso.
Sintassi
string country();Valori restituiti
country restituisce una stringa costituita da due caratteri maiuscoli che identificano il paese utilizzato nel sistema corrente. Se non è possibile determinare l'impostazione di tale paese, verrà restituita l'impostazione di default "US".
Vedere anche lingua
Esempio
dlgMessageBox("Your country code is: " + country());exit()
Funzione
Esce da un ULP.
Sintassi
void exit(int result);
void exit(string command);Vedere anche RUN
La funzione exit termina l'esecuzione di un ULP.
Se viene fornito un risultato intero, verrà utilizzato come valore di ritorno del programma. Se viene fornito un comando string, verrà eseguito come se fosse stato immesso nella riga di comando subito dopo il comando RUN. In questo caso, il valore restituito dell'ULP è impostato su EXIT_SUCCESS.
Costanti
EXIT_SUCCESS return value for successful program execution (value 0)
EXIT_FAILURE return value for failed program execution (value -1)fdlsignature()
Funzione
Calcola una firma digitale per Design Link di Premier Farnell.
Sintassi
string fdlsignature(string s, string key);La funzione fdlsignature viene utilizzata per calcolare una firma digitale quando si accede all'interfaccia Design Link di Premier Farnell.
language()
Funzione
Restituisce il codice lingua del sistema in uso.
Sintassi
string language();Valori restituiti
language restituisce una stringa costituita da due caratteri minuscoli che identificano la lingua utilizzata nel sistema corrente. Se non è possibile determinare tale impostazione della lingua, verrà restituita l'impostazione di default "en".
Vedi anche country
La funzione lingua può essere utilizzata per fare in modo che ULP utilizzi una stringa di messaggio diversa, a seconda della lingua utilizzata dal sistema corrente.
Nell'esempio seguente, tutte le stringhe utilizzate nel ULP sono elencate nella serie di stringhe I18N[], precedute da una stringa contenente i diversi codici lingua supportati da questo ULP. Notare i caratteri vtab utilizzati per separare le singole parti di ogni stringa (sono importanti per la funzione di ricerca) e l'utilizzo delle virgole per separare le stringhe. Il lavoro effettivo viene eseguito nella funzione tr(), che restituisce la versione tradotta della stringa specificata. Se la stringa originale non è disponibile nella serie I18N o se non esiste una traduzione per la lingua corrente, verrà utilizzata la stringa originale non tradotta.
La prima lingua definita nella serie I18N deve essere quella in cui vengono scritte le stringhe utilizzate nel ULP e deve essere in generale l'inglese affinché il programma sia accessibile al maggior numero di utenti.
Esempio
string I18N[] = {
"en\v"
"de\v"
"it\v"
,
"I18N Demo\v"
"Beispiel f?r Internationalisierung\v"
"Esempio per internazionalizzazione\v"
,
"Hello world!\v"
"Hallo Welt!\v"
"Ciao mondo!\v"
,
"+Ok\v"
"+Ok\v"
"+Approvazione\v"
,
"-Cancel\v"
"-Abbrechen\v"
"-Annullamento\v"
};
int Language = strstr(I18N[0], language()) / 3;
string tr(string s)
{
string t = lookup(I18N, s, Language, '\v');
return t ? t : s;
}
dlgDialog(tr("I18N Demo")) {
dlgHBoxLayout dlgSpacing(350);
dlgLabel(tr("Hello world!"));
dlgHBoxLayout {
dlgPushButton(tr("+Ok")) dlgAccept();
dlgPushButton(tr("-Cancel")) dlgReject();
}
};lookup()
Funzione
Cerca i dati in una serie di stringhe.
Sintassi
string lookup(string array[], string key, int field_index[, char separator]);
string lookup(string array[], string key, string field_name[, char separator]);Valori restituiti
lookup restituisce il valore del campo identificato da field_index o field_name. Se il campo non esiste o non viene trovata alcuna chiave di corrispondenza della stringa, viene restituita una stringa vuota.
Vedere anche fileread, strsplit
Una serie che può essere utilizzata con lookup() è costituita da stringhe di testo, ciascuna delle quali rappresenta un record di dati.
Ogni record di dati contiene un numero arbitrario di campi, separati dal carattere separatore (il valore di default è "\t", il carattere di tabulazione). Il primo campo di un record viene utilizzato come la chiave e viene numerato 0.
Tutti i record devono contenere campi chiave univoci e nessuno dei campi chiave può essere vuoto; in caso contrario, non è possibile definire quale record verrà trovato.
Se la prima stringa della serie contiene un record "Header" (ovvero un record in cui ogni campo ne descrive il suo contenuto), l'utilizzo della ricerca con una stringa field_name determina automaticamente l'indice di tale campo. Ciò consente di utilizzare la funzione di ricerca senza sapere esattamente quale indice campo contiene i dati desiderati. È responsabilità dell'utente verificare che il primo record contenga effettivamente informazioni sull'intestazione.
Se il parametro chiave nella chiamata a lookup() è una stringa vuota, verrà utilizzata la prima stringa della serie. Ciò consente a un programma di determinare se è presente un record di intestazione con i nomi di campo obbligatori.
Se un campo contiene il carattere separatore, tale campo deve essere racchiuso tra virgolette doppie (come in "abc;def", ipotizzando che il punto e virgola (';') sia utilizzato come separatore). Lo stesso vale se il campo contiene virgolette doppie ("), nel qual caso le virgolette doppie all'interno del campo devono essere raddoppiate (come in "abc;""def"";ghi", che diventerebbe abc;"def";ghi).
È consigliabile utilizzare il separatore "tab" di default, che non presenta questi problemi (nessun campo può contenere un carattere di tabulazione).
Di seguito è riportato un esempio di file di dati (';' è stato utilizzato come separatore per migliorare la leggibilità):
Name;Manufacturer;Code;Price
7400;Intel;I-01-234-97;$0.10
68HC12;Motorola;M68HC1201234;$3.50Esempio
string OrderCodes[];
if (fileread(OrderCodes, "ordercodes") > 0) {
if (lookup(OrderCodes, "", "Code", ';')) {
schematic(SCH) {
SCH.parts(P) {
string OrderCode;
// both following statements do exactly the same:
OrderCode = lookup(OrderCodes, P.device.name, "Code", ';');
OrderCode = lookup(OrderCodes, P.device.name, 2, ';');
}
}
}
else
dlgMessageBox("Missing 'Code' field in file 'ordercodes');
}palette()
Funzione
Restituisce informazioni sulla tavolozza colori.
Sintassi
int palette(int index[, int type]);Valori restituiti
La funzione palette restituisce un valore ARGB intero nel formato 0xaarrggbb o il tipo della tavolozza attualmente utilizzata (a seconda del valore di indice).
La funzione palette restituisce il valore ARGB del colore con l'indice specificato (che può essere compreso nell'intervallo da 0 a PALETTE_ENTRIES-1). Se type non è specificato (o è -1), verrà utilizzata la tavolozza assegnata alla finestra dell'editor corrente. In caso contrario, type specifica la tavolozza di colori da utilizzare (PALETTE_BLACK, PALETTE_WHITE o PALETTE_COLORED). Il valore speciale -1 per l'indice fa sì che la funzione restituisca il parametro type della tavolozza attualmente in uso in base alla finestra dell'editor.
Se il parametro index o type è fuori intervallo, verrà visualizzato un messaggio di errore e ULP verrà terminato.
Costanti
| PALETTE_TYPES | il numero di tipi di tavolozza (3) |
| PALETTE_BLACK | la tavolozza con sfondo nero (0) |
| PALETTE_WHITE | la tavolozza con sfondo bianco (1) |
| PALETTE_COLORED | la tavolozza con sfondo colorato (2) |
| PALETTE_ENTRIES | il numero di colori per tavolozza (64) |
sleep()
Funzione
Numero sleep in secondi.
Sintassi
void sleep(int seconds);Vedere anche time()
La funzione sleep ritarda l'esecuzione di un programma ULP per il numero di secondi specificato.
sort()
Funzione
Ordina una serie o un gruppo di serie.
Sintassi
void sort(int number, array1[, array2,...]);La funzione di ordinamento consente di ordinare direttamente una serie1 specificata o di ordinare un set di serie (a partire da serie2), nel qual caso si presume che la serie1 sia una serie di int, che verrà utilizzata come serie puntatore.
In ogni caso, l'argomento number definisce il numero di elementi nella/e serie.
Ordinamento di una serie singola
Se la funzione di ordinamento viene chiamata con una serie singola, tale serie verrà ordinata direttamente, come nell'esempio seguente:
string A[];
int n = 0;
A[n++] = "World";
A[n++] = "Hello";
A[n++] = "The truth is out there...";
sort(n, A);
for (int i = 0; i < n; ++i)
printf(A[i]);Ordinamento di un set di serie
Se la funzione di ordinamento viene chiamata con più di una serie, la prima serie deve essere una serie di int, mentre il tipo di tutte le altre serie potrebbe essere qualsiasi e le serie potrebbero contenere i dati da ordinare. Nell'esempio seguente viene illustrato come la prima serie verrà utilizzata come un puntatore:
numeric string Nets[], Parts[], Instances[], Pins[];
int n = 0;
int index[];
schematic(S) {
S.nets(N) N.pinrefs(P) {
Nets[n] = N.name;
Parts[n] = P.part.name;
Instances[n] = P.instance.name;
Pins[n] = P.pin.name;
++n;
}
sort(n, index, Nets, Parts, Instances, Pins);
for (int i = 0; i < n; ++i)
printf("%-8s %-8s %-8s %-8s\n",
Nets[index[i]], Parts[index[i]],
Instances[index[i]], Pins[index[i]]);
}L'idea di base è che una rete può avere diversi pin collegati ad essa e in un elenco di reti potrebbe essere necessario ordinare i nomi di rete e all'interno di una rete potrebbe essere necessario ordinare i nomi parte e così via. Notare l'utilizzo della parola chiave numeric nelle serie di stringhe. Così facendo le stringhe vengono ordinate in un modo che tiene conto di una parte numerica alla fine delle stringhe, che porta a IC1, IC2,... IC9, IC10 anziché all'ordine alfabetico IC1, IC10, IC2, IC9.
Quando si ordina un set di serie, la prima serie (indice) deve essere di tipo int e non deve essere inizializzata. Qualunque sia il contenuto della serie di indice prima di chiamare la funzione di ordinamento, verrà sovrascritto dai valori di indice risultanti.
status()
Funzione
Visualizza un messaggio di stato nella barra di stato.
Sintassi
void status(string message);Vedere anche dlgMessageBox()
La funzione status visualizza il messaggio specificato nella barra di stato della finestra dell'editor in cui ULP è in esecuzione.
system()
Funzione
Esegue un programma esterno.
Sintassi
int system(string command);Valori restituiti
La funzione system restituisce lo stato di uscita del comando. Questo valore è in genere 0 se non si verificano errori e diverso da zero in caso contrario.
La funzione system esegue il programma esterno fornito dalla stringa di comando e attende il completamento del programma.
Reindirizzamento input/output
Se il programma esterno deve leggere il suo input standard da (o scrivere nel suo output standard in) un file specifico, è necessario reindirizzare l'input/output.
In Linux e Mac OS X questa operazione viene eseguita aggiungendo semplicemente un '<' o '>' alla riga di comando, seguito dal nome file desiderato, come in
system("program < infile > outfile");che esegue il programma e lo legge da infile e lo scrive su outfile.
In Windows, è necessario eseguire esplicitamente un processore dei comandi per eseguire questa operazione, come in
system("cmd.exe /c program < infile > outfile");(nei sistemi Windows basati su DOS utilizzare command.com anziché cmd.exe).
Esecuzione in background
La funzione di sistema attende il completamento del programma specificato. Questa operazione è utile per programmi che vengono eseguiti solo per alcuni secondi o che catturano completamente l'attenzione dell'utente.
Se un programma esterno viene eseguito per un periodo di tempo più lungo e si desidera che la chiamata di sistema venga completata immediatamente, senza attendere il termine del programma, è possibile aggiungere un carattere '&' alla stringa di comando in Linux e Mac OS X, come in
system("program &");In Windows, per eseguire questa operazione è necessario eseguire esplicitamente un processore di comando, come in
system("cmd.exe /c start program");(nei sistemi Windows basati su DOS utilizzare command.com anziché cmd.exe).
Esempio
int result = system("simulate -f filename");In questo caso, verrebbe chiamato un programma di simulazione, cui viene passato un file creato da ULP. Si noti che questa simulazione è solo un esempio e non fa parte del pacchetto EAGLE.
Se si desidera avere il controllo sui comandi di sistema effettivamente eseguiti, è possibile scrivere una funzione wrapper che richiede all'utente la conferma prima di eseguire il comando, ad esempio
int MySystem(string command)
{
if (dlgMessageBox("!Ok to execute the following command?<p><tt>" + command + "</tt>", "&Yes", "&No") == 0)
return system(command);
return -1;
}
int result = MySystem("simulate -f filename");Conversioni unità
Funzione
Converte le unità interne.
Sintassi
real u2inch(int n);
real u2mic(int n);
real u2mil(int n);
real u2mm(int n);
int inch2u(real n);
int mic2u(real n);
int mil2u(real n);
int mm2u(real n);Valori restituiti
u2inch restituisce il valore di n in pollici.
u2mic restituisce il valore di n in micron (1/1000 mm).
u2mil restituisce il valore n in mil (1/1000 pollice).
u2mm restituisce il valore di n in millimetri.
inch2u restituisce il valore di n (che è in pollici) come unità interne.
mic2u restituisce il valore n (che è in micron) come unità interne.
mil2u restituisce il valore n (che è in mil) come unità interne.
mm2u restituisce il valore n (che è in millimetri) come unità interne.
Vedere anche UL_GRID
EAGLE memorizza tutti i valori di coordinate e dimensioni come valori int con una risoluzione di 1/320000 mm (0,003125 µ). Le funzioni di conversione unità precedenti possono essere utilizzate per convertire queste unità interne nelle unità di misura desiderate, e viceversa.
Esempio
board(B) {
B.elements(E) {
printf("%s at (%f, %f)\n", E.name,
u2mm(E.x), u2mm(E.y));
}
}Le funzioni di rete vengono utilizzate per accedere a siti remoti su Internet.
neterror()
Funzione
Restituisce il messaggio di errore della chiamata di funzione di rete più recente.
Sintassi
string neterror(void);Valori restituiti
neterror restituisce un messaggio di testo che descrive l'errore che si è verificato nella chiamata più recente ad una funzione di rete.
Se non si verifica alcun errore, il valore restituito è una stringa vuota.
Vedere anche netget, netpost
La funzione neterror deve essere chiamata dopo che una funzione di rete qualsiasi ha restituito un valore negativo, per indicare che si è verificato un errore. Il valore restituito di neterror è una stringa di testo che può essere visualizzata all'utente.
Per gli errori relativi alle connessioni SSL (HTTPS), considerare anche la nota in netget.
Esempio
string Result;
if (netget(Result, "http://web.cadsoft.de/cgi-bin/http-test?see=me&hear=them") >= 0) {
// process Result
}
else
dlgMessageBox(neterror());netget()
Funzione
Esegue una richiesta GET sulla rete.
Sintassi
int netget(dest, string url[, int timeout]);Valori restituiti
netget restituisce il numero di oggetti letti dalla rete. Il significato effettivo del valore restituito dipende dal tipo di dest.
In caso di errore, viene restituito un valore negativo ed è possibile chiamare neterror() per visualizzare un messaggio di errore per l'utente.
Vedere anche netpost, neterror, fileread
La funzione netget invia l'URL specificato alla rete e memorizza il risultato nella variabile dest. Se non si è verificata alcuna attività di rete per i secondi di timeout, la connessione verrà terminata. Il valore di timeout di default è 20 secondi.
L'URL deve contenere il protocollo da utilizzare (HTTP, HTTPS o FTP) e può contenere coppie di parametri name=value, come in
http://web.cadsoft.de/cgi-bin/http-test?see=me&hear=them
ftp://ftp.cadsoft.de/eagle/userfiles/READMESe sono richiesti un ID utente e una password per accedere ad un sito remoto, possono essere specificati come
https://userid:password@www.site.com/...Se dest è una serie di caratteri, il risultato verrà gestito come dati binari non elaborati e il valore restituito riflette il numero di byte memorizzati nella serie di caratteri.
Se dest è una serie di stringhe, il risultato verrà gestito come dati di testo (una riga per membro della serie) e il valore restituito corrisponderà al numero di righe memorizzate nella serie di stringhe. I caratteri nuova riga verranno rimossi.
Se dest è una stringa, il risultato verrà memorizzato in tale stringa e il valore restituito sarà la lunghezza della stringa. Notare che, in caso di dati binari, il risultato viene troncato alla prima occorrenza di un byte con il valore 0x00.
Se è necessario utilizzare un proxy per accedere ad Internet con HTTP o HTTPS, è possibile configurarlo nella finestra di dialogo "Configura" in "Guida/Verifica aggiornamenti" nel Pannello di controllo.
Connessioni SSL
Per le connessioni SSL (richiesta per HTTPS) sono richiesti certificati, che potrebbero mancare o essere scaduti in alcuni sistemi. La connessione non va a buon fine con messaggio di errore conseguente di cui è possibile eseguire una query con neterror(). Con questo messaggio di errore, deve essere possibile installare certificati mancanti o aggiornare quelli scaduti e rendere la connessione attiva in questo modo. Come eseguire questa operazione dipende dal sistema (ad esempio, in Windows tramite Pannello di controllo/Opzioni Internet e così via).
Esempio
string Result;
if (netget(Result, "http://web.cadsoft.de/cgi-bin/http-test?see=me&hear=them") >= 0) {
// process Result
}
else
dlgMessageBox(neterror());netpost()
Funzione
Esegue una richiesta POST sulla rete.
Sintassi
int netpost(dest, string url, string data[, int timeout[, string content_type] ]);Valori restituiti
netpost restituisce il numero di oggetti letti dalla rete. Il significato effettivo del valore restituito dipende dal tipo di dest. In caso di errore, viene restituito un valore negativo ed è possibile chiamare neterror() per visualizzare un messaggio di errore per l'utente.
Vedere anche netget, neterror, fileread
La funzione netpost invia i dati specificati all'URL specificato sulla rete e memorizza il risultato nella variabile dest.
Se non si è verificata alcuna attività di rete per i secondi di timeout, la connessione verrà terminata. Il valore di timeout di default è 20 secondi.
Se viene specificato content_type, il tipo di contenuto di default "text/html; charset=utf-8" viene sovrascritto. L'URL deve contenere il protocollo da utilizzare (HTTP o HTTPS).
Se sono richiesti un ID utente e una password per accedere ad un sito remoto, possono essere specificati come
https://userid:password@www.secret-site.com/...Se dest è una serie di caratteri, il risultato verrà gestito come dati binari non elaborati e il valore restituito riflette il numero di byte memorizzati nella serie di caratteri.
Se dest è una serie di stringhe, il risultato verrà gestito come dati di testo (una riga per membro della serie) e il valore restituito corrisponderà al numero di righe memorizzate nella serie di stringhe. I caratteri nuova riga verranno rimossi.
Se dest è una stringa, il risultato verrà memorizzato in tale stringa e il valore restituito sarà la lunghezza della stringa. Notare che, in caso di dati binari, il risultato viene troncato alla prima occorrenza di un byte con il valore 0x00.
Se è necessario utilizzare un proxy per accedere ad Internet con HTTP o HTTPS, è possibile configurarlo nella finestra di dialogo "Configura" in "Guida/Verifica aggiornamenti" nel Pannello di controllo.
Se si verificano problemi correlati alle connessioni SSL (HTTPS), considerare la nota in netget.
Esempio
string Data = "see=me\nhear=them";
string Result;
if (netpost(Result, "http://web.cadsoft.de/cgi-bin/http-test", Data) >= 0) {
// process Result
}
else
dlgMessageBox(neterror());Le funzioni di stampa vengono utilizzate per stampare le stringhe formattate.
printf()
Funzione
Scrive l'output formattato in un file.
Sintassi
int printf(string format[, argument, ...]);Valori restituiti
La funzione printf restituisce il numero di caratteri scritti nel file che è stato aperto dall'istruzione di output più recente. In caso di errore, printf restituisce -1.
Vedere anche sprintf, output, fileerror
Stringa di formato
La stringa di formato controlla il modo in cui gli argomenti verranno convertiti, formattati e stampati. Per il formato, il numero di argomenti deve coincidere con quello richiesto. Il numero e il tipo degli argomenti verranno controllati rispetto al formato ed eventuali incongruenze causeranno un messaggio di errore. La stringa di formato contiene due tipi di oggetti: caratteri normali e indicatori di formato.
Indicatori di formato
Un indicatore di formato ha la forma:
% [flags] [width] [.prec] typeOgni specifica di formato inizia con il carattere percentuale (%), il carattere % è seguito dal seguente, in questo ordine:
an optional sequence of flag characters, [flags]
an optional width specifier, [width]
an optional precision specifier, [.prec]
the conversion type character, typeCaratteri tipo di conversione
| d | intero decimale con segno |
| o | intero ottale senza segno |
| u | intero decimale senza segno |
| x | intero esadecimale senza segno (con a, b,...) |
| X | intero esadecimale senza segno (con A, B,...) |
| f | valore reale con segno nel formato [-]dddd.dddd |
| E | valore reale con segno nel formato [-]d.ddde[±]ddd |
| E | identico a e, ma con E per esponente |
| g | valore reale con segno in formato e o f, in base al valore e alla precisione specificati |
| G | identico a g, ma con E per esponente se utilizzato il formato e |
| C | carattere singolo |
| o | stringa di caratteri |
| % | il carattere % viene stampato |
Caratteri flag
I seguenti caratteri flag possono essere visualizzati in qualsiasi ordine e combinazione:
| "-" | l'elemento formattato è giustificato a sinistra all'interno del campo; in genere, gli elementi sono giustificati a destra |
| "+" | un elemento positivo, con segno inizia sempre con un carattere più (+); in genere, solo gli elementi negativi iniziano con un segno |
| " " | un elemento positivo, con segno inizierà sempre con uno spazio; se sono specificati "+" e " ", "+" sovrascrive " " |
Indicatori di larghezza
L'indicatore di larghezza imposta la larghezza campo minima per un valore di output.
La larghezza viene specificata direttamente, tramite una stringa di cifre decimali o indirettamente, tramite un asterisco (*). Se si utilizza un asterisco per l'indicatore di larghezza, l'argomento precedente (che deve essere un int) a quello che viene formattato (con questo indicatore di formato) determina la larghezza minima del campo di output.
In nessun caso, una larghezza campo inesistente o piccola causa il troncamento di un campo. Se il risultato di una conversione supera la larghezza del campo, il campo viene semplicemente espanso per contenere il risultato della conversione.
| n | Vengono stampati almeno n caratteri. Se il valore di output contiene meno di n caratteri, l'output viene riempito con spazi vuoti (riempimento a destra se specificato il flag "-", riempimento a sinistra in caso contrario). |
| 0n | Vengono stampati almeno n caratteri. Se il valore di output contiene meno di n caratteri, viene riempito a sinistra con zero. |
| * | L'elenco di argomenti fornisce l'indicatore di larghezza, che deve precedere l'argomento effettivo in corso di formattazione. |
Indicatori di precisione
Un identificatore di precisione inizia sempre con un punto (.) per separarlo da qualsiasi identificatore di larghezza precedente. Quindi, analogamente alla larghezza, la precisione viene specificata direttamente tramite una stringa di cifre decimali, o indirettamente, tramite un asterisco (*). Se si utilizza un asterisco per l'indicatore di precisione, l'argomento precedente (che deve essere un int) a quello che viene formattato (con questo indicatore di formato) determina la larghezza minima del campo di output.
| nessuno | Precisione impostata sul valore di default. |
| .0 | Per i tipi int, la precisione è impostata sul valore di default; per i tipi real, il punto decimale non viene stampato. |
| .n | vengono stampati n caratteri o n posizioni decimali. Se il valore di output contiene più di n caratteri, l'output potrebbe essere troncato o arrotondato (a seconda del tipo di carattere). |
| * | L'elenco di argomenti fornisce l'indicatore di precisione che deve precedere l'argomento effettivo che viene formatto. |
Valori di precisione di default
| douxX | 1 |
| eEf | 6 |
| gG | tutte le cifre significative |
| C | nessun effetto |
| o | stampa stringa intera |
Come la specifica della precisione influenza la conversione (.n)
| douxX | .n specifica che vengono stampati almeno n caratteri. Se l'argomento di input contiene meno di n cifre, il valore di output viene riempito a sinistra con zeri. Se l'argomento di input contiene più di n cifre, il valore di output non viene troncato. |
| eEf | .n specifica che dopo il punto decimale vengono stampati n caratteri e che l'ultima cifra stampata viene arrotondata. |
| gG | .n specifica che vengono stampate al massimo n cifre significative. |
| C | .n non influenza l'output. |
| o | .n specifica che non vengono stampati più di n caratteri. |
Caratteri zero binari
A differenza di sprintf, la funzione printf può stampare caratteri zero binari (0x00).
char c = 0x00;
printf("%c", c);Esempio
int i = 42;
real r = 3.14;
char c = 'A';
string s = "Hello";
printf("Integer: %8d\n", i);
printf("Hex: %8X\n", i);
printf("Real: %8f\n", r);
printf("Char: %-8c\n", c);
printf("String: %-8s\n", s);sprintf()
Funzione
Scrive l'output formattato in una stringa.
Sintassi
int sprintf(string result, string format[, argument, ...]);Valori restituiti
La funzione sprintf restituisce il numero di caratteri scritti nella stringa dei risultati. Se si verifica un errore, sprintf restituisce -1.
Vedere anche printf
Stringa di formato
Vedere printf.
Caratteri zero binari
Notare che sprintf non può restituire stringhe con caratteri zero binari incorporati (0x00). Se la stringa risultante contiene un carattere zero binario, gli eventuali caratteri che seguono tale carattere zero non verranno rimossi. Utilizzare printf se è necessario eseguire l'output di dati binari.
Esempio
string result;
int number = 42;
sprintf(result, "The number is %d", number);Le funzioni stringa vengono utilizzate per manipolare stringhe di caratteri.
Sono disponibili le funzioni stringa riportate di seguito:
strchr()
strjoin()
strlen()
strlwr()
strrchr()
strrstr()
strsplit()
strstr()
strsub()
strtod()
strtol()
strupr()
strxstr()strchr()
Funzione
Esegue la scansione di una stringa per la prima occorrenza di un determinato carattere.
Sintassi
int strchr(string s, char c[, int index]);Valori restituiti
La funzione strchr restituisce l'offset intero del carattere nella stringa o -1 se non esiste alcuna occorrenza del carattere nella stringa.
Vedere anche strrchr, strstr
Se viene specificato il parametro index, la ricerca inizia in tale posizione. I valori negativi vengono conteggiati dalla fine della stringa.
Esempio
string s = "This is a string";
char c = 'a';
int pos = strchr(s, c);
if (pos >= 0)
printf("The character %c is at position %d\n", c, pos);
else
printf("The character was not found\n");strjoin()
Funzione
Unisce una serie di stringhe per formare una stringa singola.
Sintassi
string strjoin(string array[], char separator);Valori restituiti
La funzione strjoin restituisce le voci combinate della serie.
Vedere anche strsplit, lookup, fileread
strjoin unisce tutte le voci della serie, delimitate dal separatore specificato e restituisce la stringa risultante.
Se il separatore è il carattere di nuova riga ('\n'), la stringa risultante verrà terminata con un carattere di nuova riga. Questa operazione viene eseguita per avere file di testo costituito da N righe (ciascuna delle quali termina con un carattere nuova riga), che viene letto con la funzione fileread() e diviso in una serie di N stringhe unite alla stringa originale come letto dal file.
Esempio
string a[] = { "Field 1", "Field 2", "Field 3" };
string s = strjoin(a, ':');strlen()
Funzione
Calcola la lunghezza di una stringa.
Sintassi
int strlen(string s);Valori restituiti
La funzione strlen restituisce il numero di caratteri nella stringa.
Esempio
string s = "This is a string";
int l = strlen(s);
printf("The string is %d characters long\n", l);strlwr()
Funzione
Converte le lettere maiuscole in una stringa in lettere minuscole.
Sintassi
string strlwr(string s);Valori restituiti
La funzione strlwr restituisce la stringa modificata. La stringa originale (fornita come parametro) non viene modificata.
Vedere anche strupr, tolower
Esempio
string s = "This Is A String";
string r = strlwr(s);
printf("Prior to strlwr: %s - after strlwr: %s\n", s, r);strrchr()
Funzione
Esegue la scansione di una stringa per individuare l'ultima occorrenza di un determinato carattere.
Sintassi
int strrchr(string s, char c[, int index]);Valori restituiti
La funzione strrchr restituisce l'offset intero del carattere nella stringa o -1 se non esiste alcuna occorrenza del carattere nella stringa.
Vedere anche strchr, strrstr
Se viene specificato il parametro index, la ricerca inizia in tale posizione. I valori negativi vengono conteggiati dalla fine della stringa.
Esempio
string s = "This is a string";
char c = 'a';
int pos = strrchr(s, c);
if (pos >= 0)
printf("The character %c is at position %d\n", c, pos);
else
printf("The character was not found\n");strrstr()
Funzione
Esegue la scansione di una stringa per individuare l'ultima occorrenza di una determinata sottostringa.
Sintassi
int strrstr(string s1, string s2[, int index]);Valori restituiti
La funzione strrstr restituisce l'offset intero del primo carattere di s2 in s1 o -1 se non esiste alcuna occorrenza della sottostringa nella stringa.
Vedere anche strstr, strrchr
Se viene specificato il parametro index, la ricerca inizia in tale posizione. I valori negativi vengono conteggiati dalla fine della stringa.
Esempio
string s1 = "This is a string", s2 = "is a";
int pos = strrstr(s1, s2);
if (pos >= 0)
printf("The substring starts at %d\n", pos);
else
printf("The substring was not found\n");strsplit()
Funzione
Divide una stringa in campi separati.
Sintassi
int strsplit(string &array[], string s, char separator);
Valori restituiti
La funzione strsplit restituisce il numero di voci copiate nella serie.
Vedere anche strjoin, lookup, fileread
strsplit divide la stringa s in corrispondenza del separatore specificato e memorizza i campi risultanti nella serie.
Se il separatore è il carattere di nuova riga ('\n'), l'ultimo campo verrà rimosso automaticamente se è vuoto. Questa operazione viene eseguita per avere un file di testo costituito da N righe (ciascuna delle quali termina con un carattere nuova riga), che viene letto con la funzione fileread() per dividerlo in una serie di N stringhe. Con qualsiasi altro separatore, verrà conteggiato un campo vuoto alla fine della stringa, pertanto "a:b:c:" si tradurrà in 4 campi, l'ultimo dei quali è vuoto.
Esempio
string a[];
int n = strsplit(a, "Field 1:Field 2:Field 3", ':');strstr()
Funzione
Esegue la scansione di una stringa per individuare la prima occorrenza di una determinata sottostringa.
Sintassi
int strstr(string s1, string s2[, int index]);Valori restituiti
La funzione strrstr restituisce l'offset intero del primo carattere di s2 in s1 o -1 se non esiste alcuna occorrenza della sottostringa nella stringa.
Vedere anche strrstr, strchr, strxstr
Se viene specificato il parametro index, la ricerca inizia in tale posizione. I valori negativi vengono conteggiati dalla fine della stringa.
Esempio
string s1 = "This is a string", s2 = "is a";
int pos = strstr(s1, s2);
if (pos >= 0)
printf("The substring starts at %d\n", pos);
else
printf("The substring was not found\n");strsub()
Funzione
Estrae una sottostringa da una stringa.
Sintassi
string strsub(string s, int start[, int length]);
Valori restituiti
La funzione strsub restituisce la sottostringa indicata dal valore start e length. Il valore per length deve essere positivo, in caso contrario verrà restituita una stringa vuota. Se si omette il parametro length, viene restituito il resto della stringa (a partire da start).
Se il parametro start fa riferimento a una posizione esterna alla stringa, viene restituita una stringa vuota.
Esempio
string s = "This is a string";
string t = strsub(s, 4, 7);
printf("The extracted substring is: %s\n", t);strtod()
Funzione
Converte una stringa in un valore reale.
Sintassi
real strtod(string s);Valori restituiti
La funzione strtod restituisce la rappresentazione numerica della stringa specificata come un valore real. La conversione termina con il primo carattere che non rientra nel formato di una costante real. Se si verifica un errore durante la conversione della stringa, verrà restituito 0.0.
Vedere anche strtol
Esempio
string s = "3.1415";
real r = strtod(s);
printf("The value is %f\n", r);strtol()
Funzione
Converte una stringa in un valore intero.
Sintassi
int strtol(string s);Valori restituiti
La funzione strtol restituisce la rappresentazione numerica della stringa specificata come un valore int. La conversione termina in corrispondenza del primo carattere che non rientra nel formato di una costante intera. Se si verifica un errore durante la conversione della stringa, verrà restituito 0.
Vedere anche strtod
Esempio
string s = "1234";
int i = strtol(s);
printf("The value is %d\n", i);strupr()
Funzione
Converte le lettere minuscole in una stringa in lettere maiuscole.
Sintassi
string strupr(string s);Valori restituiti
La funzione strupr restituisce la stringa modificata. La stringa originale (fornita come parametro) non viene modificata.
Vedi anche strlwr, toupper
Esempio
string s = "This Is A String";
string r = strupr(s);
printf("Prior to strupr: %s - after strupr: %s\n", s, r);strxstr()
Funzione
Esegue la scansione di una stringa per individuare la prima occorrenza di una determinata espressione regolare.
Sintassi
int strxstr(string s1, string s2[, int index[, int &length]]);Valori restituiti
La funzione strxstr restituisce l'offset intero della sottostringa in s1 che corrisponde all'espressione regolare in s2 o -1 se l'espressione regolare non corrisponde nella stringa.
Vedere anche strstr, strchr, strrstr
Se viene specificato il parametro index, la ricerca inizia in tale posizione. I valori negativi vengono conteggiati dalla fine della stringa.
Se viene specificato il parametro length, la lunghezza effettiva della sottostringa corrispondente viene restituita in tale variabile.
Le espressioni regolari consentono di trovare un pattern all'interno di una stringa di testo. Ad esempio, l'espressione regolare "i.*a" trova una sequenza di caratteri che inizia con una 'i', seguita da qualsiasi carattere ('.') Corrisponde a "is a" nonché "is this a" o "ia". Dettagli sulle espressioni regolari sono disponibili, ad esempio, nel libro Mastering Regular Expressions di Jeffrey E. F. Friedl. Friedl.
Esempio
string s1 = "This is a string", s2 = "i.*a";
int len = 0;
int pos = strxstr(s1, s2, 0, len);
if (pos >= 0)
printf("The substring starts at %d and is %d charcaters long\n", pos, len);
else
printf("The substring was not found\n");Le funzioni URN vengono utilizzate per elaborare gli URN.
urnbase()
Funzione
Estrae l'URN di base da una stringa URN.
Sintassi
string urnbase(string urn);Valori restituiti
La funzione urnbase restituisce l'URN di base dell'URN fornito, ovvero l'URN senza versione finale o /. Ad esempio, l'URN di base di "urn:adsk.eagle:footprint:123/4" è "urn:adsk.eagle:footprint:123". Se non è presente alcuna versione, verrà restituita la stringa di input.
Esempio
string urn = "urn:adsk.eagle:footprint:123/4";
string base = urnbase(urn);
printf("The base URN is: %s\n", base);urnversion()
Funzione
Estrae la versione da una stringa URN.
Sintassi
int urnversion(string urn);Valori restituiti
La funzione urnversion restituisce la versione dell'URN fornito, ossia il numero che segue il carattere /. Se non è presente alcuna versione, viene restituito -1.
Esempio
string urn = "urn:adsk.eagle:footprint:123/4";
int version = urnversion(urn);
printf("The URN version is: %d\n", version);Le funzioni temporali vengono utilizzate per recuperare ed elaborare le informazioni su data e ora.
Sono disponibili le funzioni temporali riportate di seguito:
sleep()
t2day()
t2dayofweek()
t2hour()
t2minute()
t2month()
t2second()
t2string()
t2year()
time()
timems()time()
Funzione
Determina l'ora di sistema corrente.
Sintassi
int time(void);Valori restituiti
La funzione time restituisce l'ora di sistema corrente come il numero di secondi trascorsi da una data di riferimento dipendente dal sistema.
Vedere anche Time Conversions, filetime, timems()
Esempio
int CurrentTime = time();timems()
Funzione
Determina il numero di millisecondi dall'inizio del ULP.
Sintassi
int timems(void);Valori restituiti
La funzione timems restituisce il numero di millisecondi dall'inizio del ULP. Dopo 86400000 millisecondi (ovvero, ogni 24 ore), il valore ricomincia da 0.
Vedere anche time
Esempio
int elapsed = timems();Time Conversions
Funzione
Converte il valore temporale in giorno, mese, anno e così via.
Sintassi
int t2day(int t);
int t2dayofweek(int t);
int t2hour(int t);
int t2minute(int t);
int t2month(int t);
int t2second(int t);
int t2year(int t);
string t2string(int t[, string format]);Valori restituiti
*t2day* returns the day of the month (1..31)
*t2dayofweek* returns the day of the week (0=sunday..6)
*t2hour* returns the hour (0..23)
*t2minute* returns the minute (0..59)
*t2month* returns the month (0..11)
*t2second* returns the second (0..59)
*t2year* returns the year (including century!)
*t2string* returns a formatted string containing date and timeVedere anche time
La funzione t2string senza il parametro di formato facoltativo converte il tempo t specificato in una stringa specifica del paese in ora locale.
Se t2string viene chiamata con una stringa di formato, tale formato viene utilizzato per determinare l'aspetto del risultato.
Le seguenti espressioni possono essere utilizzate in una stringa di formato:
| d | il giorno come un numero senza uno zero iniziale (da 1 a 31) |
| dd | il giorno come un numero con uno zero iniziale (da 01 a 31) |
| ddd | il nome del giorno localizzato abbreviato (ad esempio, da "Lun" a "Dom") |
| dddd | il nome lungo del giorno localizzato (ad esempio, da "lunedì" a "domenica") |
| M | il mese come un numero senza uno zero iniziale (1-12) |
| MM | il mese come un numero con uno zero iniziale (01-12) |
| MMM | il nome abbreviato del mese localizzato abbreviato (ad esempio, da "gen" a "dic") |
| MMMM | il nome lungo del mese localizzato (ad esempio, da "gennaio" a "dicembre") |
| yy | l'anno come un numero a due cifre (00-99) |
| yyyy | l'anno come un numero a quattro cifre |
| h | l'ora senza uno zero iniziale (da 0 a 23 o da 1 a 12 se si utilizza la visualizzazione AM/PM) |
| hh | l'ora con uno zero iniziale (da 00 a 23 o 01 a 12 se si utilizza la visualizzazione AM/PM) |
| m | il minuto senza uno zero iniziale (da 0 a 59) |
| mm | il minuto con uno zero iniziale (da 00 a 59) |
| o | il secondo senza uno zero iniziale (da 0 a 59) |
| ss | il secondo con uno zero iniziale (da 00 a 59) |
| z | i millisecondi senza zeri iniziali (sempre 0, poiché la risoluzione del tempo specificato è di un solo secondo) |
| zzz | i millisecondi con zeri iniziali (sempre 000, poiché la risoluzione del tempo specificato è di un solo secondo) |
| AP | utilizza la visualizzazione AM/PM (AP verrà sostituito da "AM" o "PM") |
| ap | utilizza la visualizzazione am/pm (ap verrà sostituito da "am" o "pm") |
| U | visualizza l'ora specificata come UTC (deve essere il primo carattere; l'impostazione di default è l'ora locale |
Tutti gli altri caratteri verranno copiati "così come sono". Qualsiasi sequenza di caratteri racchiusa tra virgolette singole verrà considerata come testo e non utilizzata come un'espressione. Due virgolette singole consecutive ('') vengono sostituite da una virgoletta singola nell'output.
Esempio
int t = time();
printf("It is now %02d:%02d:%02d\n",
t2hour(t), t2minute(t), t2second(t));
printf("ISO time is %s\n", t2string(t, "Uyyyy-MM-dd hh:mm:ss"));Le funzioni oggetto vengono utilizzate per accedere a informazioni comuni sugli oggetti.
Sono disponibili le funzioni oggetto riportate di seguito:
clrgroup()
ingroup()
setgroup()
setvariant()
variant()clrgroup()
Funzione
Cancella i flag di gruppo di un oggetto.
Sintassi
void clrgroup(object);Vedere anche ingroup(), setgroup(), comando GROUP
La funzione clrgroup() cancella i flag di gruppo dell'oggetto specificato, in modo che non faccia più parte del gruppo definito in precedenza.
Quando vengono applicati ad un oggetto contenente altri oggetti, ad esempio UL_BOARD o UL_NET, i flag di gruppo di tutti gli oggetti contenuti vengono cancellati in modo ricorsivo, ma con limitazioni analoghe come per setgroup().
Esempio
board(B) {
B.elements(E)
clrgroup(E);
}ingroup()
Funzione
Verifica se un oggetto si trova nel gruppo.
Sintassi
int ingroup(object);Valori restituiti
La funzione ingroup restituisce un valore diverso da zero se l'oggetto specificato si trova nel gruppo.
Vedere anche clrgroup(), setgroup(), comando GROUP
Se un gruppo è stato definito nell'editor, la funzione ingroup() può essere utilizzata per verificare se un particolare oggetto fa parte del gruppo.
Oggetti con una singola coordinata che sono selezionabili individualmente nel disegno corrente (ad esempio UL_TEXT, UL_VIA, UL_CIRCLE e così via) restituiscono un valore diverso da zero in una chiamata a ingroup() se tale coordinata si trova all'interno del gruppo definito.
UL_WIRE restituisce 0, 1, 2 o 3, a seconda che nessuno, il primo, il secondo o entrambi i suoi punti finali si trovino nel gruppo.
UL_RECTANGLE e UL_FRAME restituiscono un valore diverso da zero se uno o più dei suoi spigoli si trovano nel gruppo. Nel valore, il bit 0 è impostato per l'angolo in alto a destra, il bit 1 per l'angolo in alto a sinistra, il bit 2 per l'angolo in basso a sinistra e il bit 3 per l'angolo in basso a destra.
Oggetti di gamma superiore senza coordinate (UL_NET, UL_SEGMENT, UL_SIGNAL, UL_POLYGON) o che non sono di fatto disponibili come oggetti di disegno (UL_SHEET, UL_DEVICESET, UL_SYMBOL, UL_FOOTPRINT), restituiscono un valore diverso da zero se uno o più oggetti al loro interno si trovano nel gruppo. Per informazioni dettagliate sulle gerarchie degli oggetti, vedere Tipi di oggetto.
Anche se UL_CONTACTREF e UL_PINREF non dispongono di coordinate proprie, restituiscono un valore diverso da zero se l'oggetto UL_CONTACT o UL_PIN di riferimento si trova all'interno del gruppo. Per altri oggetti non selezionabili, ad esempio UL_GRID, UL_VARIANT o fili di un oggetto UL_TEXT o UL_FRAME, il comportamento di ingroup() non è definito e pertanto non deve essere utilizzato.
Identificazione dell'oggetto menu contestuale
Se il programma ULP viene avviato da un menu contestuale, è possibile accedere all'oggetto selezionato mediante il meccanismo di gruppo. Un gruppo di elementi viene creato dall'oggetto selezionato. Questo consente di identificarlo con ingroup(). (vedere anche SET e RUN).
Esempio
output("group.txt") {
board(B) {
B.elements(E) {
if (ingroup(E))
printf("Element %s is in the group\n", E.name);
}
}
}setgroup()
Funzione
Imposta i flag di gruppo di un oggetto.
Sintassi
void setgroup(object[, int flags]);Vedere anche clrgroup(), ingroup(), comando GROUP
La funzione setgroup() imposta i flag di gruppo dell'oggetto specificato, in modo che diventi parte del gruppo.
Se non vengono specificati flag, l'oggetto viene aggiunto all'intero gruppo (ovvero, tutti i suoi punti di selezione, se ne contiene più di uno).
Se i valori dei flag sono diversi da zero, vengono impostati solo i flag di gruppo dei punti specificati dell'oggetto. Per un oggetto UL_WIRE ciò significa che '1' imposta il flag di gruppo del primo punto, '2' quello del secondo punto, e '3' imposta entrambi. Gli eventuali flag di gruppo impostati in precedenza non vengono modificati da una chiamata a setgroup().
Quando vengono applicati ad un oggetto contenente altri oggetti, ad esempio UL_BOARD o UL_NET, i flag di gruppo di tutti gli oggetti contenuti vengono impostati in modo ricorsivo con le seguenti limitazioni:
Questo non si verifica per UL_LIBRARY e UL_SCHEMATIC. Gli oggetti subordinati che non sono selezionabili o non sono selezionabili individualmente non vengono contrassegnati (ad esempio, oggetti UL_GRID o UL_VARIANT o fili di oggetti UL_TEXT o UL_FRAME).
Per informazioni dettagliate sulle gerarchie degli oggetti, vedere Tipi di oggetto.
Esempio
board(B) {
B.elements(E)
setgroup(E);
}setvariant()
Funzione
Imposta la variante di assieme corrente.
Sintassi
int setvariant(string name);Vedere anche variant(), UL_VARIANTDEF, comando VARIANT
La funzione setvariant() imposta la variante di assieme corrente su quella specificata in base al nome. Questa operazione può essere utilizzata per scorrere tutte le parti e "vedere" i dati esattamente come definiti nella variante specificata.
name deve fare riferimento ad una variante di assieme valida contenuta nel disegno corrente.
Questa funzione restituisce un valore diverso da zero se esiste la variante dell'assieme specificata; in caso contrario restituisce zero.
La variante dell'assieme impostata da una chiamata a setvariant() è attiva solo finché non ULP non termina. In seguito, la variante nel disegno sarà identica a quella prima dell'avvio di ULP.
L'impostazione della variante dell'assieme in una scheda è possibile solo se viene caricato lo schema coerente.
Esempio
if (setvariant("My variant")) {
// do something ...
else
// error: unknown variantvariant()
Funzione
Eseguire una query sulla variante di assieme corrente.
Sintassi
string variant(void);Vedere anche setvariant(), UL_VARIANTDEF, comando VARIANT
La funzione variant() restituisce il nome della variante di assieme corrente. Se non è attualmente selezionata alcuna variante, viene restituita la stringa vuota ('').
Esempio
string CurrentVariant = variant();Le funzioni XML vengono utilizzate per elaborare dati XML (Extensible Markup Language). Sono disponibili le funzioni XML riportate di seguito:
xmlattribute()
xmlattributes()
xmlelement()
xmlelements()
xmltags()
xmltext()xmlattribute(), xmlattributes()
Funzione
Estrare gli attributi di un tag XML.
Sintassi
string xmlattribute(string xml, string tag, string attribute);
int xmlattributes(string &array[], string xml, string tag);Vedere anche xmlelement(), xmltags(), xmltext()
La funzione xmlattribute restituisce il valore dell'attributo specificato dal tag specificato all'interno del codice xml specificato. Se un attributo viene visualizzato più volte nello stesso tag, viene recuperato il valore dell'ultima occorrenza.
La funzione xmlattributes memorizza i nomi di tutti gli attributi del tag specificato all'interno del codice xml specificato nella serie e restituisce il numero di attributi trovati. L'ordine non è necessariamente identico a quello del codice XML specificato. Se un attributo viene visualizzato più volte nello stesso tag, il suo nome viene visualizzato una sola volta nella serie.
Il tag viene specificato sotto forma di un percorso.
Se il codice XML specificato contiene un errore, il risultato di una funzione XML è vuoto e viene visualizzata una finestra di dialogo di avviso, contenente informazioni sulla posizione in cui si è verificato l'errore nel codice ULP e XML. Notare che il numero di riga e di colonna all'interno del codice XML fa riferimento alla stringa effettiva specificata per questa funzione come il parametro xml.
Esempio
// String XML contains the following data:
//<root>
// <body abc="def" xyz="123">
// ...
// </body>
//</root>
string s[];
int n = xmlattributes(s, XML, "root/body");
// Result: { "abc", "xyz" }
string s = xmlattribute(XML, "root/body", "xyz");
// Result: "123"xmlelement(), xmlelements()
Funzione
Estrare elementi da un codice XML.
Sintassi
string xmlelement(string xml, string tag);
int xmlelements(string &array[], string xml, string tag);Vedere anche xmltags(), xmlattribute(), xmltext()
La funzione xmlelement restituisce l'elemento XML completo del tag specificato all'interno del codice xml specificato. Il risultato contiene ancora il tag XML esterno dell'elemento e può quindi essere utilizzato per l'ulteriore elaborazione con le altre funzioni XML. Tutti gli spazi all'interno delle parti di testo normale dell'elemento vengono mantenuti. La formattazione complessiva dei tag XML all'interno dell'elemento e l'ordine degli attributi dell'elemento potrebbero, tuttavia, essere diversi rispetto al codice XML originale. Se all'interno del file xml sono presenti più occorrenze di tag, verrà restituita la prima. Utilizzare xmlelements per recuperare tutte le occorrenze.
La funzione xmlelements funziona allo stesso modo di xmlelement, ma restituisce tutte le occorrenze degli elementi con il tag specificato. Il valore restituito è il numero di elementi memorizzati nella serie.
Il tag viene specificato sotto forma di un percorso.
Se il codice XML specificato contiene un errore, il risultato di una funzione XML è vuoto e viene visualizzata una finestra di dialogo di avviso, contenente informazioni sulla posizione in cui si è verificato l'errore nel codice ULP e XML. Notare che il numero di riga e di colonna all'interno del codice XML fa riferimento alla stringa effettiva specificata per questa funzione come il parametro xml.
Esempio
// String XML contains the following data:
//<root>
// <body>
// <contents>
// <string>Some text 1</string>
// <any>anything 1</any>
// </contents>
// <contents>
// <string>Some text 2</string>
// <any>anything 2</any>
// </contents>
// <appendix>
// <string>Some text 3</string>
// </appendix>
// </body>
//</root>
//
string s = xmlelement(XML, "root/body/appendix");
// Result: " <appendix>\n <string>Some text 3</string>\n </appendix>\n"
string s[];
int n = xmlelements(s, XML, "root/body/contents");
// Result: { " <contents>\n <string>Some text 1</string>\n <any>anything 1</any>\n </contents>\n",
// " <contents>\n <string>Some text 2</string>\n <any>anything 2</any>\n </contents>\n"
// }xmltags()
Funzione
Estrae l'elenco dei nomi di tag all'interno di un codice XML.
Sintassi
int xmltags(string &array[], string xml, string tag);Vedere anche xmlelement(), xmlattribute(), xmltext()
La funzione xmltags restituisce i nomi di tutte le etichette del livello superiore di una determinata etichetta all'interno del codice xml specificato. Il valore restituito corrisponde al numero di nomi etichetta memorizzati nella serie.
Ogni nome etichetta viene restituito una sola volta, anche se viene visualizzato più volte nel codice XML.
Il tag viene specificato sotto forma di un percorso.
Se il codice XML specificato contiene un errore, il risultato di una funzione XML è vuoto e viene visualizzata una finestra di dialogo di avviso, contenente informazioni sulla posizione in cui si è verificato l'errore nel codice ULP e XML. Notare che il numero di riga e di colonna all'interno del codice XML fa riferimento alla stringa effettiva specificata per questa funzione come il parametro xml.
Esempio
//String XML contains the following data:
//<root>
// <body>
// <contents>
// <string>Some text 1</string>
// <any>anything 1</any>
// </contents>
// <contents>
// <string>Some text 2</string>
// <any>anything 2</any>
// </contents>
// <appendix>
// <string>Some text 3</string>
// </appendix>
// </body>
//</root>
//
string s[];
int n = xmltags(s, XML, "root/body");
// Result: { "contents", "appendix" }
int n = xmltags(s, XML, "");
// Result: "root"xmltext()
Funzione
Estrae i dati di testo di un elemento XML.
Sintassi
string xmltext(string xml, string tag);Vedere anche xmlelement(), xmlattribute(), xmltags()
La funzione xmltext restituisce i dati testuali dall'etichetta specificata all'interno del codice xml specificato.
Tutte le etichette all'interno del testo vengono rimosse, mentre gli spazi (inclusi i caratteri nuova riga) vengono mantenuti.
Il tag viene specificato sotto forma di un percorso.
Se il codice XML specificato contiene un errore, il risultato di una funzione XML è vuoto e viene visualizzata una finestra di dialogo di avviso, contenente informazioni sulla posizione in cui si è verificato l'errore nel codice ULP e XML. Notare che il numero di riga e di colonna all'interno del codice XML fa riferimento alla stringa effettiva specificata per questa funzione come il parametro xml.
Esempio
// String XML contains the following data:
//<root>
// <body>
// Some <b>text</b>.
// </body>
//</root>
//
string s = xmltext(XML, "root/body");
// Result: "\n Some text.\n "Le istruzioni integrate vengono generalmente utilizzate per aprire un contesto specifico in cui è possibile accedere alle strutture o ai file di dati. La sintassi generale di un'istruzione integrata è
name(parameters) statementdove name il nome dell'istruzione integrata, parameters indica uno o più parametri e statement è il codice che verrà eseguito nel contesto aperto dall'istruzione integrata.
Notare che l'istruzione può essere un'istruzione composta, come in
board(B) {
B.elements(E) printf("Element: %s\n", E.name);
B.Signals(S) printf("Signal: %s\n", S.name);
}Sono disponibili le seguenti istruzioni integrate:
Funzione
Apre un contesto della scheda.
Sintassi
board(identifier) statementVedere anche schematic, library
L'istruzione board apre un contesto della scheda se la finestra dell'editor corrente contiene un disegno della scheda. Viene creata una variabile di tipo UL_BOARD cui viene assegnato il nome indicato dall'identificatore.
Dopo aver aperto il contesto della scheda e creata una variabile della scheda, viene eseguita l'istruzione. Nell'ambito dell'istruzione, è possibile accedere alla variabile della scheda per recuperare ulteriori dati dalla scheda.
Se la finestra dell'editor corrente non contiene un disegno della scheda, viene restituito un messaggio di errore e il programma ULP viene terminato.
Verificare se esiste una scheda
Se si utilizza l'istruzione board senza un argomento, è possibile verificare se la finestra dell'editor corrente contiene un disegno della scheda. In tal caso, il comportamento della scheda è simile a quello di una costante intera, restituendo 1 se esiste un disegno della scheda nella finestra dell'editor corrente e 0 in caso contrario.
Accesso alla scheda da uno schema
Se la finestra dell'editor corrente contiene un disegno dello schema, è comunque possibile accedere alla scheda dello schema aggiungendo all'istruzione della scheda il prefisso project, come in
project.board(B) { ... }Questo consente di aprire un contesto della scheda a prescindere dal fatto che la finestra dell'editor corrente contenga una scheda o un disegno dello schema. Tuttavia, sul desktop deve essere presente una finestra dell'editor contenente tale scheda.
Esempio
if (board)
board(B) {
B.elements(E)
printf("Element: %s\n", E.name);
}Funzione
Apre il contesto di un set di dispositivi.
Sintassi
deviceset(identifier) statementVedere anche footprint, symbol, library
L'istruzione deviceset apre il contesto di un set di dispositivi se la finestra dell'editor corrente contiene un disegno del dispositivo. Viene creata una variabile di tipo UL_DEVICESET, a cui viene assegnato il nome indicato dall'identificatore.
Dopo aver aperto il contesto di un set di dispositivi e creata una variabile del set di dispositivi, l'istruzione viene eseguita. All'interno dell'ambito dell'istruzione, è possibile accedere alla variabile del set di dispositivi per recuperare ulteriori dati dal set di dispositivi.
Se la finestra dell'editor corrente non contiene un disegno del dispositivo, viene restituito un messaggio di errore e il programma ULP viene terminato.
Verificare se è presente un set di dispositivi
Utilizzando l'istruzione deviceset senza un argomento è possibile verificare se la finestra dell'editor corrente contiene un disegno del dispositivo. In tal caso, deviceset si comporta come una costante intera, restituendo 1 se è presente un disegno di dispositivo nella finestra dell'editor corrente e 0 in caso contrario.
Esempio
if (deviceset)
deviceset(D) {
D.gates(G)
printf("Gate: %s\n", G.name);
}Funzione
Apre un contesto della libreria.
Sintassi
library(identifier) statementVedere anche board, schematic, deviceset, footprint, symbol
L'istruzione library apre un contesto della libreria se la finestra dell'editor corrente contiene un disegno della libreria. Viene creata una variabile di tipo UL_LIBRARY a cui viene assegnato il nome indicato dall'identificatore.
Dopo aver aperto il contesto della libreria e creata una variabile di libreria, viene eseguita l'istruzione. Nell'ambito dell'istruzione, è possibile accedere alla variabile della libreria per recuperare ulteriori dati dalla scheda.
Se la finestra dell'editor corrente non contiene un disegno della libreria, viene restituito un messaggio di errore e il programma ULP viene terminato.
Verificare se esiste una libreria
Utilizzando l'istruzione della libreria senza un argomento, è possibile verificare se la finestra dell'editor corrente contiene un disegno della libreria. In tal caso, la libreria si comporta come una costante intera, restituendo 1 se è presente un disegno di libreria nella finestra dell'editor corrente e 0 in caso contrario.
Esempio
if (library)
library(L) {
L.devices(D)
printf("Device: %s\n", D.name);
}Funzione
Apre il contesto di un modulo.
Sintassi
module(identifier) statementVedere anche board, library, schematic, sheet
L'istruzione module apre un contesto del modulo se la finestra# #dell'editor corrente contiene un disegno di modulo. L'istruzione modulo apre un contesto del modulo se nella finestra dell'editor viene modificato un disegno del modulo. Viene creata una variabile di tipo UL_MODULE a cui viene assegnato il nome indicato dall'identificatore.
Dopo aver aperto il contesto del modulo e creata una variabile del modulo, viene eseguita l'istruzione. Nell'ambito dell'istruzione, è possibile accedere alla variabile del modulo per recuperare ulteriori dati dal modulo.
Se la finestra dell'editor corrente non contiene un disegno del modulo, viene restituito un messaggio di errore e il programma ULP viene terminato.# Se nessun disegno del modulo viene attualmente modificato nella finestra dell'editor, viene restituito un messaggio di errore e il programma ULP viene terminato.
Verificare se esiste un modulo
Utilizzando l'istruzione module senza un argomento, è possibile verificare se la finestra dell'editor corrente contiene un disegno del modulo. In tal caso, il modulo si comporta in modo simile a una costante intera, restituendo 1 se esiste un disegno del modulo nella finestra dell'editor corrente e 0 in caso contrario.
Esempio
if (module)
module(M) {
printf("Module: %s\n", M.name);
}Funzione
Apre un file di output per le chiamate printf() successive.
Sintassi
output(string filename[, string mode]) statementVedere anche printf, fileerror
L'istruzione output apre un file con il nome file e la modalità specificati per l'output tramite successive chiamate printf(). Se il file è stato aperto correttamente, l'istruzione viene eseguita. Al termine, il file viene chiuso.
Se non è possibile aprire il file, viene restituito un messaggio di errore e l'esecuzione del programma ULP viene terminata.
Per default, il file di output viene scritto nella directory del progetto.
Modalità file
Il parametro mode definisce la modalità di apertura del file di output. Se non viene specificato alcun parametro modalità, il valore di default è "wt".
a append to an existing file, or create a new file if it does not exist
w create a new file (overwriting an existing file)
t open file in text mode
b open file in binary mode
D delete this file when ending the EAGLE session (only works together with w)
F force using this file name (normally *.brd, *.sch and *.lbr are rejected)I caratteri della modalità possono essere visualizzati in qualsiasi ordine e combinazione. Tuttavia, solo l'ultimo di a e w o t e b, rispettivamente, è significativo. Ad esempio, una modalità di "abtw" potrebbe aprire un file per la scrittura testuale, che sarebbe identico a "wt".
Istruzioni di output nidificate
Le istruzioni di output possono essere nidificate, purché il numero di handle di file disponibili sia sufficiente e due istruzioni di output attive non accedano contemporaneamente allo stesso file.
Esempio
void PrintText(string s)
{
printf("This also goes into the file: %s\n", s);
}
output("file.txt", "wt") {
printf("Directly printed\n");
PrintText("via function call");
}Funzione
Apre il contesto di un layout componente.
Sintassi
footprint(identifier) statement (new as of EAGLE 9.1)Vedere anche library, deviceset, symbol
L'istruzione footprint apre un contesto di pacchetto se la finestra dell'editor corrente contiene un disegno di pacchetto. Viene creata una variabile di tipo UL_FOOTPRINT a cui viene assegnato il nome indicato dall'identificatore.
Dopo aver aperto il contesto del layout componente e creata una variabile del layout componente, viene eseguita l'istruzione. Nell'ambito dell'istruzione, è possibile accedere alla variabile layout componente per recuperare ulteriori dati dal layout componente.
Se la finestra dell'editor corrente non contiene un disegno del layout componente, viene restituito un messaggio di errore e il programma ULP viene terminato.
Verificare se esiste un layout componente
Utilizzando l'istruzione footprint senza un argomento, è possibile verificare se la finestra dell'editor corrente contiene un disegno del layout componente. In tal caso, il layout componente si comporta in modo simile a una costante intera, restituendo 1 se esiste un disegno del layout componente dell'editor corrente e 0 in caso contrario.
Esempio
if (footprint)
footprint(F) {
F.contacts(C)
printf("Contact: %s\n", C.name);
}Funzione
Apre un contesto dello schema.
Sintassi
schematic(identifier) statementVedere anche board, library, module, sheet
L'istruzione schematic apre un contesto dello schema se la finestra dell'editor corrente contiene un disegno dello schema. Viene creata una variabile di tipo UL_SCHEMATIC a cui viene assegnato il nome indicato dall'identificatore.
Dopo aver aperto il contesto dello schema e creata una variabile dello schema, viene eseguita l'istruzione. Nell'ambito dell'istruzione, è possibile accedere alla variabile dello schema per recuperare ulteriori dati dallo schema.
Se la finestra dell'editor corrente non contiene un disegno dello schema, viene restituito un messaggio di errore e il programma ULP viene terminato.
Verificare se esiste uno schema
Utilizzando l'istruzione schematic senza un argomento, è possibile verificare se la finestra dell'editor corrente contiene un disegno dello schema. In tal caso, lo schema si comporta in modo simile a una costante intera, restituendo 1 se esiste un disegno dello schema nella finestra dell'editor corrente e 0 in caso contrario.
Accesso allo schema da una scheda
Se la finestra dell'editor corrente contiene un disegno della scheda, è comunque possibile accedere allo schema della scheda aggiungendo all'istruzione schematic il prefisso project, come in
project.schematic(S) { ... }Questo consente di aprire un contesto dello schema a prescindere dal fatto che la finestra dell'editor corrente contenga uno schema o un disegno dello schema. Tuttavia, sul desktop deve essere presente una finestra dell'editor contenente tale schema.
Accesso al foglio corrente
Utilizzare l'istruzione sheet per accedere direttamente al foglio attualmente caricato.
Accesso al modulo corrente
Utilizzare l'istruzione module per accedere direttamente al modulo attualmente modificato.
Esempio
if (schematic)
schematic(S) {
S.parts(P)
printf("Part: %s\n", P.name);
}Funzione
Apre un contesto del foglio.
Sintassi
sheet(identifier) statementVedere anche schematic
L'istruzione sheet apre un contesto del foglio se la finestra dell'editor corrente contiene un disegno del foglio. Viene creata una variabile di tipo UL_SHEET a cui viene assegnato il nome indicato dall'identificatore.
Dopo aver aperto il contesto del foglio e creata una variabile del foglio, viene eseguita l'istruzione. Nell'ambito dell'istruzione, è possibile accedere alla variabile del foglio per recuperare ulteriori dati dal foglio.
Se la finestra dell'editor corrente non contiene un disegno del foglio, viene restituito un messaggio di errore e il programma ULP viene terminato.
Verificare se esiste un foglio
Utilizzando l'istruzione sheet senza un argomento, è possibile verificare se la finestra dell'editor corrente contiene un disegno dello schema. In tal caso, il foglio si comporta in modo simile a una costante intera, restituendo 1 se esiste un disegno del foglio nella finestra dell'editor corrente e 0 in caso contrario.
Esempio
if (sheet)
sheet(S) {
S.instances(I)
printf("Instance: %s\n", I.name);
}Funzione
Apre un contesto del simbolo.
Sintassi
symbol(identifier) statementVedere anche library, deviceset, footprint
L'istruzione symbol apre un contesto del simbolo se la finestra dell'editor corrente contiene un disegno del simbolo. Viene creata una variabile di tipo UL_SYMBOL a cui viene assegnato il nome indicato dall'identificatore.
Dopo aver aperto il contesto del simbolo e creata una variabile del simbolo, viene eseguita l'istruzione. Nell'ambito dell'istruzione, è possibile accedere alla variabile del simbolo per recuperare ulteriori dati dal simbolo.
Se la finestra dell'editor corrente non contiene un disegno del simbolo, viene restituito un messaggio di errore e il programma ULP viene terminato.
Verificare se esiste un simbolo
Utilizzando l'istruzione symbol senza un argomento, è possibile verificare se la finestra dell'editor corrente contiene un disegno del simbolo. In tal caso, il simbolo si comporta in modo simile a una costante intera, restituendo 1 se esiste un disegno del simbolo nella finestra dell'editor corrente e 0 in caso contrario.
Esempio
if (symbol)
symbol(S) {
S.pins(P)
printf("Pin: %s\n", P.name);
}