char* dgc_next_n_words(char *str, int n) { int i; char *result; result = str; for (i = 0; i < n; i++) result = dgc_next_word(result); return result; }
int dgc_transform_read(dgc_transform_t t, const char *filename) { FILE *fp; char *err, *mark, *unit, line[1001]; double arg, x, y, z; /* start with identity transform */ dgc_transform_identity(t); fp = fopen(filename, "r"); if(fp == NULL) { dgc_warning("Error: could not open transform file %s.\n", filename); return -1; } do { err = fgets(line, 1000, fp); if(err != NULL) { unit = dgc_next_word(line); mark = dgc_next_word(unit); if(strncasecmp(line, "rx ", 3) == 0) { arg = strtod(mark, &mark); if(strncasecmp(unit, "deg", 3) == 0) arg = dgc_d2r(arg); dgc_transform_rotate_x(t, arg); } else if(strncasecmp(line, "ry ", 3) == 0) { arg = strtod(mark, &mark); if(strncasecmp(unit, "deg", 3) == 0) arg = dgc_d2r(arg); dgc_transform_rotate_y(t, arg); } else if(strncasecmp(line, "rz ", 3) == 0) { arg = strtod(mark, &mark); if(strncasecmp(unit, "deg", 3) == 0) arg = dgc_d2r(arg); dgc_transform_rotate_z(t, arg); } else if(strncasecmp(line, "t ", 2) == 0) { char *a = strdup("test"); x = strtod(mark, &mark); y = strtod(mark, &mark); z = strtod(mark, &mark); if(strncasecmp(unit, "in", 2) == 0) { x *= 0.0254; y *= 0.0254; z *= 0.0254; } else if(strncasecmp(unit, "cm", 2) == 0) { x *= 0.01; y *= 0.01; z *= 0.01; } dgc_transform_translate(t, x, y, z); } else { dgc_warning("Error: could not parse line \"%s\" from %s\n", line, filename); return -1; } } } while(err != NULL); fclose(fp); return 0; }
int dgc_transform_read_string(dgc_transform_t t, char *str) { int done; char *end, *mark, *mark2, *unit; char line[1001]; double arg, x, y, z; /* start with identity transform */ dgc_transform_identity(t); if(str != NULL) { mark = str; done = 0; do { end = strchr(mark, '\n'); if(end == NULL) { strcpy(line, mark); done = 1; } else { strncpy(line, mark, end - mark + 1); line[end - mark + 1] = '\0'; mark = end + 1; } if(strlen(line) > 0) { unit = dgc_next_word(line); mark2 = dgc_next_word((char *)unit); if(strncasecmp(line, "rx ", 3) == 0) { arg = strtod(mark2, &mark2); if(strncasecmp(unit, "deg", 3) == 0) arg = dgc_d2r(arg); dgc_transform_rotate_x(t, arg); } else if(strncasecmp(line, "ry ", 3) == 0) { arg = strtod(mark2, &mark2); if(strncasecmp(unit, "deg", 3) == 0) arg = dgc_d2r(arg); dgc_transform_rotate_y(t, arg); } else if(strncasecmp(line, "rz ", 3) == 0) { arg = strtod(mark2, &mark2); if(strncasecmp(unit, "deg", 3) == 0) arg = dgc_d2r(arg); dgc_transform_rotate_z(t, arg); } else if(strncasecmp(line, "t ", 2) == 0) { x = strtod(mark2, &mark2); y = strtod(mark2, &mark2); z = strtod(mark2, &mark2); if(strncasecmp(unit, "in", 2) == 0) { x *= 0.0254; y *= 0.0254; z *= 0.0254; } else if(strncasecmp(unit, "cm", 2) == 0) { x *= 0.01; y *= 0.01; z *= 0.01; } dgc_transform_translate(t, x, y, z); } else { dgc_warning("Error: could not parse line \"%s\" from transform\n", line); return -1; } } } while(!done); } return 0; }