Les éléments intégrés sont des constantes, des variables, des fonctions et des instructions qui fournissent des informations supplémentaires et permettent de manipuler les données.
Les constantes intégrées servent à fournir des informations sur les paramètres des objets (indicateurs ou longueur maximale recommandée pour le nom, par exemple). La plupart des types d’objets sont dotés d’une section Constantes spécifique qui répertorie les constantes de construction de l’objet (voir UL_PIN, par exemple).
Les constantes intégrées suivantes sont définies en plus des constantes répertoriées pour les différents types d’objets :
| EAGLE_VERSION | Numéro de version de build du programme EAGLE (nombre entier) |
| EAGLE_RELEASE | Numéro de version de publication du programme EAGLE (nombre entier) |
| EAGLE_SIGNATURE | Chaîne contenant le nom, la version de build et les informations de copyright du programme EAGLE |
| EAGLE_PATH | chaîne contenant le chemin d’accès complet de l’exécutable EAGLE |
| EAGLE_DIR | chaîne contenant le répertoire d’installation d’EAGLE ($EAGLEDIR) |
| EAGLE_HOME | chaîne contenant le répertoire de l’utilisateur au démarrage d’EAGLE ($HOME) |
| eagle_epf | chaîne contenant le chemin d’accès complet du fichier eagle.epf en cours d’utilisation |
| OS_SIGNATURE | chaîne contenant une signature du système d’exploitation (Mac..., Windows... ou Linux, par exemple) |
| REAL_EPSILON | nombre réel positif minimal tel que 1.0 + REAL_EPSILON != 1.0 |
| REAL_MAX | la plus grande valeur réelle possible |
| REAL_MIN | valeur réelle la plus petite possible (positive !) (le plus petit nombre qui peut être représenté est -REAL_MAX) |
| INT_MAX | la plus grande valeur entière possible |
| INT_MIN | la plus petite valeur entière possible |
| PI | valeur du nombre « pi » (3,14..., réel) |
| usage | chaîne contenant le texte de la directive #usage |
Ces constantes intégrées contiennent les chemins de répertoire définis dans la boîte de dialogue des répertoires, avec les variables spéciales ($HOME et $EAGLEDIR) remplacées par leurs valeurs réelles. Comme chaque chemin peut comprendre plusieurs répertoires, ces constantes sont des tableaux de chaînes dont chaque membre contient un répertoire. Le premier membre vide marque la fin du chemin :
path_lbr[] Libraries
path_dru[] Design Rules
path_ulp[] User Language Programs
path_scr[] Scripts
path_cam[] CAM Jobs
path_epf[] ProjectsLorsque vous utilisez ces constantes pour construire un nom de fichier complet, vous devez utiliser un séparateur de répertoire, comme dans l’exemple suivant :
string s = path_lbr[0] + '/' + "mylib.lbr";Bibliothèques en cours d’utilisation via la commande UTILISER :
used_libraries[] Les variables intégrées servent à fournir des informations au moment de l’exécution.
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)Les fonctions intégrées servent à effectuer des tâches spécifiques (imprimer des chaînes formatées ou trier des tableaux de données, par exemple).
Vous pouvez également écrire vos propres fonctions et les utiliser pour structurer votre programme de langage utilisateur.
Les fonctions intégrées sont classées en plusieurs catégories :
Référence alphabétique de toutes les fonctions intégrées :
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()Les fonctions de caractère servent à manipuler les caractères individuellement.
Les fonctions de caractère suivantes sont disponibles :
isalnum()
isalpha()
iscntrl()
isdigit()
isgraph()
islower()
isprint()
ispunct()
isspace()
isupper()
isxdigit()
tolower()
toupper()is...()
Fonction
Vérifie si un caractère appartient à une catégorie donnée.
Syntaxe
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);Résultat
Les fonctions is... renvoient une valeur non nulle si le caractère vérifié appartient à la catégorie spécifiée, zéro dans le cas contraire.
Catégories de caractères
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)Exemple
char c = 'A';
if (isxdigit(c))
printf("%c is hex\n", c);
else
printf("%c is not hex\n", c);to...()
Fonction
Convertit un caractère en majuscules ou en minuscules.
Syntaxe
char tolower(char c);
char toupper(char c);Résultat
La fonction tolower renvoie le caractère converti si « c » est en majuscule. Tous les autres caractères restent inchangés. La fonction toupper renvoie le caractère converti si « c » est en minuscule. Tous les autres caractères restent inchangés.
Voir aussi strupr, strlwr
Les fonctions de gestion des noms de fichiers servent à manipuler les noms de fichiers, les tailles et les horodatages.
Pour en savoir plus sur l’écriture dans un fichier, voir output().
fileerror()
Fonction
Renvoie l’état des opérations d’E/S.
Syntaxe
int fileerror();Résultat
La fonction fileerror renvoie la valeur 0 si tout est correct.
Voir aussi output, printf, fileread
fileerror vérifie l’état de toutes les opérations d’E/S effectuées depuis le dernier appel à cette fonction et renvoie 0 si tout était correct. Si l’une des opérations d’E/S a provoqué une erreur, la fonction renvoie une valeur non nulle.
Appelez fileerror avant toute opération d’E/S pour réinitialiser tout état d’erreur précédent, ainsi qu’après toute opération d’E/S pour vérifier qu’elle s’est déroulée correctement.
Lorsque fileerror renvoie une valeur non nulle (ce qui indique une erreur), le message d’erreur pertinent a déjà été envoyé à l’utilisateur.
Exemple
fileerror();
output("file.txt", "wt") {
printf("Test\n");
}
if (fileerror())
exit(1);fileglob()
Fonction
Effectue une recherche dans un répertoire.
Syntaxe
int fileglob(string &array[], string pattern);Résultat
La fonction fileglob renvoie le nombre d’entrées copiées dans le tableau.
Voir aussi dlgFileOpen(), dlgFileSave()
fileglob utilise l’argument pattern pour effectuer une recherche dans un répertoire.
pattern peut contenir les caractères « * » et « ? » en tant que caractères génériques. Si pattern se termine par le caractère « / », le contenu du répertoire spécifié est renvoyé.
Dans le tableau obtenu, les noms qui se terminent par un caractère « / » sont des noms de répertoire.
Le tableau est trié par ordre alphabétique, les répertoires s’affichant en premier.
Les entrées spéciales « . » et « .. » (répertoire parent et répertoire actuel) ne sont jamais renvoyés dans le tableau.
Si aucune correspondance n’est trouvée pour pattern ou si vous n’êtes pas autorisé à effectuer une recherche dans le répertoire spécifié, vous obtenez un tableau vide.
Remarque pour les utilisateurs de Windows : le séparateur de répertoire utilisé dans le tableau est toujours la barre oblique. Cela permet de garantir le bon fonctionnement des programmes de langage utilisateur, indépendamment de la plate-forme. Dans la chaîne pattern, en revanche, la barre oblique inverse (« \ ») est également considérée comme un séparateur de répertoire.
Sous Windows, le tri des noms de fichiers n’est pas sensible à la casse.
Exemple
string a[];
int n = fileglob(a, "*.brd");Fonctions de nom de fichier
Fonction
Scinde un nom de fichier selon les différentes parties qui le composent.
Syntaxe
string filedir(string file);
string fileext(string file);
string filename(string file);
string filesetext(string file, string newext);Résultat
filedir renvoie le répertoire du fichier (y compris la lettre du lecteur sous Windows).
fileext renvoie l’extension du fichier.
filename renvoie le nom du fichier (y compris l’extension).
filesetext renvoie le fichier avec l’extension définie sur newext.
Voir aussi les fonctions de données de fichier
Exemple
if (board) board(B) {
output(filesetext(B.name, ".out")) {
...
}
}Fonctions de données de fichier
Fonction
Obtient l’horodatage et la taille d’un fichier.
Syntaxe
int filesize(string filename);
int filetime(string filename);Résultat
filesize renvoie la taille (en octets) du fichier spécifié.
filetime renvoie l’horodatage du fichier spécifié en secondes. Le format est compatible avec les fonctions temporelles.
Voir aussi time et les fonctions de nom de fichier
Exemple
board(B)
printf("Board: %s\nSize: %d\nTime: %s\n",
B.name, filesize(B.name),
t2string(filetime(B.name)));Fonctions d’entrée de fichier
Les fonctions d’entrée de fichier servent à lire des données dans des fichiers. La fonction d’entrée de fichier suivante est disponible :
Voir output() pour en savoir plus sur l’écriture dans un fichier.
fileread()
Fonction
Lit les données à partir d’un fichier.
Syntaxe
int fileread(dest, string file);Résultat
fileread renvoie le nombre d’objets lus dans le fichier.
La signification réelle de la valeur renvoyée dépend du type de dest.
Voir aussi lookup, strsplit, fileerror
Si dest est un tableau de caractères, le fichier est lu comme des données binaires brutes et la valeur renvoyée correspond au nombre d’octets lus dans le tableau de caractères (ce qui correspond à la taille du fichier).
Si dest est un tableau de chaînes, le fichier est lu en tant que fichier texte (une ligne par membre du tableau) et la valeur renvoyée correspond au nombre de lignes lues dans le tableau de chaînes. Les caractères de retour à la ligne sont éliminés.
Si dest est une chaîne, le fichier entier est lu dans cette chaîne et la valeur renvoyée correspond à la longueur de la chaîne (qui n’est pas toujours identique à la taille du fichier, car le système d’exploitation peut utiliser « cr/lf » au lieu du caractère de nouvelle ligne pour stocker les fichiers texte).
Exemple
char b[];
int nBytes = fileread(b, "data.bin");
string lines[];
int nLines = fileread(lines, "data.txt");
string text;
int nChars = fileread(text, "data.txt");Les fonctions mathématiques servent à effectuer des opérations mathématiques. Les fonctions mathématiques suivantes sont disponibles :
abs()
acos()
asin()
atan()
ceil()
cos()
exp()
floor()
frac()
log()
log10()
max()
min()
pow()
round()
sin()
sqrt()
trunc()
tan()Messages d’erreur
Si les arguments d’un appel de fonction mathématique génèrent une erreur, le message d’erreur affiche les valeurs réelles des arguments. Ainsi, les instructions :
real x = -1.0;
real r = sqrt(2 * x);génèrent le message d’erreur suivant :
Invalid argument in call to 'sqrt(-2)'Fonctions absolues, maximales et minimales.
Fonction
Fonctions absolues, maximales et minimales.
Syntaxe
type abs(type x);
type max(type x, type y);
type min(type x, type y);Résultat
abs renvoie la valeur absolue de x.
max renvoie la valeur maximale de x et y.
min renvoie la valeur minimale de x et y.
Le type de retour de ces fonctions est identique au type (le plus grand) des arguments. type doit être char, int ou real.
Exemple
real x = 2.567, y = 3.14;
printf("The maximum is %f\n", max(x, y));Fonctions d’arrondi
Fonction
Fonctions d’arrondi.
Syntaxe
real ceil(real x);
real floor(real x);
real frac(real x);
real round(real x);
real trunc(real x);Résultat
ceil renvoie le plus petit entier non inférieur à x.
floor renvoie le plus grand entier non supérieur à x.
frac renvoie la partie décimale de x.
round renvoie x arrondi à l’entier le plus proche.
trunc renvoie la partie entière de x.
Exemple
real x = 2.567;
printf("The rounded value of %f is %f\n", x, round(x));Fonctions trigonométriques
Fonction
Fonctions trigonométriques.
Syntaxe
real acos(real x);
real asin(real x);
real atan(real x);
real cos(real x);
real sin(real x);
real tan(real x);Résultat
acos renvoie l’arc cosinus de x.
asin renvoie l’arc sinus de x.
atan renvoie l’arc tangente de x.
cos renvoie le cosinus de x.
sin renvoie le sinus de x.
tan renvoie le sinus de x.
Constantes
PI : valeur de « pi » (3,14...)
les angles sont indiqués en radians.
Exemple
real x = PI / 2;
printf("The sine of %f is %f\n", x, sin(x));Fonctions exponentielles
Fonction
Fonctions exponentielles.
Syntaxe
real exp(real x);
real log(real x);
real log10(real x);
real pow(real x, real y);
real sqrt(real x);Résultat
exp renvoie l’exponentiel e à la puissance x. log renvoie le logarithme népérien de x. log10renvoie le logarithme décimal de x. *powrenvoie la valeur de x à la puissance y. *sqrt renvoie la racine carrée de x.
Exemple
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));Les fonctions diverses sont utilisées pour effectuer différentes tâches.
Les fonctions diverses suivantes sont disponibles :
Paramètres de configuration
Fonction
Stocke et récupère les paramètres de configuration.
Syntaxe
string cfgget(string name[, string default]);
void cfgset(string name, string value);Résultat
cfgget renvoie la valeur du paramètre stocké sous le nom spécifié. Si aucun paramètre de ce type n’a encore été stocké, la fonction renvoie la valeur du paramètre par défaut facultatif (ou une chaîne vide, si aucun paramètre par défaut n’est spécifié). La fonction cfgget permet de récupérer les valeurs qui ont été précédemment stockées avec un appel à cfgset().
La fonction cfgset définit le paramètre correspondant au nom spécifié sur la valeur spécifiée.
Les caractères valides pour le nom sont A-Z, a-z, 0-9, « . »
Les noms de paramètres sont sensibles à la casse.
Les paramètres sont stockés dans le fichier eaglerc de l’utilisateur. Pour éviter que différents programmes de langage utilisateur utilisant les mêmes noms de paramètres ne remplacent les paramètres les uns des autres, il est recommandé d’apposer le nom de l’ULP au début du nom du paramètre. Par exemple, pour un ULP appelé mytool.ulp utilisant un paramètre appelé MyParam, stockez le paramètre sous le nom :
mytool.MyParamComme les paramètres de configuration sont stockés dans le fichier eaglerc, qui contient aussi tous les autres paramètres spécifiques à EAGLE, il est également possible d’accéder aux paramètres EAGLE avec cfgget() et cfgset(). Pour éviter tout conflit entre les paramètres ULP et les paramètres EAGLE, les paramètres EAGLE doivent être précédés du préfixe « EAGLE: », comme dans l’exemple suivant :
EAGLE:Option.XrefLabelFormatNotez qu’il n’existe pas de documentation sur l’ensemble des paramètres internes d’EAGLE et sur leur stockage dans le fichier eaglerc. Par ailleurs, soyez très prudent lorsque vous modifiez l’un de ces paramètres. De même que pour le fichier eaglerc lui-même, il est recommandé de ne les manipuler que si vous savez ce que vous faites. Certains paramètres EAGLE peuvent nécessiter un redémarrage d’EAGLE pour que les modifications prennent effet. Dans le fichier eaglerc, les paramètres de langage utilisateur sont stockés avec le préfixe « ULP: ». Il est donc possible de placer ce préfixe devant les noms des paramètres de langage utilisateur, comme dans l’exemple suivant :
ULP:mytool.MyParamExemple
string MyParam = cfgget("mytool.MyParam", "SomeDefault");
MyParam = "OtherValue";
cfgset("mytool.MyParam", MyParam);country()
Fonction
Renvoie le code pays du système utilisé.
Syntaxe
string country();Résultat
country renvoie une chaîne composée de deux caractères en majuscules qui identifient le pays utilisé sur le système actuel. Si aucun paramètre de pays ne peut être déterminé, la fonction renvoie la valeur par défaut « US ».
Voir aussi language
Exemple
dlgMessageBox("Your country code is: " + country());exit()
Fonction
Quitte un programme de langage utilisateur.
Syntaxe
void exit(int result);
void exit(string command);Voir aussi RUN
La fonction exit interrompt l’exécution d’un programme de langage utilisateur.
Si un résultat entier est spécifié, il sera utilisé comme valeur renvoyée par le programme. Si une commande de chaîne est spécifiée, elle est exécutée comme si elle avait été saisie sur la ligne de commande immédiatement après la commande RUN. Dans ce cas, la valeur renvoyée de l’ULP est définie sur EXIT_SUCCESS.
Constantes
EXIT_SUCCESS return value for successful program execution (value 0)
EXIT_FAILURE return value for failed program execution (value -1)fdlsignature()
Fonction
Calcule une signature numérique pour DesignLink de Premier Farnell.
Syntaxe
string fdlsignature(string s, string key);La fonction fdlsignature sert à calculer une signature numérique lors de l’accès à l’interface DesignLink de Premier Farnell.
language()
Fonction
Renvoie le code de langue du système utilisé.
Syntaxe
string language();Résultat
language renvoie une chaîne composée de deux caractères en minuscules qui identifient la langue utilisée sur le système actuel. Si aucun paramètre de langue ne peut être déterminé, la fonction renvoie la valeur par défaut « en ».
Voir aussi country
Vous pouvez utiliser la fonction language pour indiquer à un ULP d’utiliser une chaîne de message différente en fonction de la langue utilisée par le système actuel.
Dans l’exemple ci-dessous, toutes les chaînes utilisées dans l’ULP sont répertoriées dans le tableau de chaînes I18N[]. Elles sont précédées d’une chaîne contenant les différents codes de langue pris en charge par cet ULP. Notez l’utilisation de caractères vtab pour séparer les différentes parties de chaque chaîne (ils sont importants pour la fonction lookup) et de virgules pour séparer les différentes chaînes. L’action effective a lieu dans la fonction tr(), qui renvoie la version traduite de la chaîne spécifiée. Si la chaîne d’origine est introuvable dans le tableau I18N ou qu’il n’existe aucune traduction pour la langue actuelle, la chaîne d’origine (non traduite) est utilisée.
La première langue définie dans le tableau I18N doit être celle qui est utilisée pour écrire les chaînes de l’ULP. Elle doit généralement être l’anglais pour que le programme soit accessible au plus grand nombre d’utilisateurs.
Exemple
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()
Fonction
Recherche des données dans un tableau de chaînes.
Syntaxe
string lookup(string array[], string key, int field_index[, char separator]);
string lookup(string array[], string key, string field_name[, char separator]);Résultat
lookup renvoie la valeur du champ identifié par field_index ou field_name. Si le champ n’existe pas ou si aucune chaîne correspondant à la clé spécifiée n’est trouvée, la fonction renvoie une chaîne vide.
Voir aussi fileread, strsplit
Un tableau compatible avec lookup() est constitué de chaînes de texte, chaque chaîne représentant un enregistrement de données.
Chaque enregistrement de données contient un nombre arbitraire de champs, séparés par le séparateur de caractères (la valeur par défaut est « \t », à savoir la tabulation). Le premier champ d’un enregistrement est utilisé comme clé, et le numéro 0 lui est affecté.
Tous les enregistrements doivent posséder des champs clés uniques et aucun champ clé ne peut être vide. Sinon, l’enregistrement trouvé est indéfini.
Lorsque la première chaîne du tableau contient un enregistrement d’en-tête (c’est-à-dire un enregistrement dont chaque champ décrit le contenu), si la fonction lookup est utilisée avec une chaîne field_name, l’index du champ est déterminé automatiquement. Cela permet d’utiliser la fonction lookup sans connaître précisément l’index de champ contenant les données recherchées. Il incombe à l’utilisateur de s’assurer que le premier enregistrement contient effectivement des informations d’en-tête.
Si, dans l’appel à la fonction lookup(), l’argument key est une chaîne vide, alors la première chaîne du tableau est utilisée. Cela permet à un programme de déterminer s’il existe un enregistrement d’en-tête contenant les noms de champs requis.
Si un champ contient le caractère séparateur, il doit être placé entre guillemets droits (comme dans "abc;def", où le point-virgule (;) est utilisé comme séparateur). Il en est de même si le champ contient des guillemets doubles ("). Dans ce cas. les guillemets doubles à l’intérieur du champ doivent être doublés (comme dans "abc;""def"";ghi", qui représenterait abc;"def";ghi).
Il est préférable d’utiliser le séparateur par défaut (le caractère de tabulation) qui ne présente pas ces problèmes (aucun champ ne peut contenir de tabulation).
Voici un exemple de fichier de données (« ; » a été utilisé comme séparateur pour une meilleure lisibilité) :
Name;Manufacturer;Code;Price
7400;Intel;I-01-234-97;$0.10
68HC12;Motorola;M68HC1201234;$3.50Exemple
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()
Fonction
Renvoie les informations de la palette de couleurs.
Syntaxe
int palette(int index[, int type]);Résultat
La fonction palette renvoie une valeur ARGB entière sous la forme 0xaarrggbb ou le type de la palette actuellement utilisée (selon la valeur de l’index).
La fonction palette renvoie la valeur ARGB de la couleur avec l’index spécifié (compris entre 0 et PALETTE_ENTRIES-1). Si l’argument type n’est pas spécifié (ou est défini sur -1), la palette affectée à la fenêtre d’édition actuelle est utilisée. Sinon, type indique la palette de couleurs à utiliser (PALETTE_BLACK, PALETTE_WHITE ou PALETTE_COLORED). Avec la valeur spéciale -1 pour l’index, la fonction renvoie le type de la palette actuellement utilisée dans la fenêtre d’édition.
Si index ou type est hors plage, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.
Constantes
| PALETTE_TYPES | nombre de types de palettes (3) |
| PALETTE_BLACK | palette noire d’arrière-plan (0) |
| PALETTE_WHITE | palette blanche d’arrière-plan (1) |
| PALETTE_COLORED | palette d’arrière-plan de couleur (2) |
| PALETTE_ENTRIES | nombre de couleurs par palette (64) |
sleep()
Fonction
Impose un délai d’exécution du nombre de secondes spécifié.
Syntaxe
void sleep(int seconds);Voir aussi time()
La fonction sleep retarde l’exécution d’un programme ULP d’un certain nombre de secondes.
sort()
Fonction
Trie un tableau ou un jeu de tableaux.
Syntaxe
void sort(int number, array1[, array2,...]);La fonction sort trie directement le tableau array1 spécifié ou bien un jeu de tableaux (commençant par array2). Dans ce deuxième cas, array1 est censé être un tableau d’entiers, qui sera utilisé comme tableau de pointeurs.
Dans tous les cas, l’argument number définit le nombre d’éléments dans le ou les tableaux.
Tri d’un tableau
Si la fonction sort est appelée avec un tableau, ce dernier est trié directement, comme dans l’exemple suivant :
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]);Tri d’un jeu de tableaux
Si la fonction sort est appelée avec plusieurs tableaux, le premier doit être un tableau d’entiers, tandis que les autres peuvent être de tout type et contenir les données à trier. L’exemple suivant illustre l’utilisation du premier tableau comme tableau de pointeurs :
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’idée sous-jacente est que plusieurs broches peuvent être connectées à un même net. De plus, il est parfois souhaitable de trier les noms de nets dans la netlist, ou encore de trier les noms des composants dans un net, etc. Notez l’utilisation du mot-clé numeric dans les tableaux de chaînes. Ainsi, le tri des chaînes tient compte de la partie numérique à la fin des chaînes, ce qui donne par exemple IC1, IC2... IC9, IC10, au lieu de l’ordre alphabétique IC1, IC10, IC2... IC9.
Lors du tri d’un jeu de tableaux, le premier tableau (index) doit être de type entier (int) et ne doit pas être initialisé. Si le tableau d’index contient des valeurs avant l’appel à la fonction sort, ce contenu est remplacé par les valeurs d’index obtenues.
status()
Fonction
Affiche un message d’état dans la barre d’état.
Syntaxe
void status(string message);Voir aussi dlgMessageBox()
La fonction status affiche le message spécifié dans la barre d’état de la fenêtre d’édition dans laquelle l’ULP s’exécute.
system()
Fonction
Exécute un programme externe.
Syntaxe
int system(string command);Résultat
La fonction system indique si la commande spécifiée s’exécute sans erreur. Elle renvoie généralement 0 si tout était correct et une valeur non nulle en cas d’erreur.
La fonction system exécute le programme externe spécifié par la chaîne command, puis attend que le programme se termine.
Redirection de l’entrée/la sortie
Si le programme externe doit lire son entrée standard depuis (ou écrire sa sortie standard vers) un fichier particulier, l’entrée/la sortie doit être redirigée.
Sous Linux et Mac OS X, cette opération s’effectue simplement en ajoutant « < » ou « > » sur la ligne de commande, suivi du nom de fichier souhaité, comme dans :
system("program < infile > outfile");qui exécute le programme en le faisant lire dans infile et écrite dans outfile.
Sous Windows, vous devez exécuter explicitement un processeur de commandes pour effectuer cette opération, comme dans :
system("cmd.exe /c program < infile > outfile");(Sur les systèmes Windows basés sur DOS, utilisez command.com au lieu de cmd.exe.)
Exécution en arrière-plan
La fonction system attend que le programme spécifié se termine. Cette option est utile pour les programmes qui ne s’exécutent que pendant quelques secondes, ou qui captent toute l’attention de l’utilisateur.
Si un programme externe s’exécute plus longtemps et que vous souhaitez que l’appel à la fonction system renvoie immédiatement un résultat, sans attendre la fin du programme, ajoutez « & » à la chaîne de commande sous Linux et Mac OS X, comme dans :
system("program &");Sous Windows, vous devez exécuter explicitement un processeur de commandes pour effectuer cette opération, comme dans :
system("cmd.exe /c start program");(Sur les systèmes Windows basés sur DOS, utilisez command.com au lieu de cmd.exe.)
Exemple
int result = system("simulate -f filename");Cette instruction appelle un programme de simulation, en spécifiant un fichier que l’ULP vient de créer. Notez que simulate n’est qu’un exemple ; ce n’est pas un programme inclus dans le module EAGLE.
Pour contrôler les commandes system qui sont réellement exécutées, vous pouvez écrire une fonction de wrapper qui invite l’utilisateur à confirmer avant d’exécuter une commande, comme dans :
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");Conversions d’unités
Fonction
Convertit les unités internes.
Syntaxe
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);Résultat
u2inch renvoie la valeur n en pouces.
u2mic renvoie la valeur n en microns (1/1 000 mm).
u2mil renvoie la valeur n en millièmes de pouce (1/1 000 po).
u2mm renvoie la valeur n en millimètres.
inch2u renvoie la valeur n (exprimée en pouces) en unités internes.
mic2u renvoie la valeur n (exprimée en microns) en unités internes.
mil2u renvoie la valeur n (exprimée en millièmes de pouce) en unités internes.
mm2u renvoie la valeur n (exprimée en millimètres) en unités internes.
Voir aussi UL_GRID
EAGLE stocke toutes les valeurs de coordonnées et de taille sous forme de valeurs entières avec une résolution de 1/320 000 mm (0,003125 µ). Vous pouvez utiliser les fonctions de conversion d’unités ci-dessus pour convertir ces unités internes vers les unités de mesure souhaitées, et vice versa.
Exemple
board(B) {
B.elements(E) {
printf("%s at (%f, %f)\n", E.name,
u2mm(E.x), u2mm(E.y));
}
}Les fonctions de réseau servent à accéder aux sites distants sur Internet.
neterror()
Fonction
Renvoie le message d’erreur du dernier appel de fonction réseau.
Syntaxe
string neterror(void);Résultat
neterror renvoie un message textuel décrivant l’erreur qui s’est produite lors du dernier appel à une fonction de réseau.
Si aucune erreur ne s’est produite, la valeur renvoyée est une chaîne vide.
Voir aussi netget, netpost
La fonction neterror doit être appelée si l’une des autres fonctions de réseau renvoie une valeur négative, car une telle valeur indique qu’une erreur s’est produite. La valeur renvoyée par neterror est une chaîne textuelle qui peut être présentée à l’utilisateur.
Dans le cas des erreurs liées aux connexions SSL (HTTPS), tenez également compte de la remarque fournie pour netget.
Exemple
string Result;
if (netget(Result, "http://web.cadsoft.de/cgi-bin/http-test?see=me&hear=them") >= 0) {
// process Result
}
else
dlgMessageBox(neterror());netget()
Fonction
Exécute une requête GET sur le réseau.
Syntaxe
int netget(dest, string url[, int timeout]);Résultat
netget renvoie le nombre d’objets lus à partir du réseau. La signification réelle de la valeur renvoyée dépend du type de l’argument dest.
En cas d’erreur, la fonction renvoie une valeur négative. Vous pouvez alors appeler la fonction neterror() pour afficher un message d’erreur à l’utilisateur.
Voir aussi netpost, neterror, fileread
La fonction netget envoie l’URL spécifiée au réseau et stocke le résultat dans la variable dest. Si aucune activité réseau n’a été enregistrée pendant timeout secondes, la connexion est interrompue. La valeur par défaut de timeout est de 20 secondes.
L’URL doit contenir le protocole à utiliser (HTTP, HTTPS ou FTP) et peut contenir des paires de paramètres name=value, comme dans l’exemple suivant :
http://web.cadsoft.de/cgi-bin/http-test?see=me&hear=them
ftp://ftp.cadsoft.de/eagle/userfiles/READMESi un ID utilisateur et un mot de passe sont requis pour accéder à un site distant, ils peuvent être spécifiés comme suit :
https://userid:password@www.site.com/...Si dest est un tableau de caractères, le résultat est traité comme des données binaires brutes et la valeur renvoyée reflète le nombre d’octets stockés dans le tableau de caractères.
Si dest est un tableau de chaînes, le résultat est traité comme des données texte (une ligne par membre du tableau) et la valeur renvoyée correspond au nombre de lignes stockées dans le tableau de chaînes. Les caractères de retour à la ligne sont éliminés.
Si dest est une chaîne, le résultat est stocké dans cette chaîne et la valeur renvoyée est la longueur de la chaîne. Avec des données binaires, notez que le résultat est tronqué à la première occurrence d’un octet ayant la valeur 0x00.
Si vous devez utiliser un proxy pour accéder à Internet à l’aide du protocole HTTP ou HTTPS, vous pouvez le configurer dans la boîte de dialogue Configurer, sous Aide/Rechercher les mises à jour, dans le Panneau de configuration.
Connexions SSL
Des certificats requis pour les connexions SSL (requête HTTPS) peuvent être absents ou avoir expiré sur certains systèmes. Dans ce cas, la connexion échoue avec le message d’erreur correspondant, que vous pouvez interroger avec neterror(). Ce message d’erreur devrait permettre d’installer les certificats manquants ou de mettre à jour les certificats expirés pour assurer le bon fonctionnement de la connexion. La méthode à appliquer dépend du système (Panneau de configuration/Options Internet sous Windows, par exemple).
Exemple
string Result;
if (netget(Result, "http://web.cadsoft.de/cgi-bin/http-test?see=me&hear=them") >= 0) {
// process Result
}
else
dlgMessageBox(neterror());netpost()
Fonction
Exécute une requête POST sur le réseau.
Syntaxe
int netpost(dest, string url, string data[, int timeout[, string content_type] ]);Résultat
netpost renvoie le nombre d’objets lus à partir du réseau. La signification réelle de la valeur renvoyée dépend du type de dest. En cas d’erreur, la fonction renvoie une valeur négative. Vous pouvez alors appeler la fonction neterror() pour afficher un message d’erreur à l’utilisateur.
Voir aussi netget, neterror, fileread
La fonction netpost envoie les données spécifiées à l’URL indiquée sur le réseau et stocke le résultat dans la variable dest.
Si aucune activité réseau n’a été enregistrée pendant timeout secondes, la connexion est interrompue. La valeur par défaut de timeout est de 20 secondes.
Si content_type est spécifié, il remplace le type de contenu par défaut (text/html; charset=utf-8). L’URL doit contenir le protocole à utiliser (HTTP ou HTTPS).
Si un ID utilisateur et un mot de passe sont requis pour accéder à un site distant, ils peuvent être spécifiés comme suit :
https://userid:password@www.secret-site.com/...Si dest est un tableau de caractères, le résultat est traité comme des données binaires brutes et la valeur renvoyée reflète le nombre d’octets stockés dans le tableau de caractères.
Si dest est un tableau de chaînes, le résultat est traité comme des données texte (une ligne par membre du tableau) et la valeur renvoyée correspond au nombre de lignes stockées dans le tableau de chaînes. Les caractères de retour à la ligne sont éliminés.
Si dest est une chaîne, le résultat est stocké dans cette chaîne et la valeur renvoyée est la longueur de la chaîne. Avec des données binaires, notez que le résultat est tronqué à la première occurrence d’un octet ayant la valeur 0x00.
Si vous devez utiliser un proxy pour accéder à Internet à l’aide du protocole HTTP ou HTTPS, vous pouvez le configurer dans la boîte de dialogue Configurer, sous Aide/Rechercher les mises à jour, dans le panneau de configuration.
En cas de problème lié aux connexions SSL (HTTPS), tenez compte de la remarque fournie pour netget.
Exemple
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());Les fonctions d’impression servent à imprimer des chaînes formatées.
printf()
Fonction
Enregistre la sortie formatée dans un fichier.
Syntaxe
int printf(string format[, argument, ...]);Résultat
La fonction printf renvoie le nombre de caractères écrits dans le fichier ouvert par la dernière instruction de sortie. En cas d’erreur, printf renvoie -1.
Voir aussi sprintf, output, fileerror
Chaîne de format
La chaîne de format détermine la façon dont les arguments sont convertis, formatés et imprimés. Le nombre d’arguments doit correspondre exactement aux spécifications du format. Le nombre et le type des arguments sont vérifiés par rapport au format, et toute incohérence entraîne un message d’erreur. La chaîne de format contient deux types d’objets : les caractères simples et les spécificateurs de format.
Spécificateurs de format
Un spécificateur de format possède la forme suivante :
% [flags] [width] [.prec] typeChaque spécification de format commence par le caractère de pourcentage (%). Après le signe %, viennent les éléments suivants, dans cet ordre :
an optional sequence of flag characters, [flags]
an optional width specifier, [width]
an optional precision specifier, [.prec]
the conversion type character, typeCaractères de type de conversion
| d | nombre entier décimal signé |
| o | nombre entier octal non signé |
| u | nombre entier décimal non signé |
| x | nombre entier hexadécimal non signé (avec a, b,...) |
| X | nombre entier hexadécimal non signé (avec A, B,...) |
| f | valeur réelle signée au format [-]dddd.dddd |
| e | valeur réelle signée au format [-]d.dddde[±]ddd |
| E | identique à e, mais avec E comme exposant |
| g | valeur réelle signée, au format e ou f, selon la valeur et la précision spécifiées |
| G | identique à g, mais avec E comme exposant si le format e est utilisé |
| c | caractère unique |
| s | chaîne de caractères |
| % | le caractère % est imprimé |
Caractères d’indicateur
Les caractères d’indicateur suivants peuvent apparaître dans n’importe quel ordre et n’importe quelle combinaison :
| « - » | L’élément formaté est justifié à gauche dans le champ ; en principe, les éléments sont justifiés à droite. |
| « + » | Un élément positif signé commence toujours par le signe plus (+) ; en principe, seuls les éléments négatifs commencent par un signe. |
| « » | Un élément positif signé commence toujours par un espace ; si « + » et « » sont spécifiés, « + » remplace « ». |
Spécificateurs de largeur
Le spécificateur de largeur définit la largeur minimale du champ pour une valeur de sortie.
La largeur est spécifiée directement, par le biais d’une chaîne de chiffres décimaux, ou indirectement, par le biais d’un astérisque (*). Si vous utilisez un astérisque comme spécificateur de largeur, l’argument antérieur (qui doit être un entier) à celui qui est formaté (à l’aide de ce spécificateur de format) détermine la largeur minimale du champ de sortie.
Si la largeur de champ est inexistante ou petite, le champ n’est pas tronqué. Si le résultat d’une conversion prend trop de place pour la largeur du champ, le champ est étendu pour pouvoir le contenir intégralement.
| n | Au moins n caractères sont imprimés. Si la valeur de sortie comporte moins de n caractères, la sortie est complétée par des espaces vides (si l’indicateur « - » est spécifié, elle est complétée à droite ; sinon elle est complétée à gauche). |
| 0n | Au moins n caractères sont imprimés. Si la valeur de sortie comporte moins de n caractères, elle est complétée par des zéros à gauche. |
| * | Le spécificateur de largeur est fourni dans la liste d’arguments, juste avant l’argument formaté. |
Spécificateurs de précision
Un spécificateur de précision commence toujours par un point (.) pour le séparer de tout indicateur de largeur qui le précède. Ensuite, comme la largeur, la précision est spécifiée directement, par le biais d’une chaîne de chiffres décimaux, ou indirectement, par le biais d’un astérisque (*). Si vous utilisez un astérisque comme spécificateur de précision, l’argument antérieur (qui doit être un entier) à celui qui est formaté (à l’aide de ce spécificateur de format) détermine la précision.
| aucune | Précision définie sur la valeur par défaut. |
| .0 | Pour les valeurs de type entier, la précision est définie sur la valeur par défaut ; pour les valeurs de types réel, aucun séparateur décimal n’est imprimé. |
| .n | n caractères ou n décimales sont imprimés. Si la valeur de sortie comporte plus de n caractères, la sortie peut être tronquée ou arrondie (selon le caractère de type). |
| * | Le spécificateur de précision est fourni dans la liste d’arguments, juste avant l’argument formaté. |
Valeurs de précision par défaut
| douxX | 1 |
| eEf | 6 |
| gG | tous les chiffres significatifs |
| c | aucun effet |
| s | imprimer la chaîne entière |
Impact de la précision spécifiée (.n) sur la conversion
| douxX | .n indique qu’au moins n caractères sont imprimés. Si l’argument d’entrée comporte moins de n chiffres, la valeur de sortie est complétée à gauche par des zéros. Si l’argument d’entrée comporte plus de n chiffres, la valeur de sortie n’est pas tronquée. |
| eEf | .n indique que n caractères sont imprimés après la virgule et que le dernier chiffre imprimé est arrondi. |
| gG | .n indique que n chiffres significatifs au plus sont imprimés. |
| c | .n n’a aucun effet sur la sortie. |
| s | .n indique que n caractères au plus sont imprimés. |
Caractères de zéro binaire
Contrairement à sprintf, la fonction printf permet d’imprimer des caractères de zéro binaire (0x00).
char c = 0x00;
printf("%c", c);Exemple
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()
Fonction
Enregistre la sortie formatée dans une chaîne.
Syntaxe
int sprintf(string result, string format[, argument, ...]);Résultat
La fonction sprintf renvoie le nombre de caractères écrits dans la chaîne result. En cas d’erreur, sprintf renvoie -1.
Voir aussi printf
Chaîne de format
Voir printf.
Caractères de zéro binaire
Notez que sprintf ne peut pas renvoyer de chaînes avec des caractères de zéro binaire intégrés (0x00). Si la chaîne obtenue contient un caractère de zéro binaire, tous les caractères qui le suivent sont supprimés. Pour générer des données binaires, utilisez printf.
Exemple
string result;
int number = 42;
sprintf(result, "The number is %d", number);Les fonctions de chaîne servent à manipuler les chaînes de caractères.
Les fonctions de chaîne suivantes sont disponibles :
strchr()
strjoin()
strlen()
strlwr()
strrchr()
strrstr()
strsplit()
strstr()
strsub()
strtod()
strtol()
strupr()
strxstr()strchr()
Fonction
Analyse une chaîne pour localiser la première occurrence d’un caractère donné.
Syntaxe
int strchr(string s, char c[, int index]);Résultat
La fonction strchr renvoie le décalage (nombre entier) du caractère dans la chaîne, ou -1 si le caractère est absent de la chaîne.
Voir aussi strrchr, strstr
Si l’argument index est spécifié, la recherche commence à la position correspondante. Si sa valeur est négative, la position est calculée à partir de la fin de la chaîne.
Exemple
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()
Fonction
Fusionne un tableau de chaînes pour former une seule chaîne.
Syntaxe
string strjoin(string array[], char separator);Résultat
La fonction strjoin renvoie les entrées combinées du tableau.
Voir aussi strsplit, lookup, fileread
strjoin joint toutes les entrées du tableau, délimitées par le séparateur spécifié, et renvoie la chaîne obtenue.
Si le séparateur est le caractère de retour à la ligne (\n), la chaîne obtenue se termine par un caractère de retour à la ligne. Vous obtenez ainsi un fichier texte composé de N lignes (chacune d’entre elles se terminant par un caractère de nouvelle ligne) qui est lu avec la fonction fileread() et converti en un tableau de N chaînes que vous pouvez joindre à la chaîne d’origine lue à partir du fichier.
Exemple
string a[] = { "Field 1", "Field 2", "Field 3" };
string s = strjoin(a, ':');strlen()
Fonction
Calcule la longueur d’une chaîne.
Syntaxe
int strlen(string s);Résultat
La fonction strlen renvoie le nombre de caractères dans la chaîne spécifiée.
Exemple
string s = "This is a string";
int l = strlen(s);
printf("The string is %d characters long\n", l);strlwr()
Fonction
Convertit les lettres majuscules d’une chaîne en minuscules.
Syntaxe
string strlwr(string s);Résultat
La fonction strlwr renvoie la chaîne modifiée. La chaîne d’origine (spécifiée en argument) n’est pas modifiée.
Voir aussi strupr, tolower
Exemple
string s = "This Is A String";
string r = strlwr(s);
printf("Prior to strlwr: %s - after strlwr: %s\n", s, r);strrchr()
Fonction
Analyse une chaîne pour localiser la dernière occurrence d’un caractère donné.
Syntaxe
int strrchr(string s, char c[, int index]);Résultat
La fonction strrchr renvoie le décalage (nombre entier) du caractère dans la chaîne, ou -1 si le caractère est absent de la chaîne.
Voir aussi strchr, strrstr
Si l’argument index est spécifié, la recherche commence à la position correspondante. Si sa valeur est négative, la position est calculée à partir de la fin de la chaîne.
Exemple
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()
Fonction
Analyse une chaîne pour localiser la dernière occurrence d’une sous-chaîne donnée.
Syntaxe
int strrstr(string s1, string s2[, int index]);Résultat
La fonction strrstr renvoie le décalage (nombre entier) du premier caractère de s2 dans s1, ou -1 si la sous-chaîne n’est pas incluse dans la chaîne.
Voir aussi strstr, strrchr
Si l’index est spécifié, la recherche commence à la position correspondante. Si sa valeur est négative, la position est calculée à partir de la fin de la chaîne.
Exemple
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()
Fonction
Scinde une chaîne en champs séparés.
Syntaxe
int strsplit(string &array, string s, char separator);
Résultat
La fonction strsplit renvoie le nombre d’entrées copiées dans le tableau.
Voir aussi strjoin, lookup, fileread
strsplit : scinde la chaîne s au niveau du séparateur spécifié et stocke les champs résultants dans le tableau.
Si le séparateur est le caractère de retour à la ligne (\n), le dernier champ est supprimé sans avertissement s’il est vide. Vous obtenez ainsi un fichier texte composé de N lignes (chacune d’entre elles se terminant par un caractère de nouvelle ligne) qui est lu avec la fonction fileread() pour être converti en un tableau de N chaînes. Avec tout autre séparateur, un champ vide à la fin de la chaîne compte. Ainsi, "a:b:c:" donnerait quatre champs, le dernier étant vide.
Exemple
string a[];
int n = strsplit(a, "Field 1:Field 2:Field 3", ':');strstr()
Fonction
Analyse une chaîne pour localiser la première occurrence d’une sous-chaîne donnée.
Syntaxe
int strstr(string s1, string s2[, int index]);Résultat
La fonction strstr renvoie le décalage (nombre entier) du premier caractère de s2 dans s1, ou -1 si la sous-chaîne n’est pas incluse dans la chaîne.
Voir aussi strrstr, strchr, strxstr
Si l’argument index est spécifié, la recherche commence à la position correspondante. Si sa valeur est négative, la position est calculée à partir de la fin de la chaîne.
Exemple
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()
Fonction
Extrait une sous-chaîne d’une chaîne.
Syntaxe
string strsub(string s, int start[, int length]);
Résultat
La fonction strsub renvoie la sous-chaîne spécifiée par les valeurs de start et de length. La valeur de length doit être positive ; sinon une chaîne vide sera renvoyée. Si l’argument length est omis, la fonction renvoie tout le reste de la chaîne (à partir de la position start).
Si start correspond à une position en dehors de la chaîne, la fonction renvoie une chaîne vide.
Exemple
string s = "This is a string";
string t = strsub(s, 4, 7);
printf("The extracted substring is: %s\n", t);strtod()
Fonction
Convertit une chaîne en valeur réelle.
Syntaxe
real strtod(string s);Résultat
La fonction strtod renvoie la représentation numérique de la chaîne spécifiée sous la forme d’une valeur réelle. La conversion se termine au premier caractère qui ne correspond pas au format d’une constante de type réel. Si une erreur se produit lors de la conversion de la chaîne, la fonction renvoie 0.0.
Voir aussi strtol
Exemple
string s = "3.1415";
real r = strtod(s);
printf("The value is %f\n", r);strtol()
Fonction
Convertit une chaîne en valeur entière.
Syntaxe
int strtol(string s);Résultat
La fonction strtol renvoie la représentation numérique de la chaîne spécifiée sous la forme d’une valeur entière. La conversion se termine au premier caractère qui ne correspond pas au format d’une constante de type entier. Si une erreur se produit lors de la conversion de la chaîne, la fonction renvoie 0.
Voir aussi strtod
Exemple
string s = "1234";
int i = strtol(s);
printf("The value is %d\n", i);strupr()
Fonction
Convertit les lettres minuscules d’une chaîne en majuscules.
Syntaxe
string strupr(string s);Résultat
La fonction strupr renvoie la chaîne modifiée. La chaîne d’origine (spécifiée en argument) n’est pas modifiée.
Voir aussi strlwr, toupper
Exemple
string s = "This Is A String";
string r = strupr(s);
printf("Prior to strupr: %s - after strupr: %s\n", s, r);strxstr()
Fonction
Analyse une chaîne pour localiser la première occurrence d’une expression régulière donnée.
Syntaxe
int strxstr(string s1, string s2[, int index[, int &length]]);Résultat
La fonction strxstr renvoie le décalage (nombre entier) de la sous-chaîne dans s1 qui correspond à l’expression régulière dans s2, ou -1 si l’expression régulière est absente de la chaîne.
Voir aussi strstr, strchr, strrstr
Si l’argument index est spécifié, la recherche commence à la position correspondante. Si sa valeur est négative, la position est calculée à partir de la fin de la chaîne.
Si l’argument length est spécifié, la longueur réelle de la sous-chaîne correspondante est renvoyée dans cette variable.
Les expressions régulières vous permettent d’identifier une structure dans une chaîne de texte. Par exemple, l’expression régulière "i.*a" recherche toute séquence de caractères qui commence par la lettre i suivie de tout caractère (.) un nombre de fois illimité (*) et qui se termine par la lettre a. Les chaînes « is a », « is this a » et « ia » correspondraient à cette recherche. Pour en savoir plus sur les expressions régulières, consultez, par exemple, le livre Mastering Regular Expressions de Jeffrey E. F. Friedl.
Exemple
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");Les fonctions d’URN servent à traiter les URN.
urnbase()
Fonction
Extrait l’URN de base d’une chaîne URN.
Syntaxe
string urnbase(string urn);Résultat
La fonction urnbase renvoie l’URN de base de l’URN fourni, c’est-à-dire l’URN sans le numéro de version indiqué à la fin ou /. Par exemple, l’URN de base de « urn:adsk.eagle:footprint:123/4 » est « urn:adsk.eagle:footprint:123 ». Si aucune version n’est présente, la fonction renvoie la chaîne d’entrée.
Exemple
string urn = "urn:adsk.eagle:footprint:123/4";
string base = urnbase(urn);
printf("The base URN is: %s\n", base);urnversion()
Fonction
Extrait la version d’une chaîne URN.
Syntaxe
int urnversion(string urn);Résultat
La fonction urnversion renvoie la version de l’URN fourni, c’est-à-dire le nombre qui suit le signe /. Si aucune version n’est spécifiée, la fonction renvoie -1.
Exemple
string urn = "urn:adsk.eagle:footprint:123/4";
int version = urnversion(urn);
printf("The URN version is: %d\n", version);Les fonctions temporelles servent à obtenir et traiter les informations de date et d’heure.
Les fonctions temporelles suivantes sont disponibles :
sleep()
t2day()
t2dayofweek()
t2hour()
t2minute()
t2month()
t2second()
t2string()
t2year()
time()
timems()time()
Fonction
Obtient l’heure actuelle du système.
Syntaxe
int time(void);Résultat
La fonction temporelle renvoie l’heure actuelle du système en tant que nombre de secondes écoulées depuis une date de référence dépendante du système.
Voir aussi Conversions temporelles, filetime, timems()
Exemple
int CurrentTime = time();timems()
Fonction
Obtient le nombre de millisecondes depuis le démarrage de l’ULP.
Syntaxe
int timems(void);Résultat
La fonction timems renvoie le nombre de millisecondes qui se sont écoulées depuis le démarrage de l’ULP. Après 86 400 000 millisecondes (toutes les 24 heures), la valeur recommence à 0.
Voir aussi time
Exemple
int elapsed = timems();Conversions temporelles
Fonction
Permettent de convertir une valeur temporelle en jours, mois, années, etc.
Syntaxe
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]);Résultat
*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 timeVoir aussi time
Sans le paramètre de format facultatif, la fonction t2string convertit le temps spécifié t en chaîne spécifique à un pays dans l’heure locale.
Si t2string est appelé avec une chaîne de format, ce format est utilisé pour déterminer l’apparence du résultat.
Vous pouvez utiliser les expressions suivantes dans une chaîne de format :
| d | jour du mois sous forme de nombre sans zéro de début (de 1 à 31) |
| dd | jour du mois sous forme de nombre avec zéro de début (de 01 à 31) |
| ddd | jour de la semaine localisé abrégé (par exemple, de « Lun » à « Dim ») |
| dddd | jour de la semaine localisé long (par exemple, de « Lundi » à « Dimanche ») |
| M | mois de l’année sous forme de nombre sans zéro de début (1-12) |
| MM | mois de l’année sous forme de nombre avec zéro de début (01-12) |
| MMM | nom du mois localisé abrégé (par exemple, de « Jan » à « Déc ») |
| MMMM | nom de mois localisé long (par exemple, de « Janvier » à « Décembre ») |
| yy | année sous forme de nombre à deux chiffres (00-99) |
| yyyy | année sous forme de nombre à quatre chiffres |
| h | heure sans zéro de début (de 0 à 23 ou de 1 à 12 avec l’affichage AM/PM) |
| hh | heure avec zéro de début (de 00 à 23 ou de 01 à 12 avec l’affichage AM/PM) |
| m | minute sans zéro de début (de 0 à 59) |
| mm | minute avec zéro de début (de 00 à 59) |
| s | seconde sans zéro de début (de 0 à 59) |
| ss | seconde avec zéro de début (de 00 à 59) |
| z | millisecondes sans zéro de début (toujours 0, car l’heure est seulement spécifiée à la seconde près) |
| zzz | millisecondes avec zéro de début (toujours 000, car l’heure est seulement spécifiée à la seconde près) |
| AP | utiliser l’affichage AM/PM (AP est remplacé par « AM »·ou « PM ») |
| ap | utiliser l’affichage am/pm (ap est remplacée par « am » ou « pm ») |
| U | afficher l’heure spécifiée en temps UTC (doit être le premier caractère ; l’affichage par défaut est l’heure locale) |
Tous les autres caractères sont copiés « tels quels ». Toute suite de caractères entre guillemets simples est considérée comme du texte et n’est pas utilisée en tant qu’expression. Deux guillemets simples consécutifs ('') sont remplacés par un guillemet simple dans la sortie.
Exemple
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"));Les fonctions d’objet servent à accéder aux informations courantes sur les objets.
Les fonctions d’objet suivantes sont disponibles :
clrgroup()
ingroup()
setgroup()
setvariant()
variant()clrgroup()
Fonction
Efface les indicateurs de groupe d’un objet.
Syntaxe
void clrgroup(object);Voir aussi ingroup(), setgroup() et la commande GROUP
La fonction clrgroup() efface les indicateurs de groupe de l’objet spécifié. Il ne fait donc plus partie du groupe précédemment défini.
Lorsque la fonction est appliquée à un objet contenant d’autres objets (comme UL_BOARD ou UL_NET), les indicateurs de groupe de tous les objets contenus dans l’objet sont effacés récursivement, malgré des limitations semblables à celles de setgroup().
Exemple
board(B) {
B.elements(E)
clrgroup(E);
}ingroup()
Fonction
Vérifie si un objet se trouve dans le groupe.
Syntaxe
int ingroup(object);Résultat
La fonction ingroup renvoie une valeur non nulle si l’objet spécifié se trouve dans le groupe.
Voir aussi clrgroup(), setgroup() et la commande GROUP
Si un groupe a été défini dans l’éditeur, vous pouvez utiliser la fonction ingroup() pour vérifier si un objet particulier fait partie du groupe.
Les objets qui sont dotés d’une seule coordonnée et peuvent être sélectionnés individuellement dans le dessin actif (UL_TEXT, UL_VIA ou UL_CIRCLE, par exemple) renvoient une valeur non nulle dans un appel à ingroup() si cette coordonnée se trouve dans le groupe défini.
Un objet UL_WIRE renvoie 0, 1, 2 ou 3 pour indiquer respectivement qu’aucune de ses extrémités ne se trouve dans le groupe, que la première s’y trouve, que la deuxième s’y trouve ou que les deux extrémités sont dans le groupe.
Un objet UL_RECTANGLE ou UL_FRAME renvoie une valeur non nulle si un ou plusieurs de ses coins se trouvent dans le groupe. Dans la valeur, le bit 0 correspond au coin supérieur droit, le bit 1 au coin supérieur gauche, le bit 2 au coin inférieur gauche et le bit 3 au coin inférieur droit.
Les objets de rang supérieur qui ne possèdent pas de coordonnées (UL_NET, UL_SEGMENT, UL_SIGNAL, UL_POLYGON) ou qui ne sont pas disponibles en tant qu’objets de dessin (UL_SHEET, UL_DEVICESET, UL_SYMBOL, UL_FOOTPRINT), renvoient une valeur non nulle si un ou plusieurs objets qu’ils contiennent se trouvent dans le groupe. Pour plus d’informations sur les hiérarchies d’objets, reportez-vous à la rubrique Types d’objets.
Bien qu’ils ne disposent pas de coordonnées propres, les objets UL_CONTACTREF et UL_PINREF renvoient une valeur non nulle si l’objet UL_CONTACT ou UL_PIN référencé, respectivement, se trouve dans le groupe. Pour les autres objets non sélectionnables, tels que UL_GRID, UL_VARIANT ou les fils d’un objet UL_TEXT ou UL_FRAME, le comportement de ingroup() n’est pas défini, donc la fonction ne doit pas être utilisée avec ces objets.
Identification de l’objet du menu contextuel
Si vous lancez l’ULP à partir d’un menu contextuel, l’objet sélectionné est accessible par le mécanisme de groupe. Un groupe à un élément est créé à partir de l’objet sélectionné. Il peut donc être identifié par ingroup(). (Voir aussi SET et RUN.)
Exemple
output("group.txt") {
board(B) {
B.elements(E) {
if (ingroup(E))
printf("Element %s is in the group\n", E.name);
}
}
}setgroup()
Fonction
Définit les indicateurs de groupe d’un objet.
Syntaxe
void setgroup(object[, int flags]);Voir aussi clrgroup(), ingroup() et la commande GROUP
La fonction setgroup() définit les indicateurs de groupe de l’objet spécifié, de sorte qu’il devienne partie intégrante du groupe.
Si aucun indicateur n’est défini, l’objet dans son ensemble (c’est-à-dire tous ses points de sélection, s’il en a plusieurs) est ajouté au groupe.
Si les indicateurs ont une valeur non nulle, seuls les indicateurs de groupe des points spécifiés de l’objet sont définis. Dans le cas d’un objet UL_WIRE, la valeur 1 définit l’indicateur de groupe du premier point, la valeur 2 définit celui du second point et la valeur 3 définit les deux. Un appel à setgroup() ne modifie aucun indicateur de groupe précédemment défini.
Lorsque la fonction est appliquée à un objet contenant d’autres objets (comme UL_BOARD ou UL_NET), les indicateurs de groupe de tous les objets contenus dans l’objet sont définis récursivement, avec les limites suivantes :
Ce n’est pas le cas pour UL_LIBRARY et UL_SCHEMATIC. Les indicateurs ne sont pas définis pour les objets subordonnés non sélectionnables (ou non sélectionnables individuellement), tels que les objets UL_GRID ou UL_VARIANT, ou encore les fils des objets UL_TEXT ou UL_FRAME.
Pour plus d’informations sur les hiérarchies d’objets, reportez-vous à la rubrique Types d’objets.
Exemple
board(B) {
B.elements(E)
setgroup(E);
}setvariant()
Fonction
Définit la variantes d’assemblage actuelle.
Syntaxe
int setvariant(string name);Voir aussi variant(), UL_VARIANTDEF et la commande VARIANT
La fonction setvariant() définit la variantes d’assemblage actuelle sur celle qui est spécifiée par l’argument name. Vous pouvez utiliser cette fonction pour parcourir tous les composants afin d’examiner leurs données telles qu’elles sont définies dans la variante spécifiée.
L’argument name doit faire référence à une variantes d’assemblage valide et présente dans le dessin actif.
Cette fonction renvoie une valeur non nulle si la variantes d’assemblage spécifiée existe ; sinon, elle renvoie zéro.
Une variantes d’assemblage définie par un appel à setvariant() n’est active que jusqu’à ce que le programme de langage utilisateur renvoie un résultat. La variante du dessin reprendra alors la valeur qu’elle avait avant le démarrage de l’ULP.
Vous ne pouvez définir la variantes d’assemblage dans un circuit imprimé que si le schéma conforme est chargé.
Exemple
if (setvariant("My variant")) {
// do something ...
else
// error: unknown variantvariant()
Fonction
Interroge la variantes d’assemblage actuelle.
Syntaxe
string variant(void);Voir aussi setvariant(), UL_VARIANTDEF et la commande VARIANT
La fonction variant() renvoie le nom de la variantes d’assemblage actuelle. Si aucune variante n’est sélectionnée, la fonction renvoie une chaîne vide ('').
Exemple
string CurrentVariant = variant();Les fonctions XML servent à traiter les données XML (Extensible Markup Language). Les fonctions XML suivantes sont disponibles :
xmlattribute()
xmlattributes()
xmlelement()
xmlelements()
xmltags()
xmltext()xmlattribute(), xmlattributes()
Fonction
Extrait les attributs d’une balise XML.
Syntaxe
string xmlattribute(string xml, string tag, string attribute);
int xmlattributes(string &array[], string xml, string tag);Voir aussi xmlelement(), xmltags(), xmltext()
La fonction xmlattribute renvoie la valeur de l’attribut spécifié à partir de la balise indiquée dans le code XML spécifié. Si un attribut apparaît plusieurs fois dans la même balise, la fonction renvoie la valeur de sa dernière occurrence.
La fonction xmlattributes stocke les noms de tous les attributs de la balise spécifiée du code XML spécifié dans le tableau et renvoie le nombre d’attributs trouvés. L’ordre n’est pas nécessairement le même que dans le code XML spécifié. Si un attribut apparaît plusieurs fois dans la même balise, son nom n’apparaît qu’une seule fois dans le tableau.
La balise est spécifiée sous la forme d’un chemin.
Si le code XML spécifié contient une erreur, le résultat de toute fonction XML est vide et une boîte de dialogue d’avertissement s’affiche pour fournir des informations à l’utilisateur sur l’emplacement de l’erreur dans les codes ULP et XML. Notez que, dans le code XML, les numéros de ligne et de colonne font référence à la chaîne réelle spécifiée dans l’argument xml de cette fonction.
Exemple
// 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()
Fonction
Extrait les éléments d’un code XML.
Syntaxe
string xmlelement(string xml, string tag);
int xmlelements(string &array[], string xml, string tag);Voir aussi xmltags(), xmlattribute(), xmltext()
La fonction xmlelement renvoie l’élément XML complet de la balise indiquée dans le code XML spécifié. Le résultat contient toujours la balise XML externe de l’élément et peut donc être utilisé pour un traitement plus approfondi avec les autres fonctions XML. Tout caractère d’espacement contenu dans du texte normal au sein de l’élément est conservé. Toutefois, le formatage global des balises XML dans l’élément et l’ordre des attributs de l’élément peuvent varier par rapport au code XML d’origine. S’il existe plusieurs occurrences de la balise spécifiée dans le code XML, la première est renvoyée. Pour obtenir toutes les occurrences, utilisez xmlelements.
La fonction xmlelements fonctionne de la même manière que xmlelement, mais renvoie toutes les occurrences des éléments dotés de la balise spécifiée. La valeur renvoyée correspond au nombre d’éléments stockés dans le tableau.
La balise est spécifiée sous la forme d’un chemin.
Si le code XML spécifié contient une erreur, le résultat de toute fonction XML est vide et une boîte de dialogue d’avertissement s’affiche pour fournir des informations à l’utilisateur sur l’emplacement de l’erreur dans les codes ULP et XML. Notez que, dans le code XML, les numéros de ligne et de colonne font référence à la chaîne réelle spécifiée dans l’argument xml de cette fonction.
Exemple
// 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()
Fonction
Extrait la liste des noms de balises dans un code XML.
Syntaxe
int xmltags(string &array[], string xml, string tag);Voir aussi xmlelement(), xmlattribute(), xmltext()
La fonction xmltags renvoie les noms de toutes les balises situées au niveau supérieur de la balise spécifiée dans le code XML spécifié. La valeur renvoyée correspond au nombre de noms de balises stockés dans le tableau.
Chaque nom de balise n’est renvoyé qu’une seule fois, même s’il apparaît plusieurs fois dans le code XML.
La balise est spécifiée sous la forme d’un chemin.
Si le code XML spécifié contient une erreur, le résultat de toute fonction XML est vide et une boîte de dialogue d’avertissement s’affiche pour fournir des informations à l’utilisateur sur l’emplacement de l’erreur dans les codes ULP et XML. Notez que, dans le code XML, les numéros de ligne et de colonne font référence à la chaîne réelle spécifiée dans l’argument xml de cette fonction.
Exemple
//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()
Fonction
Extrait les données textuelles d’un élément XML.
Syntaxe
string xmltext(string xml, string tag);Voir aussi xmlelement(), xmlattribute(), xmltags()
La fonction xmltext renvoie les données textuelles de la balise indiquée dans le code XML spécifié.
Toutes les balises apparaissant dans le texte sont supprimées. Les caractères d’espacement (y compris les caractères de retour à la ligne) sont conservés.
La balise est spécifiée sous la forme d’un chemin.
Si le code XML spécifié contient une erreur, le résultat de toute fonction XML est vide et une boîte de dialogue d’avertissement s’affiche pour fournir des informations à l’utilisateur sur l’emplacement de l’erreur dans les codes ULP et XML. Notez que, dans le code XML, les numéros de ligne et de colonne font référence à la chaîne réelle spécifiée dans l’argument xml de cette fonction.
Exemple
// 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 "Les instructions intégrées sont généralement utilisées pour ouvrir un contexte dans lequel les fichiers ou les structures de données sont accessibles. La syntaxe générale d’une instruction intégrée est la suivante :
name(parameters) statementoù name est le nom de l’instruction intégrée, parameters représente un ou plusieurs paramètres, et statement est le code qui sera exécuté dans le contexte ouvert par l’instruction intégrée.
Notez que l’instruction peut être une instruction composée, comme dans l’exemple suivant :
board(B) {
B.elements(E) printf("Element: %s\n", E.name);
B.Signals(S) printf("Signal: %s\n", S.name);
}Les instructions intégrées suivantes sont disponibles :
Fonction
Ouvre un contexte de circuit imprimé.
Syntaxe
board(identifier) statementVoir aussi schematic, library
L’instruction board ouvre un contexte de circuit imprimé si la fenêtre d’édition actuelle contient un dessin de circuit imprimé. Une variable de type UL_BOARD est créée et reçoit le nom indiqué par l’argument identifier.
Une fois le contexte de circuit imprimé ouvert et la variable de circuit imprimé créée, l’instruction est exécutée. Dans le cadre de l’instruction, vous pouvez accéder à la variable de circuit imprimé pour récupérer des données supplémentaires du circuit imprimé.
Si la fenêtre d’édition actuelle ne contient pas de dessin de circuit imprimé, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.
Vérification de l’existence d’un circuit imprimé
Pour vérifier si la fenêtre d’édition actuelle contient un dessin de circuit imprimé, utilisez l’instruction board sans argument. Dans ce cas, l’instruction board se comporte comme une constante de type entier qui renvoie 1 s’il existe un dessin de circuit imprimé dans la fenêtre d’édition actuelle, 0 dans le cas contraire.
Accès au circuit imprimé à partir d’un schéma
Si la fenêtre d’édition actuelle contient un dessin schématique, vous pouvez toujours accéder au circuit imprimé de ce schéma en faisant précéder l’instruction board du préfixe project, comme dans l’exemple suivant :
project.board(B) { ... }Cette instruction ouvre un contexte de circuit imprimé, que la fenêtre d’édition actuelle contienne un circuit imprimé ou un dessin schématique. Une fenêtre d’édition contenant le circuit imprimé doit toutefois être ouverte sur le bureau.
Exemple
if (board)
board(B) {
B.elements(E)
printf("Element: %s\n", E.name);
}Fonction
Ouvre un contexte de jeu de composants.
Syntaxe
deviceset(identifier) statementVoir aussi footprint, symbol, library
L’instruction deviceset ouvre un contexte de jeu de composants si la fenêtre d’édition actuelle contient un dessin de composant. Une variable de type UL_DEVICESET est créée et reçoit le nom indiqué par l’argument identifier.
Une fois le contexte de jeu de composants ouvert et la variable de jeu de composants créée, l’instruction est exécutée. Dans le cadre de l’instruction, vous pouvez accéder à la variable de jeu de composants pour récupérer des données supplémentaires du jeu de composants.
Si la fenêtre d’édition actuelle ne contient pas de dessin de composant, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.
Vérification de l’existence d’un jeu de composants
Pour vérifier si la fenêtre d’édition actuelle contient un dessin de composant, utilisez l’instruction deviceset sans argument. Dans ce cas, l’instruction deviceset se comporte comme une constante de type entier qui renvoie 1 s’il existe un dessin de composant dans la fenêtre d’édition actuelle, 0 dans le cas contraire.
Exemple
if (deviceset)
deviceset(D) {
D.gates(G)
printf("Gate: %s\n", G.name);
}Fonction
Ouvre un contexte de bibliothèque.
Syntaxe
library(identifier) statementVoir aussi board, schematic, deviceset, footprint, symbol
L’instruction library ouvre un contexte de bibliothèque si la fenêtre d’édition actuelle contient un dessin de bibliothèque. Une variable de type UL_LIBRARY est créée et reçoit le nom indiqué par l’argument identifier.
Une fois le contexte de bibliothèque ouvert et la variable de bibliothèque créée, l’instruction est exécutée. Dans le cadre de l’instruction, vous pouvez accéder à la variable de bibliothèque pour récupérer des données supplémentaires de la bibliothèque.
Si la fenêtre d’édition actuelle ne contient pas de dessin de bibliothèque, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.
Vérification de l’existence d’une bibliothèque
Pour vérifier si la fenêtre d’édition actuelle contient un dessin de bibliothèque, utilisez l’instruction library sans argument. Dans ce cas, l’instruction library se comporte comme une constante de type entier qui renvoie 1 s’il existe un dessin de bibliothèque dans la fenêtre d’édition actuelle, 0 dans le cas contraire.
Exemple
if (library)
library(L) {
L.devices(D)
printf("Device: %s\n", D.name);
}Fonction
Ouvre un contexte de module.
Syntaxe
module(identifier) statementVoir aussi board, library, schematic, sheet
L’instruction module ouvre un contexte de module si la fenêtre d’édition actuelle contient un dessin de module. L’instruction module ouvre un contexte de module si un dessin de module est en cours de modification dans la fenêtre d’édition. Une variable de type UL_MODULE est créée et reçoit le nom indiqué par l’argument identifier.
Une fois le contexte de module ouvert et la variable de module créée, l’instruction est exécutée. Dans le cadre de l’instruction, vous pouvez accéder à la variable de module pour récupérer des données supplémentaires du module.
Si la fenêtre d’édition actuelle ne contient pas de dessin de module, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.# Si aucun dessin de module n’est en cours de modification dans la fenêtre d’édition, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.
Vérification de l’existence d’un module
Pour vérifier si la fenêtre d’édition actuelle contient un dessin de module, utilisez l’instruction module sans argument. Dans ce cas, l’instruction module se comporte comme une constante de type entier qui renvoie 1 s’il existe un dessin de module dans la fenêtre d’édition actuelle, 0 dans le cas contraire.
Exemple
if (module)
module(M) {
printf("Module: %s\n", M.name);
}Fonction
Ouvre un fichier de sortie pour les appels ultérieurs à printf().
Syntaxe
output(string filename[, string mode]) statementVoir aussi printf, fileerror
L’instruction output ouvre un fichier avec le nom de fichier et le mode de sortie spécifiés (à l’aide des arguments filename et mode) lors des appels ultérieurs à la fonction printf(). Si l’instruction parvient à ouvrir le fichier, elle s’exécute. Une fois l’exécution terminée, le fichier se ferme.
S’il s’avère impossible d’ouvrir le fichier, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.
Le fichier de sortie est enregistré par défaut dans le répertoire du projet.
Modes de fichier
Le paramètre de mode définit la façon dont le fichier de sortie doit être ouvert. Si aucun paramètre de mode n’est spécifié, la valeur par défaut est « 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)Les caractères de mode peuvent apparaître dans n’importe quel ordre et combinés de n’importe quelle façon. Toutefois, si la combinaison comprend les caractères a et w ou les caractères t et b, respectivement, seul le dernier des deux caractères est significatif. Par exemple, le mode « abtw » est identique au mode « wt » : un fichier est ouvert pour écriture textuelle.
Instructions output imbriquées
Les instructions output peuvent être imbriquées, dans la mesure où il y a suffisamment de descripteurs de fichiers disponibles et qu’à aucun moment deux instructions output actives n’accèdent à un même fichier.
Exemple
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");
}Fonction
Ouvre un contexte d’encombrement.
Syntaxe
footprint(identifier) statement (new as of EAGLE 9.1)Voir aussi library, deviceset, symbol
L’instruction footprint ouvre un contexte de package si la fenêtre d’édition actuelle contient un dessin de package. Une variable de type UL_FOOTPRINT est créée et reçoit le nom indiqué par l’argument identifier.
Une fois le contexte d’encombrement ouvert et la variable d’encombrement créée, l’instruction est exécutée. Dans le cadre de l’instruction, vous pouvez accéder à la variable d’empreinte pour récupérer des données supplémentaires de l’empreinte.
Si la fenêtre d’édition actuelle ne contient pas de dessin d’encombrement, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.
Vérification de l’existence d’un encombrement
Pour vérifier si la fenêtre d’édition actuelle contient un dessin d’encombrement, utilisez l’instruction footprint sans argument. Dans ce cas, l’instruction footprint se comporte comme une constante de type entier qui renvoie 1 s’il existe un dessin d’encombrement dans la fenêtre d’édition actuelle, 0 dans le cas contraire.
Exemple
if (footprint)
footprint(F) {
F.contacts(C)
printf("Contact: %s\n", C.name);
}Fonction
Ouvre un contexte de schéma.
Syntaxe
schematic(identifier) statementVoir aussi board, library, module, sheet
L’instruction schematic ouvre un contexte de schéma si la fenêtre d’édition actuelle contient un dessin schématique. Une variable de type UL_SCHEMATIC est créée et reçoit le nom indiqué par l’argument identifier.
Une fois le contexte de schéma ouvert et la variable de schéma créée, l’instruction est exécutée. Dans le cadre de l’instruction, vous pouvez accéder à la variable de schéma pour récupérer des données supplémentaires du schéma.
Si la fenêtre d’édition actuelle ne contient pas de dessin schématique, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.
Vérification de l’existence d’un schéma
Pour vérifier si la fenêtre d’édition actuelle contient un dessin schématique, utilisez l’instruction schematic sans argument. Dans ce cas, l’instruction schematic se comporte comme une constante de type entier qui renvoie 1 s’il existe un dessin schématique dans la fenêtre d’édition actuelle, 0 dans le cas contraire.
Accès au schéma à partir d’un circuit imprimé
Si la fenêtre d’édition actuelle contient un dessin de circuit imprimé, vous pouvez toujours accéder au schéma de ce circuit imprimé en faisant précéder l’instruction schematic du préfixe project, comme dans l’exemple suivant :
project.schematic(S) { ... }Cette instruction ouvre un contexte de schéma, que la fenêtre d’édition actuelle contienne un schéma ou un dessin de circuit imprimé. Une fenêtre d’édition contenant le schéma doit toutefois être ouverte sur le bureau.
Accès à la feuille active
Utilisez l’instruction sheet pour accéder directement à la feuille chargée actuellement.
Accès au module actif
Utilisez l’instruction module pour accéder directement au module en cours de modification.
Exemple
if (schematic)
schematic(S) {
S.parts(P)
printf("Part: %s\n", P.name);
}Fonction
Ouvre un contexte de feuille.
Syntaxe
sheet(identifier) statementVoir aussi schematic
L’instruction sheet ouvre un contexte de feuille si la fenêtre d’édition actuelle contient un dessin de feuille. Une variable de type UL_SHEET est créée et reçoit le nom indiqué par l’argument identifier.
Une fois le contexte de feuille ouvert et la variable de feuille créée, l’instruction est exécutée. Dans le cadre de l’instruction, vous pouvez accéder à la variable de feuille pour récupérer des données supplémentaires de la feuille.
Si la fenêtre d’édition actuelle ne contient pas de dessin de feuille, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.
Vérification de l’existence d’une feuille
Pour vérifier si la fenêtre d’édition actuelle contient un dessin de feuille, utilisez l’instruction sheet sans argument. Dans ce cas, l’instruction sheet se comporte comme une constante de type entier qui renvoie 1 s’il existe un dessin de feuille dans la fenêtre d’édition actuelle, 0 dans le cas contraire..
Exemple
if (sheet)
sheet(S) {
S.instances(I)
printf("Instance: %s\n", I.name);
}Fonction
Ouvre un contexte de symbole.
Syntaxe
symbol(identifier) statementVoir aussi library, deviceset, footprint
L’instruction symbol ouvre un contexte de symbole si la fenêtre d’édition actuelle contient un dessin de symbole. Une variable de type UL_SYMBOL est créée et reçoit le nom indiqué par l’argument identifier.
Une fois le contexte de symbole ouvert et la variable de symbole créée, l’instruction est exécutée. Dans le cadre de l’instruction, vous pouvez accéder à la variable de symbole pour récupérer des données supplémentaires du symbole.
Si la fenêtre d’édition actuelle ne contient pas de dessin de symbole, un message d’erreur s’affiche et l’exécution de l’ULP s’interrompt.
Vérification de l’existence d’un symbole
Pour vérifier si la fenêtre d’édition actuelle contient un dessin de symbole, utilisez l’instruction symbol sans argument. Dans ce cas, l’instruction symbol se comporte comme une constante de type entier qui renvoie 1 s’il existe un dessin de symbole dans la fenêtre d’édition actuelle, 0 dans le cas contraire.
Exemple
if (symbol)
symbol(S) {
S.pins(P)
printf("Pin: %s\n", P.name);
}