Index: work/alien_formats/eagle/eagle_bin/test_parser/eagle_bin.c =================================================================== --- work/alien_formats/eagle/eagle_bin/test_parser/eagle_bin.c (revision 9408) +++ work/alien_formats/eagle/eagle_bin/test_parser/eagle_bin.c (revision 9409) @@ -45,7 +45,7 @@ } attrs_t; typedef struct { - unsigned char cmd;/* rule matches only if block[0] == cmd */ + unsigned int cmd;/* rule matches only if block[0] == cmd */ char *name; fmatch_t fmatch[4]; /* rule matches only if all fmatch integer fields match their val */ subsect_t subs[8];/* how to extract number of subsections (direct children) */ @@ -836,7 +836,7 @@ { PCB_EGKW_SECT_SMASHEDXREF }, /* unknown leaves */ - { 0x53 }, + { 0x5300 }, /* end of table */ { 0 } @@ -1065,7 +1065,9 @@ for(sc = pcb_eagle_script; sc->cmd != 0; sc++) { int match = 1; - if (sc->cmd != block[0]) + unsigned int cmdh = (sc->cmd >> 8) & 0xFF, cmdl = sc->cmd & 0xFF; + + if ((cmdh != block[0]) || (cmdl != block[1])) continue; for(fm = sc->fmatch; fm->offs != 0; fm++) { @@ -1078,7 +1080,7 @@ goto found; } - printf("E: unknown block ID 0x%x at offset %ld\n", block[0], ftell(f)); + printf("E: unknown block ID 0x%x 0x%x at offset %ld\n", block[0], block[1], ftell(f)); return -1; found:; Index: work/alien_formats/eagle/eagle_bin/test_parser/eagle_bin.h =================================================================== --- work/alien_formats/eagle/eagle_bin/test_parser/eagle_bin.h (revision 9408) +++ work/alien_formats/eagle/eagle_bin/test_parser/eagle_bin.h (revision 9409) @@ -1,54 +1,54 @@ #include typedef enum pcb_eagle_binkw_s { - PCB_EGKW_SECT_START = 0x10, - PCB_EGKW_SECT_UKNOWN11 = 0x11, - PCB_EGKW_SECT_GRID = 0x12, - PCB_EGKW_SECT_LAYER = 0x13, - PCB_EGKW_SECT_SCHEMA = 0x14, - PCB_EGKW_SECT_LIBRARY = 0x15, - PCB_EGKW_SECT_DEVICES = 0x17, - PCB_EGKW_SECT_SYMBOLS = 0x18, - PCB_EGKW_SECT_PACKAGES = 0x19, - PCB_EGKW_SECT_SCHEMASHEET = 0x1a, - PCB_EGKW_SECT_BOARD = 0x1b, - PCB_EGKW_SECT_BOARDNET = 0x1c, - PCB_EGKW_SECT_SYMBOL = 0x1d, - PCB_EGKW_SECT_PACKAGE = 0x1e, - PCB_EGKW_SECT_SCHEMANET = 0x1f, - PCB_EGKW_SECT_PATH = 0x20, - PCB_EGKW_SECT_POLYGON = 0x21, - PCB_EGKW_SECT_LINE = 0x22, - PCB_EGKW_SECT_ARC = 0x24, - PCB_EGKW_SECT_CIRCLE = 0x25, - PCB_EGKW_SECT_RECTANGLE = 0x26, - PCB_EGKW_SECT_JUNCTION = 0x27, - PCB_EGKW_SECT_HOLE = 0x28, - PCB_EGKW_SECT_VIA = 0x29, - PCB_EGKW_SECT_PAD = 0x2a, - PCB_EGKW_SECT_SMD = 0x2b, - PCB_EGKW_SECT_PIN = 0x2c, - PCB_EGKW_SECT_GATE = 0x2d, - PCB_EGKW_SECT_BOARDPACKAGE = 0x2e, - PCB_EGKW_SECT_BOARDPACKAGE2 = 0x2f, - PCB_EGKW_SECT_INSTANCE = 0x30, - PCB_EGKW_SECT_TEXT = 0x31, - PCB_EGKW_SECT_NETBUSLABEL = 0x33, - PCB_EGKW_SECT_SMASHEDNAME = 0x34, - PCB_EGKW_SECT_SMASHEDVALUE = 0x35, - PCB_EGKW_SECT_PACKAGEVARIANT = 0x36, - PCB_EGKW_SECT_DEVICE = 0x37, - PCB_EGKW_SECT_PART = 0x38, - PCB_EGKW_SECT_SCHEMABUS = 0x3a, - PCB_EGKW_SECT_VARIANTCONNECTIONS = 0x3c, - PCB_EGKW_SECT_SCHEMACONNECTION = 0x3d, - PCB_EGKW_SECT_BOARDCONNECTION = 0x3e, - PCB_EGKW_SECT_SMASHEDPART = 0x3f, - PCB_EGKW_SECT_SMASHEDGATE = 0x40, - PCB_EGKW_SECT_ATTRIBUTE = 0x41, - PCB_EGKW_SECT_ATTRIBUTEVALUE = 0x42, - PCB_EGKW_SECT_FRAME = 0x43, - PCB_EGKW_SECT_SMASHEDXREF = 0x44 + PCB_EGKW_SECT_START = 0x1000, + PCB_EGKW_SECT_UKNOWN11 = 0x1100, + PCB_EGKW_SECT_GRID = 0x1200, + PCB_EGKW_SECT_LAYER = 0x1300, + PCB_EGKW_SECT_SCHEMA = 0x1400, + PCB_EGKW_SECT_LIBRARY = 0x1500, + PCB_EGKW_SECT_DEVICES = 0x1700, + PCB_EGKW_SECT_SYMBOLS = 0x1800, + PCB_EGKW_SECT_PACKAGES = 0x1900, + PCB_EGKW_SECT_SCHEMASHEET = 0x1a00, + PCB_EGKW_SECT_BOARD = 0x1b00, + PCB_EGKW_SECT_BOARDNET = 0x1c00, + PCB_EGKW_SECT_SYMBOL = 0x1d00, + PCB_EGKW_SECT_PACKAGE = 0x1e00, + PCB_EGKW_SECT_SCHEMANET = 0x1f00, + PCB_EGKW_SECT_PATH = 0x2000, + PCB_EGKW_SECT_POLYGON = 0x2100, + PCB_EGKW_SECT_LINE = 0x2200, + PCB_EGKW_SECT_ARC = 0x2400, + PCB_EGKW_SECT_CIRCLE = 0x2500, + PCB_EGKW_SECT_RECTANGLE = 0x2600, + PCB_EGKW_SECT_JUNCTION = 0x2700, + PCB_EGKW_SECT_HOLE = 0x2800, + PCB_EGKW_SECT_VIA = 0x2900, + PCB_EGKW_SECT_PAD = 0x2a00, + PCB_EGKW_SECT_SMD = 0x2b00, + PCB_EGKW_SECT_PIN = 0x2c00, + PCB_EGKW_SECT_GATE = 0x2d00, + PCB_EGKW_SECT_BOARDPACKAGE = 0x2e00, + PCB_EGKW_SECT_BOARDPACKAGE2 = 0x2f00, + PCB_EGKW_SECT_INSTANCE = 0x3000, + PCB_EGKW_SECT_TEXT = 0x3100, + PCB_EGKW_SECT_NETBUSLABEL = 0x3300, + PCB_EGKW_SECT_SMASHEDNAME = 0x3400, + PCB_EGKW_SECT_SMASHEDVALUE = 0x3500, + PCB_EGKW_SECT_PACKAGEVARIANT = 0x3600, + PCB_EGKW_SECT_DEVICE = 0x3700, + PCB_EGKW_SECT_PART = 0x3800, + PCB_EGKW_SECT_SCHEMABUS = 0x3a00, + PCB_EGKW_SECT_VARIANTCONNECTIONS = 0x3c00, + PCB_EGKW_SECT_SCHEMACONNECTION = 0x3d00, + PCB_EGKW_SECT_BOARDCONNECTION = 0x3e00, + PCB_EGKW_SECT_SMASHEDPART = 0x3f00, + PCB_EGKW_SECT_SMASHEDGATE = 0x4000, + PCB_EGKW_SECT_ATTRIBUTE = 0x4100, + PCB_EGKW_SECT_ATTRIBUTEVALUE = 0x4200, + PCB_EGKW_SECT_FRAME = 0x4300, + PCB_EGKW_SECT_SMASHEDXREF = 0x4400 } pcb_eagle_binkw_t; int pcb_egle_bin_load(void *ctx, FILE *f, const char *fn);