📄 showme.c
字号:
syntax(); } if (!strcmp(&filename[strlen(filename) - 5], ".node")) { filename[strlen(filename) - 5] = '\0'; start_image = NODE; } if (!strcmp(&filename[strlen(filename) - 5], ".poly")) { filename[strlen(filename) - 5] = '\0'; start_image = POLY; } if (!strcmp(&filename[strlen(filename) - 4], ".ele")) { filename[strlen(filename) - 4] = '\0'; start_image = ELE; } if (!strcmp(&filename[strlen(filename) - 5], ".edge")) { filename[strlen(filename) - 5] = '\0'; start_image = EDGE; } if (!strcmp(&filename[strlen(filename) - 5], ".part")) { filename[strlen(filename) - 5] = '\0'; start_image = PART; } if (!strcmp(&filename[strlen(filename) - 4], ".adj")) { filename[strlen(filename) - 4] = '\0'; start_image = ADJ; } increment = 0; j = 1; while (filename[j] != '\0') { if ((filename[j] == '.') && (filename[j + 1] != '\0')) { increment = j + 1; } j++; } meshnumber = 0; if (increment > 0) { j = increment; do { if ((filename[j] >= '0') && (filename[j] <= '9')) { meshnumber = meshnumber * 10 + (int) (filename[j] - '0'); } else { increment = 0; } j++; } while (filename[j] != '\0'); } if (increment > 0) { filename[increment - 1] = '\0'; } if (meshnumber == 0) { start_inc = 0; loweriteration = 0; } else { start_inc = 1; loweriteration = meshnumber - 1; } set_filenames(filename, loweriteration);}void free_inc(inc)int inc;{ if (loaded[inc][NODE]) { free(nodeptr[inc]); } if (loaded[inc][POLY]) { if (polynodes[inc] > 0) { free(polynodeptr[inc]); } free(polyedgeptr[inc]); free(polyholeptr[inc]); } if (loaded[inc][ELE]) { free(eleptr[inc]); } if (loaded[inc][PART]) { free(partpart[inc]); free(partcenter[inc]); free(partshift[inc]); } if (loaded[inc][EDGE]) { free(edgeptr[inc]); free(normptr[inc]); } if (loaded[inc][ADJ]) { free(adjptr[inc]); } if (loaded[inc][VORO]) { free(vnodeptr[inc]); free(vedgeptr[inc]); free(vnormptr[inc]); }}void move_inc(inc)int inc;{ int i; free_inc(1 - inc); for (i = 0; i < IMAGE_TYPES; i++) { loaded[1 - inc][i] = loaded[inc][i]; loaded[inc][i] = 0; xlo[1 - inc][i] = xlo[inc][i]; ylo[1 - inc][i] = ylo[inc][i]; xhi[1 - inc][i] = xhi[inc][i]; yhi[1 - inc][i] = yhi[inc][i]; } nodes[1 - inc] = nodes[inc]; node_dim[1 - inc] = node_dim[inc]; nodeptr[1 - inc] = nodeptr[inc]; polynodes[1 - inc] = polynodes[inc]; poly_dim[1 - inc] = poly_dim[inc]; polyedges[1 - inc] = polyedges[inc]; polyholes[1 - inc] = polyholes[inc]; polynodeptr[1 - inc] = polynodeptr[inc]; polyedgeptr[1 - inc] = polyedgeptr[inc]; polyholeptr[1 - inc] = polyholeptr[inc]; elems[1 - inc] = elems[inc]; ele_corners[1 - inc] = ele_corners[inc]; eleptr[1 - inc] = eleptr[inc]; edges[1 - inc] = edges[inc]; edgeptr[1 - inc] = edgeptr[inc]; normptr[1 - inc] = normptr[inc]; subdomains[1 - inc] = subdomains[inc]; partpart[1 - inc] = partpart[inc]; partcenter[1 - inc] = partcenter[inc]; partshift[1 - inc] = partshift[inc]; adjsubdomains[1 - inc] = adjsubdomains[inc]; adjptr[1 - inc] = adjptr[inc]; vnodes[1 - inc] = vnodes[inc]; vnode_dim[1 - inc] = vnode_dim[inc]; vnodeptr[1 - inc] = vnodeptr[inc]; vedges[1 - inc] = vedges[inc]; vedgeptr[1 - inc] = vedgeptr[inc]; vnormptr[1 - inc] = vnormptr[inc]; firstnumber[1 - inc] = firstnumber[inc]; firstnumber[inc] = -1;}void unload_inc(inc)int inc;{ int i; current_image = NOTHING; for (i = 0; i < IMAGE_TYPES; i++) { loaded[inc][i] = 0; firstnumber[inc] = -1; }}void showme_init(){ current_image = NOTHING; current_inc = 0; explosion = STARTEXPLOSION; unload_inc(0); unload_inc(1);}char *readline(string, infile, infilename)char *string;FILE *infile;char *infilename;{ char *result; do { result = fgets(string, INPUTLINESIZE, infile); if (result == (char *) NULL) { printf(" Error: Unexpected end of file in %s.\n", infilename); exit(1); } while ((*result != '\0') && (*result != '#') && (*result != '.') && (*result != '+') && (*result != '-') && ((*result < '0') || (*result > '9'))) { result++; } } while ((*result == '#') || (*result == '\0')); return result;}char *findfield(string)char *string;{ char *result; result = string; while ((*result != '\0') && (*result != '#') && (*result != ' ') && (*result != '\t')) { result++; } while ((*result != '\0') && (*result != '#') && (*result != '.') && (*result != '+') && (*result != '-') && ((*result < '0') || (*result > '9'))) { result++; } if (*result == '#') { *result = '\0'; } return result;}int load_node(fname, firstnumber, nodes, dim, ptr, xmin, ymin, xmax, ymax)char *fname;int *firstnumber;int *nodes;int *dim;REAL **ptr;REAL *xmin;REAL *ymin;REAL *xmax;REAL *ymax;{ FILE *infile; char inputline[INPUTLINESIZE]; char *stringptr; int extras; int nodemarks; int index; int nodenumber; int i, j; int smallerr; REAL x, y; *xmin = *ymin = 0.0; *xmax = *ymax = 1.0; 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); *nodes = (int) strtol (stringptr, &stringptr, 0); if (*nodes < 3) { printf(" Error: %s contains %d points.\n", fname, *nodes); return 1; } 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); } *ptr = (REAL *) malloc((*nodes + 1) * *dim * sizeof(REAL)); if (*ptr == (REAL *) NULL) { printf(" Out of memory.\n"); return 1; } index = *dim; smallerr = 1; for (i = 0; i < *nodes; 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(*ptr); return 1; } (*ptr)[index++] = (REAL) strtod(stringptr, &stringptr); } } fclose(infile); index = *dim; *xmin = *xmax = (*ptr)[index]; *ymin = *ymax = (*ptr)[index + 1]; for (i = 2; i <= *nodes; i++) { index += *dim; x = (*ptr)[index]; y = (*ptr)[index + 1]; if (x < *xmin) { *xmin = x; } if (y < *ymin) { *ymin = y; } if (x > *xmax) { *xmax = x; } if (y > *ymax) { *ymax = y; } } if (*xmin == *xmax) { *xmin -= 0.5; *xmax += 0.5; } if (*ymin == *ymax) { *ymin -= 0.5; *ymax += 0.5; } return 0;}int load_poly(inc, fname, firstnumber, pnodes, dim, edges, holes, nodeptr, edgeptr, holeptr, xmin, ymin, xmax, ymax)int inc;char *fname;int *firstnumber;int *pnodes;int *dim;int *edges;int *holes;REAL **nodeptr;int **edgeptr;REAL **holeptr;REAL *xmin;REAL *ymin;REAL *xmax;REAL *ymax;{ 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -