Las integraciones son constantes, variables, funciones y sentencias que proporcionan información adicional y permiten manipular datos.
Las constantes integradas se utilizan para proporcionar información sobre los parámetros de objeto, como la longitud máxima recomendada del nombre, los indicadores, etc. Muchos de los tipos de objeto tienen su propia sección de constantes, que muestra las constantes internas de ese objeto concreto (consulte, por ejemplo, UL_PIN).
Las siguientes constantes integradas se definen además de las que se muestran para los distintos tipos de objeto:
| EAGLE_VERSION | Número de versión del programa EAGLE (int) |
| EAGLE_RELEASE | Número de lanzamiento del programa EAGLE (int) |
| EAGLE_SIGNATURE | Una cadena que contiene el nombre, la versión y la información de copyright del programa EAGLE |
| EAGLE_PATH | Una cadena que contiene la ruta completa del ejecutable de EAGLE |
| EAGLE_DIR | Una cadena que contiene el directorio de la instalación de EAGLE ($EAGLEDIR) |
| EAGLE_HOME | Una cadena que contiene el directorio de inicio del usuario al iniciar EAGLE ($HOME) |
| eagle_epf | Una cadena que contiene la ruta completa del archivo eagle.epf utilizado actualmente |
| OS_SIGNATURE | Una cadena que contiene una firma del sistema operativo (por ejemplo, Mac, Windows o Linux) |
| REAL_EPSILON | El número real positivo mínimo, de tal forma que 1.0 + REAL_EPSILON != 1.0 |
| REAL_MAX | El valor real más grande posible |
| REAL_MIN | El valor real más pequeño posible (positivo!). El número representable más pequeño es -REAL_MAX |
| INT_MAX | El valor entero más grande posible |
| INT_MIN | El valor entero más pequeño posible |
| PI | el valor de "pi" (3,14..., real) |
| usage | Una cadena que contiene el texto de la directiva #usage |
Estas constantes integradas contienen las rutas de directorio definidas en el cuadro de diálogo de directorios, con cualquiera de las variables especiales ($HOME y $EAGLEDIR) reemplazadas por sus valores reales. Dado que cada ruta puede tener varios directorios, estas constantes son matrices de cadenas con un directorio individual en cada miembro. El primer miembro vacío marca el final de la ruta:
path_lbr[] Libraries
path_dru[] Design Rules
path_ulp[] User Language Programs
path_scr[] Scripts
path_cam[] CAM Jobs
path_epf[] ProjectsAl utilizar estas constantes para generar un nombre de archivo completo, debe utilizar un separador de directorios, como en
string s = path_lbr[0] + '/' + "mylib.lbr";Las bibliotecas que están actualmente en uso mediante el comando USE:
used_libraries[] Las variables integradas se utilizan para proporcionar información en tiempo de ejecución.
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)Las funciones integradas se utilizan para realizar tareas específicas, como imprimir cadenas con formato, ordenar matrices de datos o similares.
También puede escribir sus propias funciones y utilizarlas para estructurar el programa de idioma del usuario.
Las funciones integradas se agrupan en las siguientes categorías:
Referencia alfabética de todas las funciones integradas:
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()Las funciones de caracteres se utilizan para manipular caracteres individuales.
Las siguientes funciones de caracteres están disponibles:
isalnum()
isalpha()
iscntrl()
isdigit()
isgraph()
islower()
isprint()
ispunct()
isspace()
isupper()
isxdigit()
tolower()
toupper()is...()
Función
Compruebe si un carácter pertenece a una categoría determinada.
Sintaxis
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);Devuelve
Las funciones is... devuelven un valor distinto de cero si el carácter especificado corresponde a la categoría; de lo contrario, devuelven cero.
Categorías de caracteres
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)Ejemplo
char c = 'A';
if (isxdigit(c))
printf("%c is hex\n", c);
else
printf("%c is not hex\n", c);to...()
Función
Convierta un carácter en mayúsculas o minúsculas.
Sintaxis
char tolower(char c);
char toupper(char c);Devuelve
La función tolower devuelve el carácter convertido si c está en mayúsculas. El resto de caracteres se devuelven sin cambios. La función toupper devuelve el carácter convertido si c está en minúsculas. El resto de caracteres se devuelven sin cambios.
Consulte también strupr, strlwr
Las funciones de gestión de nombres de archivo se utilizan para trabajar con nombres de archivo, tamaños y marcas de hora.
Consulte output() para obtener información sobre cómo escribir en un archivo.
fileerror()
Función
Devuelve el estado de las operaciones de E/S.
Sintaxis
int fileerror();Devuelve
La función fileerror devuelve 0 si todo está bien.
Consulte también output, printf, fileread
fileerror comprueba el estado de las operaciones de E/S que se han realizado desde la última llamada a esta función y devuelve 0 si todo estaba correcto. Si alguna de las operaciones de E/S ha provocado un error, se devolverá un valor distinto de 0.
Debe llamar a fileerror antes de cualquier operación de E/S para restablecer cualquier estado de error anterior y volver a llamarla después de las operaciones de E/S para ver si se han realizado correctamente.
Cuando fileerror devuelve un valor distinto de 0 (lo que indica un error), ya se ha proporcionado un mensaje de error correcto al usuario.
Ejemplo
fileerror();
output("file.txt", "wt") {
printf("Test\n");
}
if (fileerror())
exit(1);fileglob()
Función
Realice una búsqueda en el directorio.
Sintaxis
int fileglob(string &array[], string pattern);Devuelve
La función fileglob devuelve el número de entradas copiadas en la matriz.
Consulte también dlgFileOpen(), dlgFileSave()
fileglob realiza una búsqueda en el directorio mediante pattern.
Pattern puede contener “” y “?” como caracteres comodín. Si *pattern termina con “/”, se devolverá el contenido del directorio especificado.
Los nombres de la matriz resultante que terminan con “/” son nombres de directorio.
La matriz se ordena alfabéticamente, con los directorios que se incluyen en primer lugar.
Las entradas especiales “.” y “..” (para los directorios actual y principal) nunca se devuelven en la matriz.
Si pattern no coincide o si no tiene permiso para buscar en el directorio especificado, la matriz resultante estará vacía.
Nota para los usuarios de Windows: el delimitador de directorio de la matriz siempre es una barra oblicua. De este modo, se garantiza que los programas de idioma de usuario funcionen de forma independiente. En el patrón, la barra inversa (\) también se trata como un delimitador de directorio.
La clasificación de los nombres de archivo en Windows se realiza sin tener en cuenta mayúsculas y minúsculas.
Ejemplo
string a[];
int n = fileglob(a, "*.brd");Funciones de nombre de archivo
Función
Dividir un nombre de archivo en sus partes independientes.
Sintaxis
string filedir(string file);
string fileext(string file);
string filename(string file);
string filesetext(string file, string newext);Devuelve
filedir devuelve el directorio del archivo (incluida la letra de la unidad en Windows).
fileext devuelve la extensión del archivo.
filename devuelve el nombre de archivo (incluida la extensión).
filesetext devuelve un archivo con la extensión establecida en newext.
Consulte también las funciones de datos de archivo
Ejemplo
if (board) board(B) {
output(filesetext(B.name, ".out")) {
...
}
}Funciones de datos de archivo
Función
Obtiene la marca horaria y el tamaño de un archivo.
Sintaxis
int filesize(string filename);
int filetime(string filename);Devuelve
filesize devuelve el tamaño (en bytes) del archivo especificado.
filetime devuelve la marca horaria del archivo especificado en segundos. El formato es compatible con las funciones de hora.
Consulte también hora, Funciones de nombre de archivo
Ejemplo
board(B)
printf("Board: %s\nSize: %d\nTime: %s\n",
B.name, filesize(B.name),
t2string(filetime(B.name)));Funciones de entrada de archivos
Las funciones de entrada de archivos se utilizan para leer datos de archivos. La siguiente entrada de archivo está disponible:
Consulte output() para obtener información sobre cómo escribir en un archivo.
fileread()
Función
Lee datos de un archivo.
Sintaxis
int fileread(dest, string file);Devuelve
fileread devuelve el número de objetos leídos del archivo.
El significado real del valor devuelto depende del tipo de dest.
Consulte también lookup, strsplit, fileerror
Si dest es una matriz de caracteres, el archivo se leerá como datos binarios sin procesar y el valor devuelto refleja el número de bytes leídos en la matriz de caracteres (que es igual al tamaño del archivo).
Si dest es una matriz de cadenas, el archivo se leerá como un archivo de texto (una línea por miembro de la matriz) y el valor devuelto será el número de líneas leídas en la matriz de cadenas. Los caracteres de nueva línea se eliminarán.
Si dest es una cadena, se leerá todo el archivo en esa cadena y el valor devuelto será la longitud de esa cadena (que no es necesariamente igual al tamaño de archivo, si el sistema operativo almacena archivos de texto con "cr/lf" en lugar de un carácter de "nueva línea").
Ejemplo
char b[];
int nBytes = fileread(b, "data.bin");
string lines[];
int nLines = fileread(lines, "data.txt");
string text;
int nChars = fileread(text, "data.txt");Las funciones matemáticas se utilizan para realizar operaciones matemáticas. Las siguientes funciones matemáticas están disponibles:
abs()
acos()
asin()
atan()
ceil()
cos()
exp()
floor()
frac()
log()
log10()
max()
min()
pow()
round()
sin()
sqrt()
trunc()
tan()Mensajes de error
Si los argumentos de una llamada a función matemática provocan un error, el mensaje de error mostrará los valores reales de los argumentos. Por lo tanto, las sentencias
real x = -1.0;
real r = sqrt(2 * x);llevarán al mensaje de error
Invalid argument in call to 'sqrt(-2)'Funciones absolutas, máximas y mínimas
Función
Funciones absolutas, máximas y mínimas.
Sintaxis
type abs(type x);
type max(type x, type y);
type min(type x, type y);Devuelve
abs devuelve el valor absoluto de x.
max devuelve el máximo de x e y.
min devuelve el mínimo de x e y.
El tipo de valor devuelto de estas funciones es el mismo que el tipo (mayor) de los argumentos. type debe ser char, int o real.
Ejemplo
real x = 2.567, y = 3.14;
printf("The maximum is %f\n", max(x, y));Funciones de redondeo
Función
Funciones de redondeo.
Sintaxis
real ceil(real x);
real floor(real x);
real frac(real x);
real round(real x);
real trunc(real x);Devuelve
ceil devuelve el número entero más pequeño que no sea menor que x.
floor devuelve el mayor número entero que no sea mayor que x.
frac devuelve la parte fraccionaria de x.
round devuelve x redondeada al entero más cercano.
trunc devuelve la parte entera de x.
Ejemplo
real x = 2.567;
printf("The rounded value of %f is %f\n", x, round(x));Funciones trigonométricas
Función
Funciones trigonométricas.
Sintaxis
real acos(real x);
real asin(real x);
real atan(real x);
real cos(real x);
real sin(real x);
real tan(real x);Devuelve
acos devuelve el coseno de arco de x.
asin devuelve el seno de arco de x.
atan devuelve la tangente de arco de x.
cos devuelve el coseno de x.
sin devuelve el seno de x.
tan devuelve la tangente de x.
Constantes
PI indica el valor de "pi" (3,14...)
Los ángulos se indican en radianes.
Ejemplo
real x = PI / 2;
printf("The sine of %f is %f\n", x, sin(x));Funciones exponenciales
Función
Funciones exponenciales.
Sintaxis
real exp(real x);
real log(real x);
real log10(real x);
real pow(real x, real y);
real sqrt(real x);Devuelve
exp devuelve la e exponencial a la potencia de x. log devuelve el logaritmo natural de x. log10 devuelve el logaritmo base 10 de x. pow devuelve el valor de x a la potencia de y. sqrt devuelve la raíz cuadrada de x.
Ejemplo
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));Las funciones varias se utilizan para realizar diversas tareas.
Las siguientes funciones varias están disponibles:
Parámetros de configuración
Función
Almacenar y recuperar parámetros de configuración.
Sintaxis
string cfgget(string name[, string default]);
void cfgset(string name, string value);Devuelve
cfgget devuelve el valor del parámetro almacenado con el nombre especificado. Si no se ha almacenado ningún parámetro de este tipo, se devuelve el valor del valor por defecto opcional (o una cadena vacía, si no se proporciona ningún valor por defecto). La función cfgget recupera valores que se han almacenado previamente con una llamada a cfgset().
La función cfgset establece el parámetro con el nombre especificado en el valor especificado.
Los caracteres válidos para el nombre son “A”-”Z”, “a”-”z”, “0”-”9”, “.” y “_”.
Los nombres de los parámetros distinguen entre mayúsculas y minúsculas.
Los parámetros se almacenan en el archivo eaglerc del usuario. Para asegurarse de que los distintos programas de idioma del usuario no sobrescriban los parámetros de los demás en caso de que utilicen los mismos nombres de parámetro, se recomienda colocar el nombre del ULP al principio del nombre del parámetro. Por ejemplo, un ULP denominado mytool.ulp que utiliza un parámetro denominado MyParam podría almacenar ese parámetro con el nombre
mytool.MyParamDado que los parámetros de configuración se almacenan en el archivo eaglerc, que también contiene todos los demás parámetros específicos de usuario de EAGLE, también es posible acceder a los parámetros de EAGLE con cfgget() y cfgset(). Para asegurarse de que ningún parámetro de ULP colisiona con ningún parámetro de EAGLE, los parámetros de EAGLE deben ir precedidos de “EAGLE:”, como en
EAGLE:Option.XrefLabelFormatTenga en cuenta que no hay documentación de todos los parámetros internos de EAGLE y cómo se almacenan en el archivo eaglerc. Además, tenga mucho cuidado al cambiar cualquiera de estos parámetros. Al igual que con el propio archivo eaglerc, solo debe manipular estos parámetros si sabe lo que está haciendo. Algunos parámetros de EAGLE pueden requerir un reinicio de EAGLE para que los cambios surtan efecto. En el archivo eaglerc, los parámetros de idioma del usuario se almacenan con el prefijo “ULP:”. Por lo tanto, opcionalmente, este prefijo se puede colocar delante de los nombres de parámetros de idioma del usuario, como en
ULP:mytool.MyParamEjemplo
string MyParam = cfgget("mytool.MyParam", "SomeDefault");
MyParam = "OtherValue";
cfgset("mytool.MyParam", MyParam);country()
Función
Devuelve el código del país del sistema en uso.
Sintaxis
string country();Devuelve
country devuelve una cadena que consta de dos caracteres en mayúsculas que identifican el país utilizado en el sistema actual. Si no se puede determinar la configuración del país, se devolverá el valor por defecto "US".
Consulte también el idioma
Ejemplo
dlgMessageBox("Your country code is: " + country());exit()
Función
Sale de un programa de idioma del usuario.
Sintaxis
void exit(int result);
void exit(string command);Consulte también RUN
La función exit termina la ejecución de un programa de idioma del usuario.
Si se proporciona un resultado entero, se utilizará como valor devuelto del programa. Si se proporciona un comando de cadena, dicho comando se ejecutará como si se hubiera introducido en la línea de comando inmediatamente después del comando RUN. En ese caso, el valor devuelto del ULP se establece en EXIT_SUCCESS.
Constantes
EXIT_SUCCESS return value for successful program execution (value 0)
EXIT_FAILURE return value for failed program execution (value -1)fdlsignature()
Función
Calcula una firma digital para Premier Farnell's Design Link.
Sintaxis
string fdlsignature(string s, string key);La función fdlsignature se utiliza para calcular una firma digital al acceder a la interfaz de Premier Farnell's Design Link.
language()
Función
Devuelve el código de idioma del sistema en uso.
Sintaxis
string language();Devuelve
language devuelve una cadena que consta de dos caracteres en minúsculas que identifican el idioma utilizado en el sistema actual. Si no se puede determinar ese parámetro de idioma, se devolverá el valor por defecto "en".
Consulte también el país
La función de idioma se puede utilizar para hacer que un ULP utilice una cadena de mensaje diferente, dependiendo del idioma que utilice el sistema actual.
En el siguiente ejemplo, todas las cadenas utilizadas en el ULP se enumeran en la matriz de cadenas I18N[], precedida de una cadena que contiene los distintos códigos de idioma que admite este ULP. Tenga en cuenta que los caracteres vtab se utilizan para separar las partes individuales de cada cadena (son importantes para la función de búsqueda) y el uso de las comas para separar las cadenas. El trabajo real se realiza en la función tr(), que devuelve la versión traducida de la cadena especificada. Si la cadena original no se encuentra en la matriz I18N o no hay ninguna traducción para el idioma actual, la cadena original se utilizará sin traducir.
El primer idioma definido en la matriz I18N debe ser el que contenga las cadenas utilizadas en el ULP y, por lo general, debe ser inglés para que el programa esté disponible para el mayor número de usuarios.
Ejemplo
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()
Función
Busca datos en una matriz de cadenas.
Sintaxis
string lookup(string array[], string key, int field_index[, char separator]);
string lookup(string array[], string key, string field_name[, char separator]);Devuelve
lookup devuelve el valor del campo identificado por field_index o field_name. Si el campo no existe o no se encuentra ninguna clave de cadena que coincida, se devuelve una cadena vacía.
Consulte también fileread, strsplit
Una matriz que se puede utilizar con lookup() consta de cadenas de texto y cada una de ellas representa un registro de datos.
Cada registro de datos contiene un número arbitrario de campos, separados por el separador de caracteres (el valor por defecto es “\t”, el tabulador). El primer campo de un registro se utiliza como clave y se numera como 0.
Todos los registros deben tener campos clave únicos y ninguno de los campos clave puede estar vacío; de lo contrario, no se define qué registro se encontrará.
Si la primera cadena de la matriz contiene un registro "Header" (es decir, un registro en el que cada campo describe su contenido), el uso de la búsqueda con una cadena field_name determina automáticamente el índice de ese campo. Esto permite utilizar la función de búsqueda sin saber exactamente qué índice de campo contiene los datos deseados. El usuario se debe asegurar de que el primer registro contiene realmente información de encabezado.
Si el parámetro clave de la llamada a lookup() es una cadena vacía, se utilizará la primera cadena de la matriz. Esto permite que un programa determine si existe un registro de encabezado con los nombres de campo requeridos.
Si un campo contiene el carácter separador, dicho campo debe estar entre comillas dobles (como en "abc;def", suponiendo que se utiliza el punto y coma (“;”) como separador). Lo mismo sucede si el campo contiene comillas dobles ("), en cuyo caso las comillas dobles dentro del campo deben duplicarse (como en "abc;""def"";ghi", que sería abc;"def";ghi).
Es mejor utilizar el separador por defecto "tabulador", que no tiene estos problemas (ningún campo puede contener tabulador).
A continuación se muestra un archivo de datos de ejemplo (“;” se ha utilizado como separador para mejorar la legibilidad):
Name;Manufacturer;Code;Price
7400;Intel;I-01-234-97;$0.10
68HC12;Motorola;M68HC1201234;$3.50Ejemplo
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()
Función
Devuelve información de la paleta de colores.
Sintaxis
int palette(int index[, int type]);Devuelve
La función de paleta devuelve un valor ARGB entero con el formato 0xaarrggbb o el tipo de la paleta utilizada actualmente (dependiendo del valor del índice).
La función de paleta devuelve el valor ARGB del color con el índice especificado (que puede estar entre 0 y PALETTE_ENTRIES-1). Si no se especifica el tipo (o es -1), se utilizará la paleta asignada a la ventana del editor actual. De lo contrario, type especifica la paleta de colores que se utilizará (PALETTE_BLACK, PALETTE_WHITE o PALETTE_COLORED). El valor especial -1 para el índice hace que la función devuelva el type de la paleta que la ventana del editor está utilizando actualmente.
Si index o type están fuera del rango, se mostrará un mensaje de error y se finalizará el ULP.
Constantes
| PALETTE_TYPES | el número de tipos de paletas (3) |
| PALETTE_BLACK | la paleta de fondo negro (0) |
| PALETTE_WHITE | la paleta de fondo blanco (1) |
| PALETTE_COLORED | la paleta de fondo de color (2) |
| PALETTE_ENTRIES | el número de colores por paleta (64) |
sleep()
Función
Número de segundos de suspensión.
Sintaxis
void sleep(int seconds);Consulte también time()
La función de suspensión retrasa la ejecución de un programa ULP durante un número de segundos.
sort()
Función
Ordena una matriz o un conjunto de matrices.
Sintaxis
void sort(int number, array1[, array2,...]);La función de clasificación ordena directamente una matriz1 determinada u ordena un conjunto de matrices (comenzando por matriz2), en cuyo caso matriz1 se supone que es una matriz de entero, que se utilizará como matriz de puntero.
En cualquier caso, el argumento de número define el número de elementos de las matrices.
Clasificación de una sola matriz
Si se invoca la función de clasificación con una sola matriz, dicha matriz se ordenará directamente, como en el siguiente ejemplo:
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]);Clasificación de un conjunto de matrices
Si se invoca la función de clasificación con más de una matriz, la primera matriz debe ser una matriz de entero, mientras que las demás matrices pueden ser de cualquier tipo y contener los datos que se van a ordenar. El siguiente ejemplo ilustra cómo se utilizará la primera matriz como puntero:
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]]);
}La idea detrás de esto es que una red puede tener varios pasadores conectados a ella y en una lista de red puede querer ordenar los nombres de red y dentro de una red también puede querer ordenar los nombres de pieza, y así sucesivamente. Tenga en cuenta el uso de la palabra clave numérica en las matrices de cadenas. Esto hace que las cadenas se ordenen de forma que se tenga en cuenta una pieza numérica al final de las cadenas, lo que conduce a IC1, IC2,... IC9, IC10 en lugar del orden alfabético IC1, IC10, IC2,...IC9.
Al ordenar un conjunto de matrices, la primera matriz (índice) debe ser de tipo int y no es necesario iniciarla. Cualquier contenido que la matriz de índice pueda tener antes de llamar a la función de clasificación se sobrescribirá con los valores de índice resultantes.
status()
Función
Muestra un mensaje de estado en la barra de estado.
Sintaxis
void status(string message);Consulte también dlgMessageBox()
La función de estado muestra el mensaje especificado en la barra de estado de la ventana del editor en la que se está ejecutando el ULP.
system()
Función
Ejecuta un programa externo.
Sintaxis
int system(string command);Devuelve
La función del sistema devuelve el estado de salida del comando. Normalmente, este valor es 0 si todo estaba bien y distinto de cero en caso de error.
La función del sistema ejecuta el programa externo proporcionado por la cadena de comandos y espera hasta que finalice el programa.
Redirección de entrada/salida
Si el programa externo lee su entrada estándar de un archivo determinado (o escribe su salida estándar en él), es necesario redirigir la entrada/salida.
En Linux y Mac OS X, esto se realiza simplemente añadiendo un “<” o “>” a la línea de comandos, seguido del nombre de archivo deseado, como en
system("program < infile > outfile");que ejecuta el programa y lo hace leer desde archivo de entrada y escribir en archivo de salida.
En Windows, debe ejecutar explícitamente un procesador de comandos para ello, como en
system("cmd.exe /c program < infile > outfile");(en sistemas Windows basados en DOS, utilice command.com en lugar de cmd.exe).
Ejecución en segundo plano
La función del sistema espera hasta que finaliza el programa especificado. Esto resulta útil para programas que solo se ejecutan durante unos segundos o que captan completamente la atención del usuario.
Si un programa externo se ejecuta durante más tiempo y desea que la llamada del sistema se devuelva inmediatamente, sin esperar a que finalice el programa, puede simplemente añadir un "&" a la cadena de comandos en Linux y Mac OS X, como en
system("program &");En Windows, debe ejecutar explícitamente un procesador de comandos para realizar esto, como en
system("cmd.exe /c start program");(en sistemas Windows basados en DOS, utilice command.com en lugar de cmd.exe).
Ejemplo
int result = system("simulate -f filename");Esto llamaría a un programa de simulación, dándole un archivo que el ULP acaba de crear. Tenga en cuenta que la simulación aquí solo es un ejemplo, no es parte del paquete de EAGLE.
Si desea tener control sobre los comandos del sistema que se ejecutan realmente, puede escribir una función contenedora que solicite confirmación al usuario antes de ejecutar el comando, como
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");Conversiones de unidades
Función
Convierte unidades internas.
Sintaxis
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);Devuelve
u2inch devuelve el valor de n en pulgadas.
u2mic devuelve el valor de n en micras (1/1000 mm).
u2mil devuelve el valor de n en milipulgadas (1/1000 pulgadas).
u2mm devuelve el valor de n en milímetros.
inch2u devuelve el valor de n (en pulgadas) como unidades internas.
mic2u devuelve el valor de n (en micras) como unidades internas.
mil2u devuelve el valor de n (en milipulgadas) como unidades internas.
mm2u devuelve el valor de n (en milímetros) como unidades internas.
Consulte también UL_GRID
EAGLE almacena todos los valores de coordenadas y tamaño como valores enteros con una resolución de 1/320000 mm (0,003125 µ). Las funciones de conversión de unidades anteriores se pueden utilizar para convertir estas unidades internas a las unidades de medida deseadas y viceversa.
Ejemplo
board(B) {
B.elements(E) {
printf("%s at (%f, %f)\n", E.name,
u2mm(E.x), u2mm(E.y));
}
}Las funciones de red se utilizan para acceder a sitios remotos en Internet.
neterror()
Función
Devuelve el mensaje de error de la llamada de función de red más reciente.
Sintaxis
string neterror(void);Devuelve
neterror devuelve un mensaje de texto que describe el error que se produjo en la llamada más reciente a una función de red.
Si no se ha producido ningún error, el valor devuelto es una cadena vacía.
Consulte también netget, netpost
Se debe llamar a la función neterror después de que cualquiera de las otras funciones de red haya devuelto un valor negativo, lo que indica que se ha producido un error. El valor devuelto de neterror es una cadena de texto que se puede presentar al usuario.
Para los errores relacionados con las conexiones SSL (HTTPS), tenga en cuenta también la nota de netget.
Ejemplo
string Result;
if (netget(Result, "http://web.cadsoft.de/cgi-bin/http-test?see=me&hear=them") >= 0) {
// process Result
}
else
dlgMessageBox(neterror());netget()
Función
Realiza una solicitud GET en la red.
Sintaxis
int netget(dest, string url[, int timeout]);Devuelve
netget devuelve el número de objetos leídos de la red. El significado real del valor devuelto depende del tipo de dest.
En caso de error, se devuelve un valor negativo y se puede llamar a neterror() para mostrar un mensaje de error al usuario.
Consulte también netpost, neterror, fileread
La función netget envía la dirección URL especificada a la red y almacena el resultado en la variable dest. Si no se ha producido ninguna actividad de red durante segundos de tiempo de espera, la conexión se interrumpirá. El tiempo de espera por defecto es de 20 segundos.
La dirección URL debe contener el protocolo que se va a utilizar (HTTP, HTTPS o FTP) y puede contener pares de parámetros name=value, como en
http://web.cadsoft.de/cgi-bin/http-test?see=me&hear=them
ftp://ftp.cadsoft.de/eagle/userfiles/READMESi se requiere un ID de usuario y una contraseña para acceder a un sitio remoto, estos se pueden proporcionar como
https://userid:password@www.site.com/...Si dest es una matriz de caracteres, el resultado se tratará como datos binarios sin procesar y el valor devuelto reflejará el número de bytes almacenados en la matriz de caracteres.
Si dest es una matriz de cadenas, el resultado se tratará como datos de texto (una línea por miembro de la matriz) y el valor devuelto será el número de líneas almacenadas en la matriz de cadenas. Los caracteres de nueva línea se eliminarán.
Si dest es una cadena, el resultado se almacenará en esa cadena y el valor devuelto será la longitud de la cadena. Tenga en cuenta que en el caso de datos binarios, el resultado se trunca en la primera aparición de un byte con el valor 0x00.
Si necesita utilizar un proxy para acceder a Internet con HTTP o HTTPS, puede configurarlo en el cuadro de diálogo "Configurar", en "Ayuda/Buscar actualización", en el Panel de control.
Conexiones SSL
Para las conexiones SSL (solicitud por HTTPS), se necesitan certificados, que pueden no ser válidos o haber caducado en algunos sistemas. La conexión falla y, a continuación, aparece un mensaje de error que indica que se puede consultar con neterror(). Con este mensaje de error, debería ser posible instalar los certificados que faltan o actualizar los certificados caducados y hacer que la conexión funcione de esta manera. Depende de cómo lo haga su sistema (en Windows, por ejemplo, a través del Panel de control/Opciones de Internet, etc.).
Ejemplo
string Result;
if (netget(Result, "http://web.cadsoft.de/cgi-bin/http-test?see=me&hear=them") >= 0) {
// process Result
}
else
dlgMessageBox(neterror());netpost()
Función
Realiza una solicitud POST en la red.
Sintaxis
int netpost(dest, string url, string data[, int timeout[, string content_type] ]);Devuelve
netpost devuelve el número de objetos leídos de la red. El significado real del valor devuelto depende del tipo de dest. En caso de error, se devuelve un valor negativo y se puede llamar a neterror() para mostrar un mensaje de error al usuario.
Consulte también netget, neterror, fileread
La función netpost envía los datos especificados a la dirección URL especificada de la red y almacena el resultado en la variable dest.
Si no se ha producido ninguna actividad de red durante segundos de tiempo de espera, la conexión se interrumpirá. El tiempo de espera por defecto es de 20 segundos.
Si se especifica content_type, este sobrescribe el tipo de contenido por defecto "text/html; charset=utf-8". La dirección URL debe contener el protocolo que se va a utilizar (HTTP o HTTPS).
Si se requiere un ID de usuario y una contraseña para acceder a un sitio remoto, estos se pueden proporcionar como
https://userid:password@www.secret-site.com/...Si dest es una matriz de caracteres, el resultado se tratará como datos binarios sin procesar y el valor devuelto reflejará el número de bytes almacenados en la matriz de caracteres.
Si dest es una matriz de cadenas, el resultado se tratará como datos de texto (una línea por miembro de la matriz) y el valor devuelto será el número de líneas almacenadas en la matriz de cadenas. Los caracteres de nueva línea se eliminarán.
Si dest es una cadena, el resultado se almacenará en esa cadena y el valor devuelto será la longitud de la cadena. Tenga en cuenta que en el caso de datos binarios, el resultado se trunca en la primera aparición de un byte con el valor 0x00.
Si necesita utilizar un proxy para acceder a Internet con HTTP o HTTPS, puede configurarlo en el cuadro de diálogo "Configurar", en "Ayuda/Buscar actualización", en el Panel de control.
Si tiene problemas relacionados con las conexiones SSL (HTTPS), tenga en cuenta la nota de netget.
Ejemplo
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());Las funciones de impresión se utilizan para imprimir cadenas con formato.
printf()
Función
Escribe una salida con formato en un archivo.
Sintaxis
int printf(string format[, argument, ...]);Devuelve
La función printf devuelve el número de caracteres escritos en el archivo que se ha abierto con la sentencia de salida más reciente. En caso de error, printf devuelve -1.
Consulte también sprintf, output, fileerror
Cadena de formato
La cadena de formato controla cómo se convertirán, formatearán e imprimirán los argumentos. Para el formato, debe haber exactamente tantos argumentos como sean necesarios. El número y el tipo de argumentos se comprobarán con el formato y cualquier discrepancia generará un mensaje de error. La cadena de formato contiene dos tipos de objetos: caracteres normales y especificadores de formato.
Especificadores de formato
Un especificador de formato se representa así:
% [flags] [width] [.prec] typeCada especificación de formato comienza con el carácter de porcentaje (%). Después de que aparezca %, lo siguiente va en este orden:
an optional sequence of flag characters, [flags]
an optional width specifier, [width]
an optional precision specifier, [.prec]
the conversion type character, typeCaracteres de tipo de conversión
| d | entero decimal con signo |
| o | entero octal sin signo |
| u | entero decimal sin signo |
| x | entero hexadecimal sin signo (con a, b,...) |
| X | entero hexadecimal sin signo (con A, B,...) |
| f | valor real con signo de la forma [-]dddd.dddd |
| e | valor real con signo de la forma [-]d.dddde[±]ddd |
| E | igual que e, pero con E como exponente |
| g | valor real con signo en forma e o f, basado en el valor y la precisión dados |
| G | igual que g, pero con E como exponente si se utiliza el formato e |
| c | carácter único |
| s | cadena de caracteres |
| % | se imprime el carácter % |
Caracteres de indicador
Los siguientes caracteres de indicador pueden aparecer en cualquier orden y combinación:
| "-" | el elemento con formato se justifica a la izquierda en el campo; normalmente, los elementos se justifican a la derecha |
| "+" | un elemento con signo positivo siempre comienza con un carácter más (+); normalmente, solo los elementos negativos comienzan con un signo |
| " " | un elemento con signo positivo siempre comienza con un carácter de espacio; si se especifican "+" y " ", "+" modifica " " |
Especificadores de anchura
El especificador de anchura establece la anchura mínima de campo para un valor de salida.
La anchura se especifica directamente, mediante una cadena de dígitos decimales o indirectamente, mediante un asterisco (*). Si utiliza un asterisco para el especificador de anchura, el argumento anterior (que debe ser un entero) al que se está formateando (con este especificador de formato) determina la anchura mínima del campo de salida.
En ningún caso una anchura de campo pequeña o inexistente provoca el truncamiento de un campo. Si el resultado de una conversión es más ancho que la anchura del campo, el campo se expande para contener el resultado de la conversión.
| n | Se imprimen al menos n caracteres. Si el valor de salida tiene menos de n caracteres, la salida se rellena con espacios en blanco (se rellena a la derecha si se proporciona el indicador "-", de lo contrario se rellena a la izquierda). |
| 0n | Se imprimen al menos n caracteres. Si el valor de salida tiene menos de n caracteres, se rellena a la izquierda con ceros. |
| * | La lista de argumentos proporciona el especificador de anchura, que debe preceder al argumento real al que se va a aplicar formato. |
Especificadores de precisión
Un especificador de precisión siempre comienza con un punto (.) para separarlo de cualquier especificador de anchura anterior. A continuación, al igual que la anchura, la precisión se especifica directamente mediante una cadena de dígitos decimales o indirectamente mediante un asterisco (*). Si utiliza un asterisco para el especificador de precisión, el argumento anterior (que debe ser un entero) al que se está formateando (con este especificador de formato) determina la precisión.
| ninguna | Precisión establecida en el valor por defecto. |
| ,0 | Para los tipos int, la precisión se establece en el valor por defecto; para los tipos real, no se imprime ningún separador decimal. |
| ,n | Se imprimen n caracteres o n decimales. Si el valor de salida tiene más de n caracteres, la salida se puede truncar o redondear (según el carácter de type). |
| * | La lista de argumentos proporciona el especificador de precisión, que debe preceder al argumento real al que se va a aplicar formato. |
Valores de precisión por defecto
| douxX | 1 |
| eEf | 6 |
| gG | todos los dígitos significativos |
| c | no hay ningún efecto |
| s | imprimir cadena completa |
Cómo afecta la especificación de precisión (.n) a la conversión
| douxX | .n especifica que se imprimirán al menos n caracteres. Si el argumento de entrada tiene menos de n dígitos, el valor de salida se rellena a la izquierda con ceros. Si el argumento de entrada tiene más de n dígitos, el valor de salida no se trunca. |
| eEf | .n especifica que no se imprimirán caracteres después del punto decimal y que se redondeará el último dígito impreso. |
| gG | .n especifica que se imprimirán como máximo n dígitos significativos. |
| c | .n no tiene ningún efecto en la salida. |
| s | .n especifica que no se imprimirán más de n caracteres. |
Caracteres cero binarios
A diferencia de sprintf, la función printf puede imprimir caracteres binarios cero (0x00).
char c = 0x00;
printf("%c", c);Ejemplo
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()
Función
Escribe una salida con formato en una cadena.
Sintaxis
int sprintf(string result, string format[, argument, ...]);Devuelve
La función sprintf devuelve el número de caracteres escritos en la cadena de resultados. En caso de error, sprintf devuelve -1.
Consulte también printf
Cadena de formato
Consulte printf.
Caracteres cero binarios
Tenga en cuenta que sprintf no puede devolver cadenas con caracteres cero binarios insertados (0x00). Si la cadena resultante contiene un carácter cero binario, se descartarán todos los caracteres que sigan a ese carácter cero. Utilice printf si necesita generar datos binarios.
Ejemplo
string result;
int number = 42;
sprintf(result, "The number is %d", number);Las funciones de cadena se utilizan para manipular cadenas de caracteres.
Están disponibles las siguientes funciones de cadena:
strchr()
strjoin()
strlen()
strlwr()
strrchr()
strrstr()
strsplit()
strstr()
strsub()
strtod()
strtol()
strupr()
strxstr()strchr()
Función
Busca la primera aparición de un carácter determinado en una cadena.
Sintaxis
int strchr(string s, char c[, int index]);Devuelve
La función strchr devuelve el desfase del entero del carácter de la cadena o -1 si el carácter no se encuentra en la cadena.
Consulte también strrchr, strstr
Si se indica index, la búsqueda comienza en esa posición. Los valores negativos se cuentan desde el final de la cadena.
Ejemplo
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()
Función
Une una matriz de cadenas para formar una sola cadena.
Sintaxis
string strjoin(string array[], char separator);Devuelve
La función strjoin devuelve las entradas combinadas de la matriz.
Consulte también strsplit, lookup, fileread
strjoin une todas las entradas de la matriz, delimitadas por el separador especificado y devuelve la cadena resultante.
Si el separador es el carácter de nueva línea ('\n'), la cadena resultante se terminará con un carácter de nueva línea. Esto se realiza para tener un archivo de texto que conste de N líneas (cada una de las cuales termina con una nueva línea) y se lee con la función fileread() y se divide en una matriz de N cadenas para unirlas a la cadena original como se lee del archivo.
Ejemplo
string a[] = { "Field 1", "Field 2", "Field 3" };
string s = strjoin(a, ':');strlen()
Función
Calcula la longitud de una cadena.
Sintaxis
int strlen(string s);Devuelve
La función strlen devuelve el número de caracteres de la cadena.
Ejemplo
string s = "This is a string";
int l = strlen(s);
printf("The string is %d characters long\n", l);strlwr()
Función
Convierte las letras mayúsculas de una cadena en minúsculas.
Sintaxis
string strlwr(string s);Devuelve
La función strlwr devuelve la cadena modificada. La cadena original (especificada como parámetro) no se modifica.
Consulte también strupr, tolower
Ejemplo
string s = "This Is A String";
string r = strlwr(s);
printf("Prior to strlwr: %s - after strlwr: %s\n", s, r);strrchr()
Función
Busca la última aparición de un carácter determinado en una cadena.
Sintaxis
int strrchr(string s, char c[, int index]);Devuelve
La función strchr devuelve el desfase del entero del carácter de la cadena o -1 si el carácter no se encuentra en la cadena.
Consulte también strchr, strrstr
Si se indica index, la búsqueda comienza en esa posición. Los valores negativos se cuentan desde el final de la cadena.
Ejemplo
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()
Función
Busca la última aparición de una subcadena determinada en una cadena.
Sintaxis
int strrstr(string s1, string s2[, int index]);Devuelve
La función strrstr devuelve el desfase de entero del primer carácter de s2 en s1 o -1 si la subcadena no se encuentra en la cadena.
Consulte también strstr, strrchr
Si se indica index, la búsqueda comienza en esa posición. Los valores negativos se cuentan desde el final de la cadena.
Ejemplo
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()
Función
Divide una cadena en campos independientes.
Sintaxis
int strsplit(string &array[], string s, char separator);
Devuelve
La función strsplit devuelve el número de entradas copiadas en la matriz.
Consulte también strjoin, lookup, fileread
strsplit divide la cadena s en el separador indicado y almacena los campos resultantes en la matriz.
Si el separador es el carácter de nueva línea (“\n”), el último campo se eliminará de forma silenciosa si está vacío. Esto se realiza para tener un archivo de texto que consta de N líneas (cada una de las cuales termina con una nueva línea) y se lee con la función fileread() para dividirlo en una matriz de N cadenas. Con cualquier otro separador, un campo vacío al final de la cadena se contará, por lo que "a:b:c:" dará como resultado 4 campos, el último de los cuales está vacío.
Ejemplo
string a[];
int n = strsplit(a, "Field 1:Field 2:Field 3", ':');strstr()
Función
Busca la primera aparición de una subcadena determinada en una cadena.
Sintaxis
int strstr(string s1, string s2[, int index]);Devuelve
La función strstr devuelve el desfase de entero del primer carácter de s2 en s1 o -1 si la subcadena no se encuentra en la cadena.
Consulte también strrstr, strchr, strxstr
Si se indica index, la búsqueda comienza en esa posición. Los valores negativos se cuentan desde el final de la cadena.
Ejemplo
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()
Función
Extrae una subcadena de una cadena.
Sintaxis
string strsub(string s, int start[, int length]);
Devuelve
La función strsub devuelve la subcadena indicada por los valores start y length. El valor de length debe ser positivo; de lo contrario, se devolverá una cadena vacía. Si se omite length, se devuelve el resto de la cadena (comenzando en start).
Si start señala a una posición fuera de la cadena, se devuelve una cadena vacía.
Ejemplo
string s = "This is a string";
string t = strsub(s, 4, 7);
printf("The extracted substring is: %s\n", t);strtod()
Función
Convierte una cadena en un valor real.
Sintaxis
real strtod(string s);Devuelve
La función strtod devuelve la representación numérica de la cadena especificada como un valor real. La conversión termina en el primer carácter que no se ajusta al formato de una constante real. Si se produce un error durante la conversión de la cadena 0.0, se devolverá.
Consulte también strtol
Ejemplo
string s = "3.1415";
real r = strtod(s);
printf("The value is %f\n", r);strtol()
Función
Convierte una cadena en un valor entero.
Sintaxis
int strtol(string s);Devuelve
La función strtol devuelve la representación numérica de la cadena especificada como un valor entero. La conversión termina en el primer carácter que no se ajusta al formato de una constante de un entero. Si se produce un error durante la conversión de la cadena, se devuelve 0.
Consulte también strtod
Ejemplo
string s = "1234";
int i = strtol(s);
printf("The value is %d\n", i);strupr()
Función
Convierte las letras minúsculas de una cadena en mayúsculas.
Sintaxis
string strupr(string s);Devuelve
La función strupr devuelve la cadena modificada. La cadena original (especificada como parámetro) no se modifica.
Consulte también strlwr, toupper
Ejemplo
string s = "This Is A String";
string r = strupr(s);
printf("Prior to strupr: %s - after strupr: %s\n", s, r);strxstr()
Función
Busca la primera aparición de una expresión regular determinada en una cadena.
Sintaxis
int strxstr(string s1, string s2[, int index[, int &length]]);Devuelve
La función strxstr devuelve el desfase de entero de la subcadena en s1 que coincide con la expresión regular en s2 o -1 si la expresión regular no coincide en la cadena.
Consulte también strstr, strchr, strrstr
Si se indica index, la búsqueda comienza en esa posición. Los valores negativos se cuentan desde el final de la cadena.
Si se indica length, la longitud real de la subcadena coincidente se devuelve en esa variable.
Las expresiones regulares permiten buscar un patrón dentro de una cadena de texto. Por ejemplo, la expresión regular "i.*a" buscaría una secuencia de caracteres que comenzara con una “i”, seguida de cualquier carácter (“.”) tantas veces como sea necesario (“*”) y terminara con una “a”. Coincidiría con "es a" y "es esta a" o "ia". Por ejemplo, en el libro Mastering Regular Expressions de Jeffrey E. F. se pueden encontrar detalles sobre expresiones regulares. Friedl.
Ejemplo
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");Las funciones URN se utilizan para procesar URN.
urnbase()
Función
Extrae el URN base de una cadena URN.
Sintaxis
string urnbase(string urn);Devuelve
La función urnbase devuelve el URN base del URN proporcionado, es decir, el URN sin versión final o /. Por ejemplo, el URN base de "urn:adsk.eagle:footprint:123/4" es "urn:adsk.eagle:footprint:123". Si no hay ninguna versión, se devolverá la cadena de entrada.
Ejemplo
string urn = "urn:adsk.eagle:footprint:123/4";
string base = urnbase(urn);
printf("The base URN is: %s\n", base);urnversion()
Función
Extrae la versión de una cadena URN.
Sintaxis
int urnversion(string urn);Devuelve
La función urnversion devuelve la versión del URN proporcionado, es decir, el número que sigue a /. Si no hay ninguna versión, se devuelve -1.
Ejemplo
string urn = "urn:adsk.eagle:footprint:123/4";
int version = urnversion(urn);
printf("The URN version is: %d\n", version);Las funciones de hora se utilizan para obtener y procesar información de fecha y hora.
Están disponibles las siguientes funciones de hora:
sleep()
t2day()
t2dayofweek()
t2hour()
t2minute()
t2month()
t2second()
t2string()
t2year()
time()
timems()time()
Función
Obtiene la hora actual del sistema.
Sintaxis
int time(void);Devuelve
La función de hora devuelve la hora actual del sistema como el número de segundos transcurridos desde una fecha de referencia dependiente del sistema.
Consulte también Conversiones horarias, filetime, timems()
Ejemplo
int CurrentTime = time();timems()
Función
Obtiene el número de milisegundos desde el inicio del ULP.
Sintaxis
int timems(void);Devuelve
La función timems devuelve el número de milisegundos desde el inicio del ULP. Después de 86 400 000 milisegundos (es decir, cada 24 horas), el valor comienza de nuevo en 0.
Consulte también time
Ejemplo
int elapsed = timems();Conversiones de hora
Función
Convertir un valor de hora en día, mes, año, etc.
Sintaxis
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]);Devuelve
*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 timeConsulte también time
La función t2string sin el parámetro de formato opcional convierte la hora t especificada en una cadena específica del país en su hora local.
Si se llama a t2string con una cadena de formato, ese formato se utiliza para determinar el aspecto que debería tener el resultado.
Las siguientes expresiones se pueden utilizar en una cadena de formato:
| d | el día como un número sin un cero a la izquierda (1 a 31) |
| dd | el día como un número con un cero a la izquierda (01 a 31) |
| ddd | el nombre del día localizado abreviado (p. ej. "Mon" a "Sun") |
| dddd | el nombre del día localizado largo (p. ej. "Monday" a "Sunday") |
| M | el mes como número sin un cero a la izquierda (1-12) |
| MM | el mes como un número con un cero a la izquierda (01-12) |
| MMM | el nombre abreviado del mes localizado (p. ej. "Jan" a "Dec") |
| MMMM | el nombre del mes localizado largo (p. ej. "January" a "December") |
| yy | el año como número de dos dígitos (00-99) |
| yyyy | el año como número de cuatro dígitos |
| h | la hora sin un cero a la izquierda (0 a 23 o 1 a 12 si se muestra a.m./p.m.) |
| hh | la hora con un cero a la izquierda (00 a 23 o 01 a 12 si se muestra a.m./p.m.) |
| m | el minuto sin un cero a la izquierda (0 a 59) |
| mm | el minuto con un cero a la izquierda (00 a 59) |
| s | el segundo sin un cero a la izquierda (0 a 59) |
| ss | el segundo con un cero a la izquierda (00 a 59) |
| z | los milisegundos sin ceros a la izquierda (siempre son 0, ya que el tiempo especificado solo tiene resolución de un segundo) |
| zzz | los milisegundos con ceros a la izquierda (siempre son 000, ya que el tiempo especificado solo tiene resolución de un segundo) |
| AP | usar visualización AM/PM (AP se reemplazará por "AM" o "PM") |
| ap | usar la visualización am/pm (ap se reemplazará por "am" o "pm") |
| U | mostrar el tiempo especificado como UTC (debe ser el primer carácter; el valor por defecto es la hora local) |
Todos los demás caracteres se copiarán "tal cual". Cualquier secuencia de caracteres que se encierre entre comillas simples se tratará como texto y no se utilizará como expresión. Dos comillas simples consecutivas ('') se reemplazan por una comilla simple en la salida.
Ejemplo
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"));Las funciones de objeto se utilizan para acceder a información común sobre los objetos.
Están disponibles las siguientes funciones de objeto:
clrgroup()
ingroup()
setgroup()
setvariant()
variant()clrgroup()
Función
Borra los indicadores de grupo de un objeto.
Sintaxis
void clrgroup(object);Consulte también ingroup(), setgroup(), comando GROUP
La función clrgroup() borra los indicadores de grupo del objeto especificado, de modo que ya no forma parte del grupo definido previamente.
Cuando se aplica a un objeto que contiene otros objetos (como UL_BOARD o UL_NET), los indicadores de grupo de todos los objetos contenidos se borran de forma recurrente, pero con limitaciones análogas como en setgroup().
Ejemplo
board(B) {
B.elements(E)
clrgroup(E);
}ingroup()
Función
Comprueba si un objeto está en el grupo.
Sintaxis
int ingroup(object);Devuelve
La función ingroup devuelve un valor distinto de cero si el objeto especificado está en el grupo.
Consulte también clrgroup(), setgroup(), comando GROUP
Si se ha definido un grupo en el editor, la función ingroup() se puede utilizar para comprobar si un objeto concreto forma parte del grupo.
Los objetos con una sola coordenada que se pueden seleccionar individualmente en el dibujo actual (como UL_TEXT, UL_VIA, UL_CIRCLE, etc.) devuelven un valor distinto de cero en una llamada a ingroup() si esa coordenada se encuentra dentro del grupo definido.
Un UL_WIRE devuelve 0, 1, 2 o 3, dependiendo de si ninguno, el primero, el segundo o ambos puntos finales están en el grupo.
Un UL_RECTANGLE y UL_FRAME devuelven un valor distinto de cero si una o varias de sus esquinas están en el grupo. El valor tiene el bit 0 establecido para la esquina superior derecha, el bit 1 para la esquina superior izquierda, el bit 2 para la esquina inferior izquierda y el bit 3 para la esquina inferior derecha.
Los objetos de clasificación superior que no tienen coordenadas (UL_NET, UL_SEGMENT, UL_SIGNAL, UL_POLYGON) o que no están disponibles como objetos de dibujo (UL_SHEET, UL_DEVICESET, UL_SYMBOL, UL_FOOTPRINT) devuelven un valor distinto de cero si uno o varios de los objetos que contienen están en el grupo. Para obtener más información sobre las jerarquías de objetos, consulte Tipos de objetos.
UL_CONTACTREF y UL_PINREF, aunque no tengan coordenadas propias, devuelven un valor distinto de cero si el UL_CONTACT o el UL_PIN referenciados, respectivamente, se encuentran dentro del grupo. Para otros objetos que no se pueden seleccionar como UL_GRID, UL_VARIANT o cables de un objeto UL_TEXT o UL_FRAME, el comportamiento de ingroup() no está definido y, por tanto, no se debe utilizar.
Identificación del objeto del menú contextual
Si el ULP se inicia desde un menú contextual, el mecanismo de grupo puede acceder al objeto seleccionado. Un grupo de elementos se compone del objeto seleccionado. Por lo tanto, se puede identificar con ingroup(). (consulte también SET y RUN).
Ejemplo
output("group.txt") {
board(B) {
B.elements(E) {
if (ingroup(E))
printf("Element %s is in the group\n", E.name);
}
}
}setgroup()
Función
Define los indicadores de grupo de un objeto.
Sintaxis
void setgroup(object[, int flags]);Consulte también clrgroup(), ingroup(), comando GROUP
La función setgroup() establece los indicadores de grupo del objeto especificado, de modo que pase a formar parte del grupo.
Si no hay ningún indicador, el objeto se añade al grupo en su conjunto (es decir, todos sus puntos de selección, en caso de que tenga más de uno).
Si los indicadores tienen un valor distinto de cero, solo se establecen los indicadores de grupo de los puntos especificados del objeto. Para un UL_WIRE, esto significa que “1” establece el indicador de grupo del primer punto, “2” el del segundo punto y “3” establece ambos. Los indicadores de grupo previamente definidos permanecen sin cambios mediante una llamada a setgroup().
Cuando se aplica a un objeto que contiene otros objetos (como un UL_BOARD o UL_NET), los indicadores de grupo de todos los objetos contenidos se establecen de forma recursiva con las siguientes limitaciones:
No es el caso de UL_LIBRARY y UL_SCHEMATIC. Los objetos de coordenadas que no se pueden seleccionar o que no se pueden seleccionar individualmente no se marcan (por ejemplo, objetos UL_GRID o UL_VARIANT o cables de objetos UL_TEXT o UL_FRAME).
Para obtener más información sobre las jerarquías de objetos, consulte Tipos de objetos.
Ejemplo
board(B) {
B.elements(E)
setgroup(E);
}setvariant()
Función
Define la variante de ensamblaje actual.
Sintaxis
int setvariant(string name);Consulte también variant(), UL_VARIANTDEF, comando VARIANT
La función setvariant() establece la variante de ensamblaje actual en la especificada por nombre. Se puede utilizar para crear un bucle en todas las piezas y “ver” sus datos exactamente como se ha definido en la variante especificada.
El nombre debe hacer referencia a una variante de ensamblaje válida contenida en el dibujo actual.
Esta función devuelve un valor distinto de cero si existe la variante de ensamblaje especificada; de lo contrario, devuelve cero.
La variante de ensamblaje que se ha definido mediante una llamada a setvariant() solo está activa hasta que se devuelve el programa de idioma del usuario. A continuación, la variante del dibujo será la misma que la de antes del inicio del ULP.
La configuración de la variante de ensamblaje en una placa solo es posible si se carga el esquema correspondiente.
Ejemplo
if (setvariant("My variant")) {
// do something ...
else
// error: unknown variantvariant()
Función
Consulte la variante de ensamblaje actual.
Sintaxis
string variant(void);Consulte también setvariant(), UL_VARIANTDEF, comando VARIANT
La función variant() devuelve el nombre de la variante de ensamblaje actual. Si no hay ninguna variante seleccionada, se devuelve la cadena vacía ('').
Ejemplo
string CurrentVariant = variant();Las funciones XML se utilizan para procesar datos XML (Extensible Markup Language). Están disponibles las siguientes funciones XML:
xmlattribute()
xmlattributes()
xmlelement()
xmlelements()
xmltags()
xmltext()xmlattribute(), xmlattributes()
Función
Extraer los atributos de una etiqueta XML.
Sintaxis
string xmlattribute(string xml, string tag, string attribute);
int xmlattributes(string &array[], string xml, string tag);Consulte también xmlelement(), xmltags(), xmltext()
La función xmlattribute devuelve el valor del atributo especificado de la etiqueta especificada en el código XML especificado. Si un atributo aparece más de una vez en la misma etiqueta, se toma el valor de su última aparición.
La función xmlattributes almacena los nombres de todos los atributos de la etiqueta especificada dentro del código xml especificado en la matriz y devuelve el número de atributos encontrados. El orden no es necesariamente el mismo que en el código XML especificado. Si un atributo aparece más de una vez en la misma etiqueta, su nombre aparece solo una vez en la matriz.
La etiqueta se proporciona en forma de ruta.
Si el código XML especificado contiene un error, el resultado de cualquier función XML está vacío y se abre un cuadro de diálogo de advertencia al usuario, que proporciona información sobre dónde se produjo el error en el código ULP y XML. Tenga en cuenta que el número de línea y columna del código XML hace referencia a la cadena real que se le ha asignado a esta función como parámetro xml.
Ejemplo
// 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()
Función
Extraer elementos de un código XML.
Sintaxis
string xmlelement(string xml, string tag);
int xmlelements(string &array[], string xml, string tag);Consulte también xmltags(), xmlattribus(), xmltext()
La función xmlelement devuelve el elemento XML completo de la etiqueta especificada en el código XML especificado. El resultado sigue conteniendo la etiqueta XML exterior del elemento y, por tanto, se puede utilizar para seguir procesando con las otras funciones XML. Se conservan todos los espacios en blanco dentro de las partes de texto sin formato del elemento. Sin embargo, el formato global de las etiquetas XML del elemento y el orden de los atributos de elemento pueden ser diferentes del código XML original. Si hay más de una aparición de etiqueta en xml, se devolverá la primera. Utilice xmlelements si desea obtener todas las apariciones.
La función xmlelements funciona igual que xmlelement, pero devuelve todas las apariciones de elementos con la etiqueta especificada. El valor devuelto es el número de elementos almacenados en la matriz.
La etiqueta se proporciona en forma de ruta.
Si el código XML especificado contiene un error, el resultado de cualquier función XML está vacío y se abre un cuadro de diálogo de advertencia al usuario, que proporciona información sobre dónde se produjo el error en el código ULP y XML. Tenga en cuenta que el número de línea y columna del código XML hace referencia a la cadena real que se le ha asignado a esta función como parámetro xml.
Ejemplo
// 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()
Función
Extraer la lista de nombres de etiqueta dentro de un código XML.
Sintaxis
int xmltags(string &array[], string xml, string tag);Consulte también xmlelement(), xmlattribus(), xmltext()
La función xmltags devuelve los nombres de todas las etiquetas en el nivel superior de la etiqueta especificada dentro del código XML especificado. El valor devuelto es el número de nombres de etiqueta almacenados en la matriz.
Cada nombre de etiqueta se devuelve una sola vez, aunque aparezca varias veces en el código XML.
La etiqueta se proporciona en forma de ruta.
Si el código XML especificado contiene un error, el resultado de cualquier función XML está vacío y se abre un cuadro de diálogo de advertencia al usuario, que proporciona información sobre dónde se produjo el error en el código ULP y XML. Tenga en cuenta que el número de línea y columna del código XML hace referencia a la cadena real que se le ha asignado a esta función como parámetro xml.
Ejemplo
//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()
Función
Extraer los datos textuales de un elemento XML.
Sintaxis
string xmltext(string xml, string tag);Consulte también xmlelement(), xmlattribus(), xmltags()
La función xmltext devuelve los datos textuales de la etiqueta especificada en el código XML especificado.
Se eliminan todas las etiquetas del texto, se conservan los espacios en blanco (incluidos los caracteres de nueva línea).
La etiqueta se proporciona en forma de ruta.
Si el código XML especificado contiene un error, el resultado de cualquier función XML está vacío y se abre un cuadro de diálogo de advertencia al usuario, que proporciona información sobre dónde se produjo el error en el código ULP y XML. Tenga en cuenta que el número de línea y columna del código XML hace referencia a la cadena real que se le ha asignado a esta función como parámetro xml.
Ejemplo
// 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 "Las sentencias integradas se utilizan normalmente para abrir un contexto determinado en el que se puede acceder a los archivos o las estructuras de datos. La sintaxis general de una sentencia integrada es
name(parameters) statementdonde name es el nombre de la sentencia integrada, parameters significa uno o más parámetros y statement es el código que se ejecutará dentro del contexto abierto por la sentencia integrada.
Tenga en cuenta que la sentencia puede ser una sentencia compuesta, como en
board(B) {
B.elements(E) printf("Element: %s\n", E.name);
B.Signals(S) printf("Signal: %s\n", S.name);
}Están disponibles las siguientes sentencias internas:
Función
Abre un contexto de placa.
Sintaxis
board(identifier) statementConsulte también schematic, library
La sentencia board abre un contexto de placa si la ventana del editor actual contiene un dibujo de placa. Se crea una variable de tipo UL_BOARD y se le asigna el nombre indicado por el identificador.
Una vez que el contexto de placa se ha abierto correctamente y se ha creado una variable de placa, se ejecuta la sentencia. Dentro del ámbito de la sentencia, se puede acceder a la variable de placa para recuperar más datos de la placa.
Si la ventana del editor actual no contiene un dibujo de placa, aparece un mensaje de error y se cierra el ULP.
Comprobar si hay una placa
Mediante la sentencia board sin argumento, puede comprobar si la ventana del editor actual contiene un dibujo de placa. En ese caso, la placa se comporta como una constante de entero, devolviendo 1 si hay un dibujo de placa en la ventana del editor actual y 0 si no lo hay.
Acceso a la placa desde un esquema
Si la ventana del editor actual contiene un dibujo esquemático, aún puede acceder a la placa del esquema anteponiendo la sentencia de placa al proyecto de prefijo, como en
project.board(B) { ... }De este modo, se abre un contexto de placa, independientemente de si la ventana del editor actual contiene una placa o un dibujo esquemático. Sin embargo, debe haber una ventana de editor que contenga esa placa en algún lugar del escritorio.
Ejemplo
if (board)
board(B) {
B.elements(E)
printf("Element: %s\n", E.name);
}Función
Abre un contexto de conjunto de dispositivos.
Sintaxis
deviceset(identifier) statementConsulte también footprint, symbol, library
La sentencia deviceset abre un contexto de conjunto de dispositivos si la ventana del editor actual contiene un dibujo de dispositivo. Se crea una variable de tipo UL_DEVICESET y se le asigna el nombre indicado por el identificador.
Una vez que el contexto del conjunto de dispositivos se ha abierto correctamente y se ha creado una variable de conjunto de dispositivos, se ejecuta la sentencia. Dentro del ámbito de la sentencia, se puede acceder a la variable de conjunto de dispositivos para recuperar más datos del conjunto de dispositivos.
Si la ventana del editor actual no contiene un dibujo de dispositivo, aparece un mensaje de error y se cierra el ULP.
Comprobar si hay un conjunto de dispositivos
Mediante la sentencia deviceset sin argumento, puede comprobar si la ventana del editor actual contiene un dibujo de dispositivo. En ese caso, el conjunto de dispositivos se comporta como una constante de entero, devolviendo 1 si hay un dibujo de dispositivo en la ventana del editor actual y 0 si no lo hay.
Ejemplo
if (deviceset)
deviceset(D) {
D.gates(G)
printf("Gate: %s\n", G.name);
}Función
Abre un contexto de biblioteca.
Sintaxis
library(identifier) statementConsulte también board, schematic, deviceset, footprint, symbol
La sentencia library abre un contexto de biblioteca si la ventana del editor actual contiene un dibujo de biblioteca. Se crea una variable de tipo UL_LIBRARY y se le asigna el nombre indicado por el identificador.
Una vez que el contexto de biblioteca se ha abierto correctamente y se ha creado una variable de biblioteca, se ejecuta la sentencia. Dentro del ámbito de la sentencia, se puede acceder a la variable de biblioteca para recuperar más datos de la biblioteca.
Si la ventana del editor actual no contiene un dibujo de biblioteca, aparece un mensaje de error y se cierra el ULP.
Comprobar si hay una biblioteca
Si utiliza la sentencia library sin un argumento, puede comprobar si la ventana del editor actual contiene un dibujo de biblioteca. En ese caso, la biblioteca se comporta como una constante de entero, devolviendo 1 si hay un dibujo de biblioteca en la ventana del editor actual y 0 si no lo hay.
Ejemplo
if (library)
library(L) {
L.devices(D)
printf("Device: %s\n", D.name);
}Función
Abre un contexto de módulo.
Sintaxis
module(identifier) statementConsulte también board, library, schematic, sheet
La sentencia module abre un contexto de módulo si la ventana del editor actual contiene un dibujo de módulo. La sentencia module abre un contexto de módulo si en la ventana del editor se edita actualmente un dibujo de módulo. Se crea una variable de tipo UL_MODULE y se le asigna el nombre indicado por el identificador.
Una vez que el contexto del módulo se ha abierto correctamente y se ha creado una variable de módulo, se ejecuta la sentencia. Dentro del ámbito de la sentencia, se puede acceder a la variable de módulo para recuperar más datos del módulo.
Si la ventana del editor actual no contiene un dibujo de módulo, aparece un mensaje de error y se cierra el ULP. Si en la ventana del editor no se edita actualmente ningún dibujo de módulo, aparece un mensaje de error y se cierra el ULP.
Comprobar si hay un módulo
Mediante el uso de la sentencia module sin un argumento, puede comprobar si la ventana del editor actual contiene un dibujo de módulo. En ese caso, el módulo se comporta como una constante de entero, devolviendo 1 si hay un dibujo de módulo en la ventana del editor actual y 0 si no lo hay.
Ejemplo
if (module)
module(M) {
printf("Module: %s\n", M.name);
}Función
Abre un archivo de salida para las llamadas de printf() posteriores.
Sintaxis
output(string filename[, string mode]) statementConsulte también printf, fileerror
La sentencia output abre un archivo con el nombre de archivo y el modo dados para que se pueda generar en las llamadas a printf() posteriores. Si el archivo se ha abierto correctamente, se ejecuta la sentencia y, a continuación, se cierra el archivo.
Si el archivo no se puede abrir, se muestra un mensaje de error y se finaliza la ejecución del ULP.
Por defecto, el archivo de salida se escribe en el directorio Proyecto.
Modos de archivo
El parámetro mode define cómo se abrirá el archivo de salida. Si no se especifica ningún parámetro de modo, el valor por defecto es “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)Los caracteres de modo pueden aparecer en cualquier orden y combinación. Sin embargo, solo el último de a y w o t y b, respectivamente, es significativo. Por ejemplo, un modo de “abtw” abriría un archivo para escritura textual, que sería el mismo que “wt”.
Sentencias de salida anidadas
Las sentencias de salida se pueden anidar, siempre que haya suficientes identificadores de archivo disponibles y siempre que no haya dos sentencias de salida activas que tengan acceso al mismo archivo.
Ejemplo
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");
}Función
Abre un contexto de implantación de componentes.
Sintaxis
footprint(identifier) statement (new as of EAGLE 9.1)Consulte también library, deviceset, symbol
La sentencia footprint abre un contexto de paquete si la ventana del editor actual contiene un dibujo de paquete. Se crea una variable de tipo UL_FOOTPRINT y se le asigna el nombre indicado por el identificador.
Una vez que el contexto de implantación de componentes se ha abierto correctamente y se ha creado una variable footprint, se ejecuta la sentencia. En el ámbito de la sentencia, se puede acceder a la variable footprint para recuperar más datos de implantación de componentes.
Si la ventana del editor actual no contiene un dibujo de implantación de componentes, se muestra un mensaje de error y se finaliza el ULP.
Comprobar si hay implantación de componentes
Si utiliza la sentencia footprint sin un argumento, puede comprobar si la ventana del editor actual contiene un dibujo de implantación de componentes. En ese caso, footprint se comporta como una constante de entero, devolviendo 1 si hay un dibujo de implantación de componentes en la ventana del editor actual y 0 si no lo hay.
Ejemplo
if (footprint)
footprint(F) {
F.contacts(C)
printf("Contact: %s\n", C.name);
}Función
Abre un contexto esquemático.
Sintaxis
schematic(identifier) statementConsulte también board, library, module, sheet
La sentencia schematic abre un contexto esquemático si la ventana del editor actual contiene un dibujo esquemático. Se crea una variable de tipo UL_SCHEMATIC y se le asigna el nombre indicado por el identificador.
Una vez que el contexto esquemático se ha abierto correctamente y se ha creado una variable de esquema, se ejecuta la sentencia. En el ámbito de la sentencia, se puede acceder a la variable de esquema para recuperar más datos del esquema.
Si la ventana del editor actual no contiene un dibujo esquemático, aparece un mensaje de error y se cierra el ULP.
Comprobar si existe un esquema
Mediante la sentencia schematic sin argumento, puede comprobar si la ventana del editor actual contiene un dibujo esquemático. En ese caso, schematic se comporta como una constante de entero, devolviendo 1 si hay un dibujo esquemático en la ventana del editor actual y 0 si no lo hay.
Acceso al esquema desde una placa
Si la ventana del editor actual contiene un dibujo de placa, aún puede acceder al esquema de la placa anteponiendo la sentencia shcematic al proyecto de prefijo, como en
project.schematic(S) { ... }De este modo, se abre un contexto esquemático, independientemente de si la ventana del editor actual contiene un dibujo esquemático o de placa. Sin embargo, debe haber una ventana de editor que contenga el esquema en algún lugar del escritorio.
Acceder al plano actual
Utilice la sentencia sheet para acceder directamente al plano cargado actualmente.
Acceder al módulo actual
Utilice la sentencia module para acceder directamente al módulo editado actualmente.
Ejemplo
if (schematic)
schematic(S) {
S.parts(P)
printf("Part: %s\n", P.name);
}Función
Abre un contexto de plano.
Sintaxis
sheet(identifier) statementConsulte también esquema.
La sentencia sheet abre un contexto de plano si la ventana del editor actual contiene un dibujo de plano. Se crea una variable de tipo UL_SHEET y se le asigna el nombre indicado por el identificador.
Una vez que el contexto de plano se ha abierto correctamente y se ha creado una variable de plano, se ejecuta la sentencia. Dentro del ámbito de la sentencia, se puede acceder a la variable de plano para recuperar más datos del plano.
Si la ventana del editor actual no contiene un dibujo de plano, aparece un mensaje de error y se cierra el ULP.
Comprobar si hay un plano
Si utiliza la sentencia sheet sin un argumento, puede comprobar si la ventana del editor actual contiene un dibujo de plano. En ese caso, sheet se comporta como una constante de entero, devolviendo 1 si hay un dibujo de plano en la ventana del editor actual y 0 si no lo hay.
Ejemplo
if (sheet)
sheet(S) {
S.instances(I)
printf("Instance: %s\n", I.name);
}Función
Abre un contexto de símbolo.
Sintaxis
symbol(identifier) statementConsulte también library, deviceset, footprint
La sentencia symbol abre un contexto de símbolo si la ventana del editor actual contiene un dibujo de símbolo. Se crea una variable de tipo UL_SYMBOL y se le asigna el nombre indicado por el identificador.
Una vez que el contexto de símbolo se ha abierto correctamente y se ha creado una variable de símbolo, se ejecuta la sentencia. En el ámbito de la sentencia, se puede acceder a la variable de símbolo para recuperar más datos del símbolo.
Si la ventana del editor actual no contiene un dibujo de símbolo, aparece un mensaje de error y se cierra el ULP.
Comprobar si hay un símbolo
Si utiliza la sentencia symbol sin argumento, puede comprobar si la ventana del editor actual contiene un dibujo de símbolo. En ese caso, el símbolo se comporta como una constante de entero, devolviendo 1 si hay un dibujo de símbolo en la ventana del editor actual y 0 si no lo hay.
Ejemplo
if (symbol)
symbol(S) {
S.pins(P)
printf("Pin: %s\n", P.name);
}