[brlcad-commits] SF.net SVN: brlcad:[39823] brlcad/trunk/src/libged/red.c
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <sta...@us...> - 2010-07-15 01:08:06
|
Revision: 39823 http://brlcad.svn.sourceforge.net/brlcad/?rev=39823&view=rev Author: starseeker Date: 2010-07-15 01:08:00 +0000 (Thu, 15 Jul 2010) Log Message: ----------- Successfully identified a matrix, as well as the remainder string that consitutes the actual comb name Modified Paths: -------------- brlcad/trunk/src/libged/red.c Modified: brlcad/trunk/src/libged/red.c =================================================================== --- brlcad/trunk/src/libged/red.c 2010-07-15 00:47:31 UTC (rev 39822) +++ brlcad/trunk/src/libged/red.c 2010-07-15 01:08:00 UTC (rev 39823) @@ -233,17 +233,35 @@ floatcnt = 0; float_locations[0].rm_so = 0; float_locations[0].rm_eo = name_end - name_start; - while (floatcnt < 16 && floatcnt != -1) { + while (floatcnt < 16 && floatcnt >= 0) { if (!regexec(&matrix_entry, currptr + name_start, matrix_entry.re_nsub, float_locations, REG_STARTEND)) { floatcnt++; float_locations[0].rm_so = float_locations[0].rm_eo; float_locations[0].rm_eo = name_end; printf("floatcnt: %d\n", floatcnt); } else { - floatcnt = -1; + floatcnt = -1 * floatcnt - 1; } } printf("floatcnt: %d\n", floatcnt); + if (floatcnt >= 16) { + /* Possible matrix - use matrix regex to locate it */ + float_locations[0].rm_so = 0; + float_locations[0].rm_eo = name_end - name_start; + if (!regexec(&full_matrix, currptr + name_start, full_matrix.re_nsub, float_locations, REG_STARTEND)) { + bu_vls_trunc(®exresult, 0); + bu_vls_strncpy(®exresult, currptr + name_start + float_locations[0].rm_so, float_locations[0].rm_eo - float_locations[0].rm_so); + printf("Found Matrix!: regex result: %s\n", bu_vls_addr(®exresult)); + bu_vls_trunc(®exresult, 0); + bu_vls_strncpy(®exresult, currptr + name_start, float_locations[0].rm_so); + printf("Comb name sans Matrix: regex result: %s\n", bu_vls_addr(®exresult)); + } else { + printf("Yikes! Found 16 or more float matches in a comb string but no valid matrix!!\n"); + } + } + if (floatcnt < -1 && (floatcnt + 1) < -4) { + printf("More than 4 floats found without a matrix present - possible invalid matrix?\n"); + } } name_start = name_end + result_locations[0].rm_eo - 1; treecumulative += result_locations[0].rm_eo; @@ -266,6 +284,21 @@ } } printf("floatcnt: %d\n", floatcnt); + if (floatcnt >= 16) { + /* Possible matrix - use matrix regex to locate it */ + float_locations[0].rm_so = 0; + float_locations[0].rm_eo = name_end - name_start; + if (!regexec(&full_matrix, currptr + name_start, full_matrix.re_nsub, float_locations, REG_STARTEND)) { + bu_vls_trunc(®exresult, 0); + bu_vls_strncpy(®exresult, currptr + name_start + float_locations[0].rm_so, float_locations[0].rm_eo - float_locations[0].rm_so); + printf("Found Matrix!: regex result: %s\n", bu_vls_addr(®exresult)); + bu_vls_trunc(®exresult, 0); + bu_vls_strncpy(®exresult, currptr + name_start, float_locations[0].rm_so); + printf("Comb name sans Matrix: regex result: %s\n", bu_vls_addr(®exresult)); + } else { + printf("Yikes! Found 16 or more float matches in a comb string but no valid matrix!!\n"); + } + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |