Le strutture di dati EAGLE sono memorizzate in file XML:
Questi file di dati contengono una gerarchia di oggetti. In un programma ULP è possibile accedere a queste gerarchie mediante le rispettive istruzioni di accesso integrate:
library(L) { ... }
schematic(S) { ... }
board(B) { ... }Queste istruzioni di accesso impostano un contesto in cui è possibile accedere a tutti gli oggetti contenuti nella libreria, nello schema o nella scheda.
È possibile accedere alle proprietà di questi oggetti tramite i membri. Esistono due tipi di membri:
I membri dati restituiscono immediatamente i dati richiesti da un oggetto. Ad esempio, il
board(B) {
printf("%s\n", B.name);
}il nome del membro dati dell'oggetto scheda B restituisce il nome della scheda. Anche i membri dati possono restituire altri oggetti, come nel caso
board(B) {
printf("%f\n", B.grid.size);
}in cui il membro dati della griglia della scheda restituisce un oggetto griglia, di cui il membro dati delle dimensioni restituisce le dimensioni della griglia.
I membri di sequenza chiusa vengono utilizzati per accedere a più oggetti dello stesso tipo contenuti in un oggetto di livello superiore:
board(B) {
B.elements(E) {
printf("%-8s %-8s\n", E.name, E.value);
}
}In questo esempio viene utilizzata la funzione del membro di sequenza chiusa elements() della scheda per impostare una sequenza per tutti gli elementi della scheda. Il blocco che segue l'istruzione B.elements(E) viene eseguito a turno per ogni elemento e l'elemento corrente può essere utilizzato come riferimento all'interno del blocco mediante il nome E.
I membri di sequenza chiusa elaborano gli oggetti in ordine alfanumerico, a condizione che abbiano un nome.
Una funzione di un membro di sequenza chiusa crea una variabile del tipo necessario per mantenere gli oggetti richiesti. È possibile utilizzare qualsiasi nome valido per una variabile. Pertanto l'esempio precedente potrebbe essere scritto anche come
board(MyBoard) {
MyBoard.elements(TheCurrentElement) {
printf("%-8s %-8s\n", TheCurrentElement.name, TheCurrentElement.value);
}
}e farebbe esattamente la stessa cosa. L'ambito della variabile creata da una funzione di un membro di sequenza chiusa è limitato all'istruzione (o blocco) immediatamente successivi alla chiamata della funzione di sequenza.
LIBRARY
GRID
LAYER
DEVICESET
DEVICE
GATE
FOOTPRINT
CONTACT
PAD
SMD
CIRCLE
HOLE
RECTANGLE
FRAME
DIMENSION
TEXT
WIRE
POLYSHAPE
WIRE
POLYCUTOUT
WIRE
PACKAGE3D
SYMBOL
PIN
CIRCLE
RECTANGLE
FRAME
DIMENSION
TEXT
WIRE
POLYSHAPE
WIRESCHEMATIC
GRID
LAYER
LIBRARY
ATTRIBUTE
VARIANTDEF
COMPONENT
ATTRIBUTE
VARIANT
SHEET
CIRCLE
RECTANGLE
FRAME
DIMENSION
TEXT
WIRE
POLYSHAPE
WIRE
INSTANCE
ATTRIBUTE
MODULEINST
BUS
SEGMENT
LABEL
TEXT
WIRE
WIRE
NET
SEGMENT
JUNCTION
PINREF
PORTREF
TEXT
WIRE
MODULE
PORT
COMPONENT
SHEET
(same as above)BOARD
GRID
LAYER
LIBRARY
ATTRIBUTE
VARIANTDEF
CIRCLE
HOLE
RECTANGLE
FRAME
DIMENSION
TEXT
WIRE
POLYSHAPE
WIRE
POLYCUTOUT
WIRE
ELEMENT
ATTRIBUTE
VARIANT
SIGNAL
CONTACTREF
POLYPOUR
WIRE
VIA
WIRE