2
#if !(defined __MSC__) && !(defined __ABSC__)
3
#if defined(netbsd) || defined(freebsd)
15
#if (defined __MSC__) || (defined __ABSC__)
16
/** only used for x=dir[1024] **/
18
#define getwd(x) _getcwd(x,1024)
19
#define chdir(x) _chdir(x)
21
#define getwd(x) getcwd_(x,1024)
25
#if defined(netbsd) || defined(freebsd)
29
#include "../machine.h"
34
extern char* my_basename();
36
extern char* dirname();
37
extern int CheckGraphName();
38
extern char *StripGraph();
42
static int CompString(s1, s2)
45
return strcmp((char*)*s1,(char*)*s2);
48
void C2F(saveg)(path,lpath,name,lname,directed,node_number,tail,head,
49
node_name,node_type,node_x,node_y,node_color,node_diam,node_border,
50
node_font_size,node_demand,
51
edge_name,edge_color,edge_width,edge_hi_width,edge_font_size,
52
edge_length,edge_cost,edge_min_cap,edge_max_cap,edge_q_weight,edge_q_orig,
54
default_node_diam,default_node_border,default_edge_width,
55
default_edge_hi_width,default_font_size,ma)
56
char *path; int *lpath;
57
char *name; int *lname,*directed,*node_number,*tail,*head;
59
int *node_type,*node_x,*node_y,*node_color,*node_diam,*node_border;
63
int *edge_color,*edge_width,*edge_hi_width,*edge_font_size;
64
double *edge_length,*edge_cost,*edge_min_cap,*edge_max_cap;
65
double *edge_q_weight,*edge_q_orig,*edge_weight;
66
int *default_node_diam,*default_node_border,*default_edge_width;
67
int *default_edge_hi_width,*default_font_size;
71
#if !(defined __MSC__) && !(defined __ABSC__)
77
char description[2*MAXNAM];
78
char dir[1024], nname[2*MAXNAM];
82
/* check uniqueness of node names */
83
if (*node_number != 1) {
84
if ((lar = (char **)malloc(sizeof(char *) * *node_number)) == NULL) {
85
cerro("Running out of memory");
88
for (i = 0; i < *node_number; i++) lar[i] = (*node_name)[i];
89
qsort((char*)lar,*node_number,sizeof(char*),(PF)CompString);
90
for (i = 0; i < *node_number - 1; i++) {
91
if (!strcmp(lar[i],lar[i+1])) {
93
"Bad graph file. Node \"%s\" is duplicated",lar[i]);
99
if (!strcmp(lar[*node_number - 2],lar[*node_number - 1])) {
101
"Bad graph file. Node \"%s\" is duplicated",lar[*node_number - 2]);
112
if (!strcmp(path," ")) {
117
#if (defined __MSC__) || (defined __ABSC__)
123
it= chdir_(path,strlen(path));
124
chdir_(dir,strlen(dir));
130
if ((dirp=opendir(path)) != NULL) {
136
strcpy(nname,StripGraph(my_basename(path)));
137
if (dirname(path) == NULL) getwd(dir);
138
else strcpy(dir,dirname(path));
141
#if !(defined __MSC__) && !(defined __ABSC__)
142
if ((dirp=opendir(dir)) == NULL) {
143
sprintf(description,"Directory \"%s\" does not exist",dir);
149
if(CheckGraphName(nname,dir)) {
150
sprintf(description,"Graph \"%s\" already exists in directory \"%s\"",
160
strcat(fname,".graph");
161
f = fopen(fname,"w");
164
"Unable to write file in directory %s, check access",dir);
168
/* Write graph to file */
170
fprintf(f,"GRAPH TYPE (0 = UNDIRECTED, 1 = DIRECTED), DEFAULTS (NODE DIAMETER, NODE BORDER, ARC WIDTH, HILITED ARC WIDTH, FONTSIZE):\n");
171
fprintf(f,"%d %d %d %d %d %d\n",*directed,*default_node_diam,
172
*default_node_border,*default_edge_width,*default_edge_hi_width,
175
fprintf(f,"NUMBER OF ARCS:\n");
178
fprintf(f,"NUMBER OF EDGES:\n");
180
fprintf(f,"%d\n",*ma);
181
fprintf(f,"NUMBER OF NODES:\n");
182
fprintf(f,"%d\n",*node_number);
183
fprintf(f,"****************************************\n");
185
/* Write arcs to files */
188
fprintf(f,"DESCRIPTION OF ARCS:\n");
189
fprintf(f,"ARC NAME, TAIL NODE NAME, HEAD NODE NAME, COLOR, WIDTH, HIWIDTH, FONTSIZE\n");
192
fprintf(f,"DESCRIPTION OF EDGES:\n");
193
fprintf(f,"EDGE NAME, NODE NAME, NODE NAME, COLOR, WIDTH, HIWIDTH, FONTSIZE\n");
196
(f,"COST, MIN CAP, MAX CAP, LENGTH, Q WEIGHT, Q ORIGIN, WEIGHT\n");
199
for (i = 0; i < *ma; i++) {
200
fprintf(f,"%s %s %s %d %d %d %d\n",(*edge_name)[i],(*node_name)[tail[i]-1],
201
(*node_name)[head[i]-1],edge_color[i],edge_width[i],
202
edge_hi_width[i],edge_font_size[i]);
203
fprintf(f,"%e %e %e %e %e %e %e\n",
204
edge_cost[i],edge_min_cap[i],edge_max_cap[i],edge_length[i],
205
edge_q_weight[i],edge_q_orig[i],edge_weight[i]);
208
/* Write nodes to files */
210
fprintf(f,"****************************************\n");
211
fprintf(f,"DESCRIPTION OF NODES:\n");
212
fprintf(f,"NODE NAME, POSSIBLE TYPE (1 = SINK, 2 = SOURCE)\n");
213
fprintf(f,"X, Y, COLOR, DIAMETER, BORDER, FONTSIZE\n");
214
fprintf(f,"DEMAND\n");
217
for (i = 0; i < *node_number; i++) {
218
if (node_type[i] == 0)
219
fprintf(f,"%s\n",(*node_name)[i]);
220
else fprintf(f,"%s %d\n",(*node_name)[i],node_type[i]);
221
fprintf(f,"%d %d %d %d %d %d \n",
222
node_x[i],node_y[i],node_color[i],node_diam[i],
223
node_border[i],node_font_size[i]);
224
fprintf(f,"%e\n",node_demand[i]);