Elementi integrati

Gli elementi integrati sono costanti, variabili, funzioni e istruzioni che forniscono informazioni aggiuntive e che consentono la manipolazione dei dati.

Costanti integrate

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[]    Projects

Quando 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[]  

Variabili integrate

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)

Funzioni integrate

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()

Funzioni carattere

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

Funzioni di gestione dei file

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.

Nota:

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");

Funzioni matematiche

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...)

Nota:

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));

Funzioni varie

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.MyParam

Poiché 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.XrefLabelFormat

Notare 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.MyParam

Esempio

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.50

Esempio

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));
    }
  }

Funzioni di rete

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/README

Se 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());

Funzioni di stampa

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] type

Ogni 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, type

Caratteri 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);

Funzioni stringa

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");

Funzioni URN

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);

Funzioni temporali

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 time

Vedere 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"));

Funzioni oggetto

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 variant

variant()

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();

Funzioni XML

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  "

Istruzioni integrate

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) statement

dove 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:

board()

Funzione

Apre un contesto della scheda.

Sintassi

board(identifier) statement

Vedere 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);
     }

deviceset()

Funzione

Apre il contesto di un set di dispositivi.

Sintassi

deviceset(identifier) statement

Vedere 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);
     }

library()

Funzione

Apre un contesto della libreria.

Sintassi

library(identifier) statement

Vedere 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);
     }

module()

Funzione

Apre il contesto di un modulo.

Sintassi

module(identifier) statement

Vedere 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);
     }

output()

Funzione

Apre un file di output per le chiamate printf() successive.

Sintassi

output(string filename[, string mode]) statement

Vedere 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");
  }

footprint(), novità a partire da EAGLE 9.1

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.

Nota: L'istruzione footprint è una novità di EAGLE 9.1. Per garantire la compatibilità con le versioni precedenti di EAGLE, package è disponibile come un alias.

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);
     }

schematic()

Funzione

Apre un contesto dello schema.

Sintassi

schematic(identifier) statement

Vedere 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);
     }

sheet()

Funzione

Apre un contesto del foglio.

Sintassi

sheet(identifier) statement

Vedere 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);
     }

symbol()

Funzione

Apre un contesto del simbolo.

Sintassi

symbol(identifier) statement

Vedere 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);
     }