Integraciones

Las integraciones son constantes, variables, funciones y sentencias que proporcionan información adicional y permiten manipular datos.

Constantes integradas

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

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

Variables integradas

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)

Funciones integradas

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

Funciones de caracteres

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

Funciones de gestión de archivos

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

Funciones matemáticas

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

Nota:

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

Funciones varias

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

Dado 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.XrefLabelFormat

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

Ejemplo

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

Ejemplo

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

Funciones de red

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

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

Funciones de impresión

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

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

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

Funciones de cadena

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

Funciones URN

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

Funciones de hora

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 time

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

Funciones de objeto

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 variant

variant()

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

Funciones XML

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  "

Sentencias integradas

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

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

board()

Función

Abre un contexto de placa.

Sintaxis

board(identifier) statement

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

deviceset()

Función

Abre un contexto de conjunto de dispositivos.

Sintaxis

deviceset(identifier) statement

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

library()

Función

Abre un contexto de biblioteca.

Sintaxis

library(identifier) statement

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

module()

Función

Abre un contexto de módulo.

Sintaxis

module(identifier) statement

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

output()

Función

Abre un archivo de salida para las llamadas de printf() posteriores.

Sintaxis

output(string filename[, string mode]) statement

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

footprint(), nueva a partir de EAGLE 9.1

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.

Nota: La sentencia footprint es nueva en EAGLE 9.1. Para la compatibilidad con versiones anteriores de EAGLE, el paquete está disponible como un alias.

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

schematic()

Función

Abre un contexto esquemático.

Sintaxis

schematic(identifier) statement

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

sheet()

Función

Abre un contexto de plano.

Sintaxis

sheet(identifier) statement

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

symbol()

Función

Abre un contexto de símbolo.

Sintaxis

symbol(identifier) statement

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