Index: trunk/src/actions_pcb.c =================================================================== --- trunk/src/actions_pcb.c (revision 25859) +++ trunk/src/actions_pcb.c (revision 25860) @@ -124,57 +124,6 @@ abort(); } -pcb_data_t *pcb_data_by_name(pcb_board_t *pcb, const char **name) -{ - if (name == NULL) - return NULL; - - if (pcb_strncasecmp(*name, "pcb", 3) == 0) { - (*name) += 3; - if (**name == '/') - (*name)++; - return pcb->Data; - } - else if (pcb_strncasecmp(*name, "buffer#", 7) == 0) { - char *end; - long idx = strtol((*name)+7, &end, 10); - if ((*end == '\0') && (idx >= 0) && (idx < PCB_MAX_BUFFER)) { - *name = end; - if (**name == '/') - (*name)++; - return pcb_buffers[idx].Data; - } - } - else if (pcb_strncasecmp(*name, "buffer", 6) == 0) { - (*name) += 6; - if (**name == '/') - (*name)++; - return PCB_PASTEBUFFER->Data; - } - return NULL; -} - -const char *pcb_data_to_name(pcb_board_t *pcb, pcb_data_t *data, char *buf, int buf_len) -{ - int n; - - assert(buf_len > 15); - if (buf_len < 16) - return NULL; - - if (data == pcb->Data) - return "pcb"; - - for(n = 0; n < PCB_MAX_BUFFER; n++) { - if (data == pcb_buffers[n].Data) { - pcb_sprintf(buf, "buffer#%d", n); - return buf; - } - } - - return NULL; -} - static int data_arg_conv(fgw_ctx_t *ctx, fgw_arg_t *arg, fgw_type_t target) { if (target == FGW_DATA) { /* convert to data */ Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 25859) +++ trunk/src/data.c (revision 25860) @@ -922,3 +922,53 @@ } } +pcb_data_t *pcb_data_by_name(pcb_board_t *pcb, const char **name) +{ + if (name == NULL) + return NULL; + + if (pcb_strncasecmp(*name, "pcb", 3) == 0) { + (*name) += 3; + if (**name == '/') + (*name)++; + return pcb->Data; + } + else if (pcb_strncasecmp(*name, "buffer#", 7) == 0) { + char *end; + long idx = strtol((*name)+7, &end, 10); + if ((*end == '\0') && (idx >= 0) && (idx < PCB_MAX_BUFFER)) { + *name = end; + if (**name == '/') + (*name)++; + return pcb_buffers[idx].Data; + } + } + else if (pcb_strncasecmp(*name, "buffer", 6) == 0) { + (*name) += 6; + if (**name == '/') + (*name)++; + return PCB_PASTEBUFFER->Data; + } + return NULL; +} + +const char *pcb_data_to_name(pcb_board_t *pcb, pcb_data_t *data, char *buf, int buf_len) +{ + int n; + + assert(buf_len > 15); + if (buf_len < 16) + return NULL; + + if (data == pcb->Data) + return "pcb"; + + for(n = 0; n < PCB_MAX_BUFFER; n++) { + if (data == pcb_buffers[n].Data) { + pcb_sprintf(buf, "buffer#%d", n); + return buf; + } + } + + return NULL; +} Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 25859) +++ trunk/src/data.h (revision 25860) @@ -226,4 +226,9 @@ /* Clear the given dyflag bit from all objects under data */ void pcb_data_dynflag_clear(pcb_data_t *data, pcb_dynf_t dynf); + +pcb_data_t *pcb_data_by_name(pcb_board_t *pcb, const char **name); + +const char *pcb_data_to_name(pcb_board_t *pcb, pcb_data_t *data, char *buf, int buf_len); + #endif Index: trunk/src/idpath.h =================================================================== --- trunk/src/idpath.h (revision 25859) +++ trunk/src/idpath.h (revision 25860) @@ -34,6 +34,7 @@ typedef struct pcb_idpath_s { int len; gdl_elem_t link; /* may be part of an idpath list */ + int data_addr; /* 0 means unknown, 1 means PCB, 2+ means buffer idx (-2) */ long int id[1]; /* the struct is allocated to be sizeof(long int) * len */ } pcb_idpath_t;