static struct item * map_rect_get_item_textfile(struct map_rect_priv *mr) { char *p,type[SIZE]; dbg(1,"map_rect_get_item_textfile id_hi=%d line=%s", mr->item.id_hi, mr->line); if (!mr->f) { return NULL; } while (mr->more) { struct coord c; textfile_coord_get(mr, &c, 1); } for(;;) { if (feof(mr->f)) { dbg(1,"map_rect_get_item_textfile: eof\n"); if (mr->item.id_hi) { return NULL; } mr->item.id_hi++; if (mr->m->is_pipe) { pclose(mr->f); mr->f=popen(mr->args, "r"); } else fseek(mr->f, 0, SEEK_SET); get_line(mr); } if ((p=strchr(mr->line,'\n'))) *p='\0'; if (mr->item.id_hi) { mr->attrs[0]='\0'; if (!parse_line(mr, 1)) { get_line(mr); continue; } dbg(1,"map_rect_get_item_textfile: point found\n"); mr->eoc=0; mr->item.id_lo=mr->pos; } else { if (parse_line(mr, 1)) { get_line(mr); continue; } dbg(1,"map_rect_get_item_textfile: line found\n"); if (! mr->line[0]) { get_line(mr); continue; } mr->item.id_lo=mr->pos; strcpy(mr->attrs, mr->line); get_line(mr); dbg(1,"mr=%p attrs=%s\n", mr, mr->attrs); } dbg(1,"get_attrs %s\n", mr->attrs); if (get_tag(mr->attrs,"type",NULL,type,NULL)) { dbg(1,"type='%s'\n", type); mr->item.type=item_from_name(type); if (mr->item.type == type_none) printf("Warning: type '%s' unknown\n", type); } else { get_line(mr); continue; } mr->attr_last=attr_none; mr->more=1; dbg(1,"return attr='%s'\n", mr->attrs); return &mr->item; } }
static struct item * map_rect_get_item_textfile(struct map_rect_priv *mr) { char *p,type[TEXTFILE_LINE_SIZE]; dbg(lvl_debug,"map_rect_get_item_textfile id_hi=%d line=%s", mr->item.id_hi, mr->line); if (!mr->f) { return NULL; } while (mr->more) { struct coord c; textfile_coord_get(mr, &c, 1); } for(;;) { if (feof(mr->f)) { dbg(lvl_debug,"map_rect_get_item_textfile: eof %d\n",mr->item.id_hi); if (mr->m->flags & 1) { if (!mr->item.id_hi) return NULL; mr->item.id_hi=0; } else { if (mr->item.id_hi) return NULL; mr->item.id_hi=1; } if (mr->m->is_pipe) { #ifdef HAVE_POPEN pclose(mr->f); mr->f=popen(mr->args, "r"); mr->pos=0; mr->lastlen=0; #endif } else { fseek(mr->f, 0, SEEK_SET); clearerr(mr->f); } get_line(mr); } if ((p=strchr(mr->line,'\n'))) *p='\0'; if (mr->item.id_hi) { mr->attrs[0]='\0'; if (!parse_line(mr, 1)) { get_line(mr); continue; } dbg(lvl_debug,"map_rect_get_item_textfile: point found\n"); mr->eoc=0; mr->item.id_lo=mr->pos; } else { if (parse_line(mr, 1)) { get_line(mr); continue; } dbg(lvl_debug,"map_rect_get_item_textfile: line found\n"); if (! mr->line[0]) { get_line(mr); continue; } mr->item.id_lo=mr->pos; strcpy(mr->attrs, mr->line); get_line(mr); dbg(lvl_debug,"mr=%p attrs=%s\n", mr, mr->attrs); } dbg(lvl_debug,"get_attrs %s\n", mr->attrs); if (attr_from_line(mr->attrs,"type",NULL,type,NULL)) { dbg(lvl_debug,"type='%s'\n", type); mr->item.type=item_from_name(type); if (mr->item.type == type_none) dbg(lvl_error, "Warning: type '%s' unknown\n", type); } else { get_line(mr); continue; } mr->attr_last=attr_none; mr->more=1; dbg(lvl_debug,"return attr='%s'\n", mr->attrs); return &mr->item; } }