📄 showme.c
字号:
line_width = 1;
bw_ps = 0;
start_image = ELE;
filename[0] = '\0';
for (i = 1; i < argc; i++) {
if (argv[i][0] == '-') {
for (j = 1; argv[i][j] != '\0'; j++) {
if (argv[i][j] == 'f') {
fillelem = 1;
}
if (argv[i][j] == 'w') {
if ((argv[i][j + 1] >= '1') && (argv[i][j + 1] <= '9')) {
line_width = 0;
while ((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) {
j++;
line_width = line_width * 10 + (int) (argv[i][j] - '0');
}
if (line_width > 100) {
printf("Error: Line width cannot exceed 100.\n");
line_width = 1;
}
}
}
if (argv[i][j] == 'b') {
bw_ps = 1;
}
if (argv[i][j] == 'Q') {
quiet = 1;
}
if ((argv[i][j] == 'h') || (argv[i][j] == 'H') ||
(argv[i][j] == '?')) {
info();
}
}
} else {
strcpy(filename, argv[i]);
}
}
if (filename[0] == '\0') {
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -