📄 showme.c
字号:
{
FILE *infile;
char inputline[INPUTLINESIZE];
char *stringptr;
int extras;
int nodemarks;
int segmentmarks;
int index;
int nodenumber, edgenumber, holenumber;
int maxnode;
int i, j;
int smallerr;
REAL x, y;
if (!quiet) {
printf("Opening %s.\n", fname);
}
infile = fopen(fname, "r");
if (infile == (FILE *) NULL) {
printf(" Error: Cannot access file %s.\n", fname);
return 1;
}
stringptr = readline(inputline, infile, fname);
*pnodes = (int) strtol (stringptr, &stringptr, 0);
if (*pnodes == 0) {
if (!loaded[inc][NODE]) {
if (load_image(inc, NODE)) {
return 1;
}
}
maxnode = nodes[inc];
*xmin = xlo[inc][NODE];
*ymin = ylo[inc][NODE];
*xmax = xhi[inc][NODE];
*ymax = yhi[inc][NODE];
} else {
if (*pnodes < 1) {
printf(" Error: %s contains %d points.\n", fname, *pnodes);
return 1;
}
maxnode = *pnodes;
}
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
*dim = 2;
} else {
*dim = (int) strtol (stringptr, &stringptr, 0);
}
if (*dim < 1) {
printf(" Error: %s has dimensionality %d.\n", fname, *dim);
return 1;
}
if (*dim != 2) {
printf(" I only understand two-dimensional meshes.\n");
return 1;
}
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
extras = 0;
} else {
extras = (int) strtol (stringptr, &stringptr, 0);
}
if (extras < 0) {
printf(" Error: %s has negative value for number of attributes.\n",
fname);
return 1;
}
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
nodemarks = 0;
} else {
nodemarks = (int) strtol (stringptr, &stringptr, 0);
}
if (nodemarks < 0) {
printf(" Warning: %s has negative value for number of point markers.\n",
fname);
}
if (nodemarks > 1) {
printf(
" Warning: %s has value greater than one for number of point markers.\n",
fname);
}
if (*pnodes > 0) {
*nodeptr = (REAL *) malloc((*pnodes + 1) * *dim * sizeof(REAL));
if (*nodeptr == (REAL *) NULL) {
printf(" Out of memory.\n");
return 1;
}
index = *dim;
smallerr = 1;
for (i = 0; i < *pnodes; i++) {
stringptr = readline(inputline, infile, fname);
nodenumber = (int) strtol (stringptr, &stringptr, 0);
if ((i == 0) && (*firstnumber == -1)) {
if (nodenumber == 0) {
*firstnumber = 0;
} else {
*firstnumber = 1;
}
}
if ((nodenumber != *firstnumber + i) && (smallerr)) {
printf(" Warning: Points in %s are not numbered correctly.\n",
fname);
printf(" (starting with point %d).\n", *firstnumber + i);
smallerr = 0;
}
for (j = 0; j < *dim; j++) {
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
printf("Error: Point %d is missing a coordinate in %s.\n",
*firstnumber + i, fname);
free(*nodeptr);
return 1;
}
(*nodeptr)[index++] = (REAL) strtod(stringptr, &stringptr);
}
}
}
stringptr = readline(inputline, infile, fname);
*edges = (int) strtol (stringptr, &stringptr, 0);
if (*edges < 0) {
printf(" Error: %s contains %d segments.\n", fname, *edges);
free(*nodeptr);
return 1;
}
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
segmentmarks = 0;
} else {
segmentmarks = (int) strtol (stringptr, &stringptr, 0);
}
if (segmentmarks < 0) {
printf(" Error: %s has negative value for number of segment markers.\n",
fname);
free(*nodeptr);
return 1;
}
if (segmentmarks > 1) {
printf(
" Error: %s has value greater than one for number of segment markers.\n",
fname);
free(*nodeptr);
return 1;
}
*edgeptr = (int *) malloc(((*edges + 1) << 1) * sizeof(int));
if (*edgeptr == (int *) NULL) {
printf(" Out of memory.\n");
free(*nodeptr);
return 1;
}
index = 2;
smallerr = 1;
for (i = *firstnumber; i < *firstnumber + *edges; i++) {
stringptr = readline(inputline, infile, fname);
edgenumber = (int) strtol (stringptr, &stringptr, 0);
if ((edgenumber != i) && (smallerr)) {
printf(" Warning: Segments in %s are not numbered correctly.\n",
fname);
printf(" (starting with segment %d).\n", i);
smallerr = 0;
}
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
printf("Error: Segment %d is missing its endpoints in %s.\n", i, fname);
free(*nodeptr);
free(*edgeptr);
return 1;
}
(*edgeptr)[index] = (int) strtol (stringptr, &stringptr, 0) + 1 -
*firstnumber;
if (((*edgeptr)[index] < 1) || ((*edgeptr)[index] > maxnode)) {
printf("Error: Segment %d has invalid endpoint in %s.\n", i, fname);
return 1;
}
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
printf("Error: Segment %d is missing an endpoint in %s.\n", i, fname);
free(*nodeptr);
free(*edgeptr);
return 1;
}
(*edgeptr)[index + 1] = (int) strtol (stringptr, &stringptr, 0) + 1 -
*firstnumber;
if (((*edgeptr)[index + 1] < 1) || ((*edgeptr)[index + 1] > maxnode)) {
printf("Error: Segment %d has invalid endpoint in %s.\n", i, fname);
return 1;
}
index += 2;
}
stringptr = readline(inputline, infile, fname);
*holes = (int) strtol (stringptr, &stringptr, 0);
if (*holes < 0) {
printf(" Error: %s contains %d holes.\n", fname, *holes);
free(*nodeptr);
free(*edgeptr);
return 1;
}
*holeptr = (REAL *) malloc((*holes + 1) * *dim * sizeof(REAL));
if (*holeptr == (REAL *) NULL) {
printf(" Out of memory.\n");
free(*nodeptr);
free(*edgeptr);
return 1;
}
index = *dim;
smallerr = 1;
for (i = *firstnumber; i < *firstnumber + *holes; i++) {
stringptr = readline(inputline, infile, fname);
holenumber = (int) strtol (stringptr, &stringptr, 0);
if ((holenumber != i) && (smallerr)) {
printf(" Warning: Holes in %s are not numbered correctly.\n", fname);
printf(" (starting with hole %d).\n", i);
smallerr = 0;
}
for (j = 0; j < *dim; j++) {
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
printf("Error: Hole %d is missing a coordinate in %s.\n", i,
fname);
free(*nodeptr);
free(*edgeptr);
free(*holeptr);
return 1;
}
(*holeptr)[index++] = (REAL) strtod(stringptr, &stringptr);
}
}
fclose(infile);
if (*pnodes > 0) {
index = *dim;
*xmin = *xmax = (*nodeptr)[index];
*ymin = *ymax = (*nodeptr)[index + 1];
for (i = 2; i <= *pnodes; i++) {
index += *dim;
x = (*nodeptr)[index];
y = (*nodeptr)[index + 1];
if (x < *xmin) {
*xmin = x;
}
if (y < *ymin) {
*ymin = y;
}
if (x > *xmax) {
*xmax = x;
}
if (y > *ymax) {
*ymax = y;
}
}
}
index = *dim;
for (i = 1; i <= *holes; i++) {
x = (*holeptr)[index];
y = (*holeptr)[index + 1];
if (x < *xmin) {
*xmin = x;
}
if (y < *ymin) {
*ymin = y;
}
if (x > *xmax) {
*xmax = x;
}
if (y > *ymax) {
*ymax = y;
}
index += *dim;
}
return 0;
}
int load_ele(fname, firstnumber, nodes, elems, corners, ptr)
char *fname;
int firstnumber;
int nodes;
int *elems;
int *corners;
int **ptr;
{
FILE *infile;
char inputline[INPUTLINESIZE];
char *stringptr;
int extras;
int index;
int elemnumber;
int i, j;
int smallerr;
if (!quiet) {
printf("Opening %s.\n", fname);
}
infile = fopen(fname, "r");
if (infile == (FILE *) NULL) {
printf(" Error: Cannot access file %s.\n", fname);
return 1;
}
stringptr = readline(inputline, infile, fname);
*elems = (int) strtol (stringptr, &stringptr, 0);
if (*elems < 1) {
printf(" Error: %s contains %d triangles.\n", fname, *elems);
return 1;
}
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
*corners = 3;
} else {
*corners = (int) strtol (stringptr, &stringptr, 0);
}
if (*corners < 3) {
printf(" Error: Triangles in %s have only %d corners.\n", fname,
*corners);
return 1;
}
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
extras = 0;
} else {
extras = (int) strtol (stringptr, &stringptr, 0);
}
if (extras < 0) {
printf(" Error: %s has negative value for extra fields.\n", fname);
return 1;
}
*ptr = (int *) malloc((*elems + 1) * 3 * sizeof(int));
if (*ptr == (int *) NULL) {
printf(" Out of memory.\n");
return 1;
}
index = 3;
smallerr = 1;
for (i = firstnumber; i < firstnumber + *elems; i++) {
stringptr = readline(inputline, infile, fname);
elemnumber = (int) strtol (stringptr, &stringptr, 0);
if ((elemnumber != i) && (smallerr)) {
printf(" Warning: Triangles in %s are not numbered correctly.\n",
fname);
printf(" (starting with triangle %d).\n", i);
smallerr = 0;
}
for (j = 0; j < 3; j++) {
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
printf("Error: Triangle %d is missing a corner in %s.\n", i, fname);
free(*ptr);
return 1;
}
(*ptr)[index] = (int) strtol (stringptr, &stringptr, 0) + 1 -
firstnumber;
if (((*ptr)[index] < 1) || ((*ptr)[index] > nodes)) {
printf("Error: Triangle %d has invalid corner in %s.\n", i, fname);
return 1;
}
index++;
}
}
fclose(infile);
return 0;
}
int load_edge(fname, firstnumber, nodes, edges, edgeptr, normptr)
char *fname;
int firstnumber;
int nodes;
int *edges;
int **edgeptr;
REAL **normptr;
{
FILE *infile;
char inputline[INPUTLINESIZE];
char *stringptr;
int index;
int edgenumber;
int edgemarks;
int i;
int smallerr;
if (!quiet) {
printf("Opening %s.\n", fname);
}
infile = fopen(fname, "r");
if (infile == (FILE *) NULL) {
printf(" Error: Cannot access file %s.\n", fname);
return 1;
}
stringptr = readline(inputline, infile, fname);
*edges = (int) strtol (stringptr, &stringptr, 0);
if (*edges < 1) {
printf(" Error: %s contains %d edges.\n", fname, *edges);
return 1;
}
stringptr = findfield(stringptr);
if (*stringptr == '\0') {
edgemarks = 0;
} else {
edgemarks = (int) strtol (stringptr, &stringptr, 0);
}
if (edgemarks < 0) {
printf(" Error: %s has negative value for number of edge markers.\n",
fname);
return 1;
}
if (edgemarks > 1) {
printf(
" Error: %s has value greater than one for number of edge markers.\n",
fname);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -