Lines Matching refs:ply

150 typedef int (*p_ply_ihandler)(p_ply ply, double *value);
151 typedef int (*p_ply_ichunk)(p_ply ply, void *anydata, size_t size);
159 typedef int (*p_ply_ohandler)(p_ply ply, double value);
160 typedef int (*p_ply_ochunk)(p_ply ply, void *anydata, size_t size);
226 static int ply_read_word(p_ply ply);
227 static int ply_check_word(p_ply ply);
228 static void ply_finish_word(p_ply ply, size_t size);
229 static int ply_read_line(p_ply ply);
230 static int ply_check_line(p_ply ply);
231 static int ply_read_chunk(p_ply ply, void *anybuffer, size_t size);
232 static int ply_read_chunk_reverse(p_ply ply, void *anybuffer, size_t size);
233 static int ply_write_chunk(p_ply ply, void *anybuffer, size_t size);
234 static int ply_write_chunk_reverse(p_ply ply, void *anybuffer, size_t size);
241 static p_ply_element ply_find_element(p_ply ply, const char *name);
248 static int ply_read_header_magic(p_ply ply);
249 static int ply_read_header_format(p_ply ply);
250 static int ply_read_header_comment(p_ply ply);
251 static int ply_read_header_obj_info(p_ply ply);
252 static int ply_read_header_property(p_ply ply);
253 static int ply_read_header_element(p_ply ply);
258 static void ply_error_cb(p_ply ply, const char *message);
259 static void ply_ferror(p_ply ply, const char *fmt, ...);
264 static void ply_init(p_ply ply);
268 static p_ply_element ply_grow_element(p_ply ply);
269 static p_ply_property ply_grow_property(p_ply ply, p_ply_element element);
270 static void *ply_grow_array(p_ply ply, void **pointer, long *nmemb, long size);
281 static int ply_read_element(p_ply ply, p_ply_element element,
283 static int ply_read_property(p_ply ply, p_ply_element element,
285 static int ply_read_list_property(p_ply ply, p_ply_element element,
287 static int ply_read_scalar_property(p_ply ply, p_ply_element element,
307 static int BREFILL(p_ply ply) { in BREFILL() argument
309 size_t size = BSIZE(ply); in BREFILL()
310 memmove(ply->buffer, BFIRST(ply), size); in BREFILL()
311 ply->buffer_last = size; in BREFILL()
312 ply->buffer_first = ply->buffer_token = 0; in BREFILL()
314 size = fread(ply->buffer+size, 1, BUFFERSIZE-size-1, ply->fp); in BREFILL()
316 ply->buffer[BUFFERSIZE-1] = '\0'; in BREFILL()
320 ply->buffer_last += size; in BREFILL()
330 static int ply_read_header_magic(p_ply ply) { in ply_read_header_magic() argument
331 char *magic = ply->buffer; in ply_read_header_magic()
332 if (!BREFILL(ply)) { in ply_read_header_magic()
333 ply->error_cb(ply, "Unable to read magic number from file"); in ply_read_header_magic()
339 ply->error_cb(ply, "Wrong magic number. Expected 'ply'"); in ply_read_header_magic()
344 ply->rn = magic[3] == '\r' && magic[4] == '\n'; in ply_read_header_magic()
345 BSKIP(ply, 3); in ply_read_header_magic()
358 p_ply ply = ply_alloc(); in ply_open() local
360 if (!ply) { in ply_open()
364 ply->idata = idata; in ply_open()
365 ply->pdata = pdata; in ply_open()
366 ply->io_mode = PLY_READ; in ply_open()
367 ply->error_cb = error_cb; in ply_open()
369 error_cb(ply, "Incompatible type system"); in ply_open()
370 free(ply); in ply_open()
376 error_cb(ply, "Unable to open file"); in ply_open()
377 free(ply); in ply_open()
380 ply->fp = fp; in ply_open()
381 return ply; in ply_open()
384 int ply_read_header(p_ply ply) { in ply_read_header() argument
385 assert(ply && ply->fp && ply->io_mode == PLY_READ); in ply_read_header()
386 if (!ply_read_header_magic(ply)) return 0; in ply_read_header()
387 if (!ply_read_word(ply)) return 0; in ply_read_header()
389 if (!ply_read_header_format(ply)) { in ply_read_header()
390 ply_ferror(ply, "Invalid file format"); in ply_read_header()
394 while (strcmp(BWORD(ply), "end_header")) { in ply_read_header()
395 if (!ply_read_header_comment(ply) && in ply_read_header()
396 !ply_read_header_element(ply) && in ply_read_header()
397 !ply_read_header_obj_info(ply)) { in ply_read_header()
398 ply_ferror(ply, "Unexpected token '%s'", BWORD(ply)); in ply_read_header()
403 if (ply->rn) { in ply_read_header()
404 if (BSIZE(ply) < 1 && !BREFILL(ply)) { in ply_read_header()
405 ply_ferror(ply, "Unexpected end of file"); in ply_read_header()
408 BSKIP(ply, 1); in ply_read_header()
413 long ply_set_read_cb(p_ply ply, const char *element_name, in ply_set_read_cb() argument
418 assert(ply && element_name && property_name); in ply_set_read_cb()
419 element = ply_find_element(ply, element_name); in ply_set_read_cb()
429 int ply_read(p_ply ply) { in ply_read() argument
432 assert(ply && ply->fp && ply->io_mode == PLY_READ); in ply_read()
433 argument = &ply->argument; in ply_read()
435 for (i = 0; i < ply->nelements; i++) { in ply_read()
436 p_ply_element element = &ply->element[i]; in ply_read()
438 if (!ply_read_element(ply, element, argument)) in ply_read()
450 p_ply ply = ply_alloc(); in ply_create() local
452 if (!ply) { in ply_create()
457 error_cb(ply, "Incompatible type system"); in ply_create()
458 free(ply); in ply_create()
464 error_cb(ply, "Unable to create file"); in ply_create()
465 free(ply); in ply_create()
468 ply->idata = idata; in ply_create()
469 ply->pdata = pdata; in ply_create()
470 ply->io_mode = PLY_WRITE; in ply_create()
472 if (storage_mode == PLY_ASCII) ply->odriver = &ply_odriver_ascii; in ply_create()
474 ply->odriver = &ply_odriver_binary; in ply_create()
475 else ply->odriver = &ply_odriver_binary_reverse; in ply_create()
476 ply->storage_mode = storage_mode; in ply_create()
477 ply->fp = fp; in ply_create()
478 ply->error_cb = error_cb; in ply_create()
479 return ply; in ply_create()
482 int ply_add_element(p_ply ply, const char *name, long ninstances) { in ply_add_element() argument
484 assert(ply && ply->fp && ply->io_mode == PLY_WRITE); in ply_add_element()
487 ply_ferror(ply, "Invalid arguments"); in ply_add_element()
490 element = ply_grow_element(ply); in ply_add_element()
497 int ply_add_scalar_property(p_ply ply, const char *name, e_ply_type type) { in ply_add_scalar_property() argument
500 assert(ply && ply->fp && ply->io_mode == PLY_WRITE); in ply_add_scalar_property()
504 ply_ferror(ply, "Invalid arguments"); in ply_add_scalar_property()
507 element = &ply->element[ply->nelements-1]; in ply_add_scalar_property()
508 property = ply_grow_property(ply, element); in ply_add_scalar_property()
515 int ply_add_list_property(p_ply ply, const char *name, in ply_add_list_property() argument
519 assert(ply && ply->fp && ply->io_mode == PLY_WRITE); in ply_add_list_property()
522 ply_ferror(ply, "Invalid arguments"); in ply_add_list_property()
528 ply_ferror(ply, "Invalid arguments"); in ply_add_list_property()
531 element = &ply->element[ply->nelements-1]; in ply_add_list_property()
532 property = ply_grow_property(ply, element); in ply_add_list_property()
541 int ply_add_property(p_ply ply, const char *name, e_ply_type type, in ply_add_property() argument
544 return ply_add_list_property(ply, name, length_type, value_type); in ply_add_property()
546 return ply_add_scalar_property(ply, name, type); in ply_add_property()
549 int ply_add_comment(p_ply ply, const char *comment) { in ply_add_comment() argument
551 assert(ply && comment && strlen(comment) < LINESIZE); in ply_add_comment()
553 ply_ferror(ply, "Invalid arguments"); in ply_add_comment()
556 new_comment = (char *) ply_grow_array(ply, (void **) &ply->comment, in ply_add_comment()
557 &ply->ncomments, LINESIZE); in ply_add_comment()
563 int ply_add_obj_info(p_ply ply, const char *obj_info) { in ply_add_obj_info() argument
565 assert(ply && obj_info && strlen(obj_info) < LINESIZE); in ply_add_obj_info()
567 ply_ferror(ply, "Invalid arguments"); in ply_add_obj_info()
570 new_obj_info = (char *) ply_grow_array(ply, (void **) &ply->obj_info, in ply_add_obj_info()
571 &ply->nobj_infos, LINESIZE); in ply_add_obj_info()
577 int ply_write_header(p_ply ply) { in ply_write_header() argument
579 assert(ply && ply->fp && ply->io_mode == PLY_WRITE); in ply_write_header()
580 assert(ply->element || ply->nelements == 0); in ply_write_header()
581 assert(!ply->element || ply->nelements > 0); in ply_write_header()
582 if (fprintf(ply->fp, "ply\nformat %s 1.0\n", in ply_write_header()
583 ply_storage_mode_list[ply->storage_mode]) <= 0) goto error; in ply_write_header()
584 for (i = 0; i < ply->ncomments; i++) in ply_write_header()
585 if (fprintf(ply->fp, "comment %s\n", ply->comment + LINESIZE*i) <= 0) in ply_write_header()
587 for (i = 0; i < ply->nobj_infos; i++) in ply_write_header()
588 if (fprintf(ply->fp, "obj_info %s\n", ply->obj_info + LINESIZE*i) <= 0) in ply_write_header()
590 for (i = 0; i < ply->nelements; i++) { in ply_write_header()
591 p_ply_element element = &ply->element[i]; in ply_write_header()
594 if (fprintf(ply->fp, "element %s %ld\n", element->name, in ply_write_header()
599 if (fprintf(ply->fp, "property list %s %s %s\n", in ply_write_header()
604 if (fprintf(ply->fp, "property %s %s\n", in ply_write_header()
610 return fprintf(ply->fp, "end_header\n") > 0; in ply_write_header()
612 ply_ferror(ply, "Error writing to file"); in ply_write_header()
616 int ply_write(p_ply ply, double value) { in ply_write() argument
622 if (ply->welement > ply->nelements) return 0; in ply_write()
623 element = &ply->element[ply->welement]; in ply_write()
624 if (ply->wproperty > element->nproperties) return 0; in ply_write()
625 property = &element->property[ply->wproperty]; in ply_write()
627 if (ply->wvalue_index == 0) { in ply_write()
629 ply->wlength = (long) value; in ply_write()
633 ply->wlength = 0; in ply_write()
635 if (!ply->odriver->ohandler[type](ply, value)) { in ply_write()
636 ply_ferror(ply, "Failed writing %s of %s %d (%s: %s)", in ply_write()
638 ply->winstance_index, in ply_write()
639 ply->odriver->name, ply_type_list[type]); in ply_write()
642 ply->wvalue_index++; in ply_write()
643 if (ply->wvalue_index > ply->wlength) { in ply_write()
644 ply->wvalue_index = 0; in ply_write()
645 ply->wproperty++; in ply_write()
647 if (ply->wproperty >= element->nproperties) { in ply_write()
648 ply->wproperty = 0; in ply_write()
649 ply->winstance_index++; in ply_write()
653 if (ply->winstance_index >= element->ninstances) { in ply_write()
654 ply->winstance_index = 0; in ply_write()
656 ply->welement++; in ply_write()
657 element = &ply->element[ply->welement]; in ply_write()
658 } while (ply->welement < ply->nelements && !element->ninstances); in ply_write()
660 if (ply->storage_mode == PLY_ASCII) { in ply_write()
661 return (!spaceafter || putc(' ', ply->fp) > 0) && in ply_write()
662 (!breakafter || putc('\n', ply->fp) > 0); in ply_write()
668 int ply_close(p_ply ply) { in ply_close() argument
670 assert(ply && ply->fp); in ply_close()
671 assert(ply->element || ply->nelements == 0); in ply_close()
672 assert(!ply->element || ply->nelements > 0); in ply_close()
674 if (ply->io_mode == PLY_WRITE && in ply_close()
675 fwrite(ply->buffer, 1, ply->buffer_last, ply->fp) < ply->buffer_last) { in ply_close()
676 ply_ferror(ply, "Error closing up"); in ply_close()
679 fclose(ply->fp); in ply_close()
681 if (ply->element) { in ply_close()
682 for (i = 0; i < ply->nelements; i++) { in ply_close()
683 p_ply_element element = &ply->element[i]; in ply_close()
686 free(ply->element); in ply_close()
688 if (ply->obj_info) free(ply->obj_info); in ply_close()
689 if (ply->comment) free(ply->comment); in ply_close()
690 free(ply); in ply_close()
697 p_ply_element ply_get_next_element(p_ply ply, in ply_get_next_element() argument
699 assert(ply); in ply_get_next_element()
700 if (!last) return ply->element; in ply_get_next_element()
702 if (last < ply->element + ply->nelements) return last; in ply_get_next_element()
734 const char *ply_get_next_comment(p_ply ply, const char *last) { in ply_get_next_comment() argument
735 assert(ply); in ply_get_next_comment()
736 if (!last) return ply->comment; in ply_get_next_comment()
738 if (last < ply->comment + LINESIZE*ply->ncomments) return last; in ply_get_next_comment()
742 const char *ply_get_next_obj_info(p_ply ply, const char *last) { in ply_get_next_obj_info() argument
743 assert(ply); in ply_get_next_obj_info()
744 if (!last) return ply->obj_info; in ply_get_next_obj_info()
746 if (last < ply->obj_info + LINESIZE*ply->nobj_infos) return last; in ply_get_next_obj_info()
787 int ply_get_ply_user_data(p_ply ply, void **pdata, long *idata) { in ply_get_ply_user_data() argument
788 assert(ply); in ply_get_ply_user_data()
789 if (!ply) return 0; in ply_get_ply_user_data()
790 if (pdata) *pdata = ply->pdata; in ply_get_ply_user_data()
791 if (idata) *idata = ply->idata; in ply_get_ply_user_data()
798 static int ply_read_list_property(p_ply ply, p_ply_element element, in ply_read_list_property() argument
802 p_ply_ihandler *driver = ply->idriver->ihandler; in ply_read_list_property()
806 if (!handler(ply, &length)) { in ply_read_list_property()
807 ply_ferror(ply, "Error reading '%s' of '%s' number %d", in ply_read_list_property()
816 ply_ferror(ply, "Aborted by user"); in ply_read_list_property()
825 if (!handler(ply, &argument->value)) { in ply_read_list_property()
826 ply_ferror(ply, "Error reading value number %d of '%s' of " in ply_read_list_property()
833 ply_ferror(ply, "Aborted by user"); in ply_read_list_property()
840 static int ply_read_scalar_property(p_ply ply, p_ply_element element, in ply_read_scalar_property() argument
843 p_ply_ihandler *driver = ply->idriver->ihandler; in ply_read_scalar_property()
847 if (!handler(ply, &argument->value)) { in ply_read_scalar_property()
848 ply_ferror(ply, "Error reading '%s' of '%s' number %d", in ply_read_scalar_property()
853 ply_ferror(ply, "Aborted by user"); in ply_read_scalar_property()
859 static int ply_read_property(p_ply ply, p_ply_element element, in ply_read_property() argument
862 return ply_read_list_property(ply, element, property, argument); in ply_read_property()
864 return ply_read_scalar_property(ply, element, property, argument); in ply_read_property()
867 static int ply_read_element(p_ply ply, p_ply_element element, in ply_read_element() argument
879 if (!ply_read_property(ply, element, property, argument)) in ply_read_element()
894 static p_ply_element ply_find_element(p_ply ply, const char *name) { in ply_find_element() argument
897 assert(ply && name); in ply_find_element()
898 element = ply->element; in ply_find_element()
899 nelements = ply->nelements; in ply_find_element()
921 static int ply_check_word(p_ply ply) { in ply_check_word() argument
922 size_t size = strlen(BWORD(ply)); in ply_check_word()
924 ply_ferror(ply, "Word too long"); in ply_check_word()
927 ply_ferror(ply, "Unexpected end of file"); in ply_check_word()
933 static int ply_read_word(p_ply ply) { in ply_read_word() argument
935 assert(ply && ply->fp && ply->io_mode == PLY_READ); in ply_read_word()
938 t = strspn(BFIRST(ply), " \n\r\t"); in ply_read_word()
940 if (t >= BSIZE(ply)) { in ply_read_word()
941 if (!BREFILL(ply)) { in ply_read_word()
942 ply_ferror(ply, "Unexpected end of file"); in ply_read_word()
947 BSKIP(ply, t); in ply_read_word()
949 t = strcspn(BFIRST(ply), " \n\r\t"); in ply_read_word()
951 if (t < BSIZE(ply)) { in ply_read_word()
952 ply_finish_word(ply, t); in ply_read_word()
953 return ply_check_word(ply); in ply_read_word()
956 if (!BREFILL(ply)) { in ply_read_word()
958 ply_finish_word(ply, t); in ply_read_word()
959 return ply_check_word(ply); in ply_read_word()
964 t += strcspn(BFIRST(ply) + t, " \n\r\t"); in ply_read_word()
966 if (t >= BSIZE(ply)) { in ply_read_word()
967 ply_ferror(ply, "Token too large"); in ply_read_word()
971 ply_finish_word(ply, t); in ply_read_word()
972 return ply_check_word(ply); in ply_read_word()
975 static void ply_finish_word(p_ply ply, size_t size) { in ply_finish_word() argument
976 ply->buffer_token = ply->buffer_first; in ply_finish_word()
977 BSKIP(ply, size); in ply_finish_word()
978 *BFIRST(ply) = '\0'; in ply_finish_word()
979 BSKIP(ply, 1); in ply_finish_word()
982 static int ply_check_line(p_ply ply) { in ply_check_line() argument
983 if (strlen(BLINE(ply)) >= LINESIZE) { in ply_check_line()
984 ply_ferror(ply, "Line too long"); in ply_check_line()
990 static int ply_read_line(p_ply ply) { in ply_read_line() argument
992 assert(ply && ply->fp && ply->io_mode == PLY_READ); in ply_read_line()
994 end = strchr(BFIRST(ply), '\n'); in ply_read_line()
997 ply->buffer_token = ply->buffer_first; in ply_read_line()
998 BSKIP(ply, end - BFIRST(ply)); in ply_read_line()
999 *BFIRST(ply) = '\0'; in ply_read_line()
1000 BSKIP(ply, 1); in ply_read_line()
1001 return ply_check_line(ply); in ply_read_line()
1003 end = ply->buffer + BSIZE(ply); in ply_read_line()
1005 if (!BREFILL(ply)) { in ply_read_line()
1006 ply_ferror(ply, "Unexpected end of file"); in ply_read_line()
1014 ply_ferror(ply, "Token too large"); in ply_read_line()
1018 ply->buffer_token = ply->buffer_first; in ply_read_line()
1019 BSKIP(ply, end - BFIRST(ply)); in ply_read_line()
1020 *BFIRST(ply) = '\0'; in ply_read_line()
1021 BSKIP(ply, 1); in ply_read_line()
1022 return ply_check_line(ply); in ply_read_line()
1025 static int ply_read_chunk(p_ply ply, void *anybuffer, size_t size) { in ply_read_chunk() argument
1028 assert(ply && ply->fp && ply->io_mode == PLY_READ); in ply_read_chunk()
1029 assert(ply->buffer_first <= ply->buffer_last); in ply_read_chunk()
1031 if (ply->buffer_first < ply->buffer_last) { in ply_read_chunk()
1032 buffer[i] = ply->buffer[ply->buffer_first]; in ply_read_chunk()
1033 ply->buffer_first++; in ply_read_chunk()
1036 ply->buffer_first = 0; in ply_read_chunk()
1037 ply->buffer_last = fread(ply->buffer, 1, BUFFERSIZE, ply->fp); in ply_read_chunk()
1038 if (ply->buffer_last <= 0) return 0; in ply_read_chunk()
1044 static int ply_write_chunk(p_ply ply, void *anybuffer, size_t size) { in ply_write_chunk() argument
1047 assert(ply && ply->fp && ply->io_mode == PLY_WRITE); in ply_write_chunk()
1048 assert(ply->buffer_last <= BUFFERSIZE); in ply_write_chunk()
1050 if (ply->buffer_last < BUFFERSIZE) { in ply_write_chunk()
1051 ply->buffer[ply->buffer_last] = buffer[i]; in ply_write_chunk()
1052 ply->buffer_last++; in ply_write_chunk()
1055 ply->buffer_last = 0; in ply_write_chunk()
1056 if (fwrite(ply->buffer, 1, BUFFERSIZE, ply->fp) < BUFFERSIZE) in ply_write_chunk()
1063 static int ply_write_chunk_reverse(p_ply ply, void *anybuffer, size_t size) { in ply_write_chunk_reverse() argument
1066 ret = ply_write_chunk(ply, anybuffer, size); in ply_write_chunk_reverse()
1071 static int ply_read_chunk_reverse(p_ply ply, void *anybuffer, size_t size) { in ply_read_chunk_reverse() argument
1072 if (!ply_read_chunk(ply, anybuffer, size)) return 0; in ply_read_chunk_reverse()
1088 static void ply_init(p_ply ply) { in ply_init() argument
1089 ply->element = NULL; in ply_init()
1090 ply->nelements = 0; in ply_init()
1091 ply->comment = NULL; in ply_init()
1092 ply->ncomments = 0; in ply_init()
1093 ply->obj_info = NULL; in ply_init()
1094 ply->nobj_infos = 0; in ply_init()
1095 ply->idriver = NULL; in ply_init()
1096 ply->odriver = NULL; in ply_init()
1097 ply->buffer[0] = '\0'; in ply_init()
1098 ply->buffer_first = ply->buffer_last = ply->buffer_token = 0; in ply_init()
1099 ply->welement = 0; in ply_init()
1100 ply->wproperty = 0; in ply_init()
1101 ply->winstance_index = 0; in ply_init()
1102 ply->wlength = 0; in ply_init()
1103 ply->wvalue_index = 0; in ply_init()
1124 p_ply ply = (p_ply) calloc(1, sizeof(t_ply)); in ply_alloc() local
1125 if (!ply) return NULL; in ply_alloc()
1126 ply_init(ply); in ply_alloc()
1127 return ply; in ply_alloc()
1130 static void *ply_grow_array(p_ply ply, void **pointer, in ply_grow_array() argument
1137 ply_ferror(ply, "Out of memory"); in ply_grow_array()
1145 static p_ply_element ply_grow_element(p_ply ply) { in ply_grow_element() argument
1147 assert(ply); in ply_grow_element()
1148 assert(ply->element || ply->nelements == 0); in ply_grow_element()
1149 assert(!ply->element || ply->nelements > 0); in ply_grow_element()
1150 element = (p_ply_element) ply_grow_array(ply, (void **) &ply->element, in ply_grow_element()
1151 &ply->nelements, sizeof(t_ply_element)); in ply_grow_element()
1157 static p_ply_property ply_grow_property(p_ply ply, p_ply_element element) { in ply_grow_property() argument
1159 assert(ply); in ply_grow_property()
1163 property = (p_ply_property) ply_grow_array(ply, in ply_grow_property()
1171 static int ply_read_header_format(p_ply ply) { in ply_read_header_format() argument
1172 assert(ply && ply->fp && ply->io_mode == PLY_READ); in ply_read_header_format()
1173 if (strcmp(BWORD(ply), "format")) return 0; in ply_read_header_format()
1174 if (!ply_read_word(ply)) return 0; in ply_read_header_format()
1175 ply->storage_mode = ply_find_string(BWORD(ply), ply_storage_mode_list); in ply_read_header_format()
1176 if (ply->storage_mode == (e_ply_storage_mode) (-1)) return 0; in ply_read_header_format()
1177 if (ply->storage_mode == PLY_ASCII) ply->idriver = &ply_idriver_ascii; in ply_read_header_format()
1178 else if (ply->storage_mode == ply_arch_endian()) in ply_read_header_format()
1179 ply->idriver = &ply_idriver_binary; in ply_read_header_format()
1180 else ply->idriver = &ply_idriver_binary_reverse; in ply_read_header_format()
1181 if (!ply_read_word(ply)) return 0; in ply_read_header_format()
1182 if (strcmp(BWORD(ply), "1.0")) return 0; in ply_read_header_format()
1183 if (!ply_read_word(ply)) return 0; in ply_read_header_format()
1187 static int ply_read_header_comment(p_ply ply) { in ply_read_header_comment() argument
1188 assert(ply && ply->fp && ply->io_mode == PLY_READ); in ply_read_header_comment()
1189 if (strcmp(BWORD(ply), "comment")) return 0; in ply_read_header_comment()
1190 if (!ply_read_line(ply)) return 0; in ply_read_header_comment()
1191 if (!ply_add_comment(ply, BLINE(ply))) return 0; in ply_read_header_comment()
1192 if (!ply_read_word(ply)) return 0; in ply_read_header_comment()
1196 static int ply_read_header_obj_info(p_ply ply) { in ply_read_header_obj_info() argument
1197 assert(ply && ply->fp && ply->io_mode == PLY_READ); in ply_read_header_obj_info()
1198 if (strcmp(BWORD(ply), "obj_info")) return 0; in ply_read_header_obj_info()
1199 if (!ply_read_line(ply)) return 0; in ply_read_header_obj_info()
1200 if (!ply_add_obj_info(ply, BLINE(ply))) return 0; in ply_read_header_obj_info()
1201 if (!ply_read_word(ply)) return 0; in ply_read_header_obj_info()
1205 static int ply_read_header_property(p_ply ply) { in ply_read_header_property() argument
1209 if (strcmp(BWORD(ply), "property")) return 0; in ply_read_header_property()
1210 element = &ply->element[ply->nelements-1]; in ply_read_header_property()
1211 property = ply_grow_property(ply, element); in ply_read_header_property()
1214 if (!ply_read_word(ply)) return 0; in ply_read_header_property()
1215 property->type = ply_find_string(BWORD(ply), ply_type_list); in ply_read_header_property()
1219 if (!ply_read_word(ply)) return 0; in ply_read_header_property()
1220 property->length_type = ply_find_string(BWORD(ply), ply_type_list); in ply_read_header_property()
1222 if (!ply_read_word(ply)) return 0; in ply_read_header_property()
1223 property->value_type = ply_find_string(BWORD(ply), ply_type_list); in ply_read_header_property()
1227 if (!ply_read_word(ply)) return 0; in ply_read_header_property()
1228 strcpy(property->name, BWORD(ply)); in ply_read_header_property()
1229 if (!ply_read_word(ply)) return 0; in ply_read_header_property()
1233 static int ply_read_header_element(p_ply ply) { in ply_read_header_element() argument
1236 assert(ply && ply->fp && ply->io_mode == PLY_READ); in ply_read_header_element()
1237 if (strcmp(BWORD(ply), "element")) return 0; in ply_read_header_element()
1239 element = ply_grow_element(ply); in ply_read_header_element()
1242 if (!ply_read_word(ply)) return 0; in ply_read_header_element()
1243 strcpy(element->name, BWORD(ply)); in ply_read_header_element()
1245 if (!ply_read_word(ply)) return 0; in ply_read_header_element()
1246 if (sscanf(BWORD(ply), "%ld", &dummy) != 1) { in ply_read_header_element()
1247 ply_ferror(ply, "Expected number got '%s'", BWORD(ply)); in ply_read_header_element()
1252 if (!ply_read_word(ply)) return 0; in ply_read_header_element()
1253 while (ply_read_header_property(ply) || in ply_read_header_element()
1254 ply_read_header_comment(ply) || ply_read_header_obj_info(ply)) in ply_read_header_element()
1259 static void ply_error_cb(p_ply ply, const char *message) { in ply_error_cb() argument
1260 (void) ply; in ply_error_cb()
1264 static void ply_ferror(p_ply ply, const char *fmt, ...) { in ply_ferror() argument
1270 ply->error_cb(ply, buffer); in ply_ferror()
1303 static int oascii_int8(p_ply ply, double value) { in oascii_int8() argument
1305 return fprintf(ply->fp, "%d", (t_ply_int8) value) > 0; in oascii_int8()
1308 static int oascii_uint8(p_ply ply, double value) { in oascii_uint8() argument
1310 return fprintf(ply->fp, "%d", (t_ply_uint8) value) > 0; in oascii_uint8()
1313 static int oascii_int16(p_ply ply, double value) { in oascii_int16() argument
1315 return fprintf(ply->fp, "%d", (t_ply_int16) value) > 0; in oascii_int16()
1318 static int oascii_uint16(p_ply ply, double value) { in oascii_uint16() argument
1320 return fprintf(ply->fp, "%d", (t_ply_uint16) value) > 0; in oascii_uint16()
1323 static int oascii_int32(p_ply ply, double value) { in oascii_int32() argument
1325 return fprintf(ply->fp, "%d", (t_ply_int32) value) > 0; in oascii_int32()
1328 static int oascii_uint32(p_ply ply, double value) { in oascii_uint32() argument
1330 return fprintf(ply->fp, "%d", (t_ply_uint32) value) > 0; in oascii_uint32()
1333 static int oascii_float32(p_ply ply, double value) { in oascii_float32() argument
1335 return fprintf(ply->fp, "%g", (float) value) > 0; in oascii_float32()
1338 static int oascii_float64(p_ply ply, double value) { in oascii_float64() argument
1340 return fprintf(ply->fp, "%g", value) > 0; in oascii_float64()
1343 static int obinary_int8(p_ply ply, double value) { in obinary_int8() argument
1346 return ply->odriver->ochunk(ply, &int8, sizeof(int8)); in obinary_int8()
1349 static int obinary_uint8(p_ply ply, double value) { in obinary_uint8() argument
1352 return ply->odriver->ochunk(ply, &uint8, sizeof(uint8)); in obinary_uint8()
1355 static int obinary_int16(p_ply ply, double value) { in obinary_int16() argument
1358 return ply->odriver->ochunk(ply, &int16, sizeof(int16)); in obinary_int16()
1361 static int obinary_uint16(p_ply ply, double value) { in obinary_uint16() argument
1364 return ply->odriver->ochunk(ply, &uint16, sizeof(uint16)); in obinary_uint16()
1367 static int obinary_int32(p_ply ply, double value) { in obinary_int32() argument
1370 return ply->odriver->ochunk(ply, &int32, sizeof(int32)); in obinary_int32()
1373 static int obinary_uint32(p_ply ply, double value) { in obinary_uint32() argument
1376 return ply->odriver->ochunk(ply, &uint32, sizeof(uint32)); in obinary_uint32()
1379 static int obinary_float32(p_ply ply, double value) { in obinary_float32() argument
1382 return ply->odriver->ochunk(ply, &float32, sizeof(float32)); in obinary_float32()
1385 static int obinary_float64(p_ply ply, double value) { in obinary_float64() argument
1386 return ply->odriver->ochunk(ply, &value, sizeof(value)); in obinary_float64()
1392 static int iascii_int8(p_ply ply, double *value) { in iascii_int8() argument
1394 if (!ply_read_word(ply)) return 0; in iascii_int8()
1395 *value = strtol(BWORD(ply), &end, 10); in iascii_int8()
1400 static int iascii_uint8(p_ply ply, double *value) { in iascii_uint8() argument
1402 if (!ply_read_word(ply)) return 0; in iascii_uint8()
1403 *value = strtol(BWORD(ply), &end, 10); in iascii_uint8()
1408 static int iascii_int16(p_ply ply, double *value) { in iascii_int16() argument
1410 if (!ply_read_word(ply)) return 0; in iascii_int16()
1411 *value = strtol(BWORD(ply), &end, 10); in iascii_int16()
1416 static int iascii_uint16(p_ply ply, double *value) { in iascii_uint16() argument
1418 if (!ply_read_word(ply)) return 0; in iascii_uint16()
1419 *value = strtol(BWORD(ply), &end, 10); in iascii_uint16()
1424 static int iascii_int32(p_ply ply, double *value) { in iascii_int32() argument
1426 if (!ply_read_word(ply)) return 0; in iascii_int32()
1427 *value = strtol(BWORD(ply), &end, 10); in iascii_int32()
1432 static int iascii_uint32(p_ply ply, double *value) { in iascii_uint32() argument
1434 if (!ply_read_word(ply)) return 0; in iascii_uint32()
1435 *value = strtol(BWORD(ply), &end, 10); in iascii_uint32()
1440 static int iascii_float32(p_ply ply, double *value) { in iascii_float32() argument
1442 if (!ply_read_word(ply)) return 0; in iascii_float32()
1443 *value = strtod(BWORD(ply), &end); in iascii_float32()
1448 static int iascii_float64(p_ply ply, double *value) { in iascii_float64() argument
1450 if (!ply_read_word(ply)) return 0; in iascii_float64()
1451 *value = strtod(BWORD(ply), &end); in iascii_float64()
1456 static int ibinary_int8(p_ply ply, double *value) { in ibinary_int8() argument
1458 if (!ply->idriver->ichunk(ply, &int8, 1)) return 0; in ibinary_int8()
1463 static int ibinary_uint8(p_ply ply, double *value) { in ibinary_uint8() argument
1465 if (!ply->idriver->ichunk(ply, &uint8, 1)) return 0; in ibinary_uint8()
1470 static int ibinary_int16(p_ply ply, double *value) { in ibinary_int16() argument
1472 if (!ply->idriver->ichunk(ply, &int16, sizeof(int16))) return 0; in ibinary_int16()
1477 static int ibinary_uint16(p_ply ply, double *value) { in ibinary_uint16() argument
1479 if (!ply->idriver->ichunk(ply, &uint16, sizeof(uint16))) return 0; in ibinary_uint16()
1484 static int ibinary_int32(p_ply ply, double *value) { in ibinary_int32() argument
1486 if (!ply->idriver->ichunk(ply, &int32, sizeof(int32))) return 0; in ibinary_int32()
1491 static int ibinary_uint32(p_ply ply, double *value) { in ibinary_uint32() argument
1493 if (!ply->idriver->ichunk(ply, &uint32, sizeof(uint32))) return 0; in ibinary_uint32()
1498 static int ibinary_float32(p_ply ply, double *value) { in ibinary_float32() argument
1500 if (!ply->idriver->ichunk(ply, &float32, sizeof(float32))) return 0; in ibinary_float32()
1505 static int ibinary_float64(p_ply ply, double *value) { in ibinary_float64() argument
1506 return ply->idriver->ichunk(ply, value, sizeof(double)); in ibinary_float64()