Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F27033029
copyg.c
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Authored By
Unknown
Size
6 KB
Referenced Files
None
Subscribers
None
copyg.c
View Options
/* copyg.c version 2.1; B D McKay, Jun 2015 */
#define USAGE "copyg [-gszfp#:#qhx] [infile [outfile]]"
#define HELPTEXT \
" Copy a file of graphs with possible format conversion.\n\
\n\
-g Use graph6 format for output\n\
-s Use sparse6 format for output\n\
-z Use digraph6 format for output\n\
-i Use incremental sparse6 format for output\n\
In the absence of -g, -s, -z or -i, the format\n\
depends on the header or, if none, the first input line.\n\
As an exception, digraphs are always written in digraph6.\n\
\n\
-p# -p#:# \n\
Specify range of input lines (first is 1)\n\
This can fail if the input has incremental lines.\n\
-f With -p, assume input lines of fixed length\n\
(ignored if header or first line has sparse6 format).\n\
-I# Have at most this number of incremental steps\n\
in a row. Implies -i. \n\
\n\
-h Write a header.\n\
-x Don't write a header.\n\
In the absence of -h and -x, a header is written if\n\
there is one in the input.\n\
\n\
-q Suppress auxiliary output.\n"
/***********************************************************************/
#include
"gtools.h"
int
main
(
int
argc
,
char
*
argv
[])
{
graph
*
g
,
*
gprev
,
*
gbase
;
int
m
,
n
,
codetype
;
char
*
infilename
,
*
outfilename
;
FILE
*
infile
,
*
outfile
;
int
outcode
;
nauty_counter
nin
;
int
argnum
,
j
,
nprev
,
mprev
;
char
*
arg
,
sw
;
boolean
sswitch
,
fswitch
,
pswitch
,
qswitch
,
gswitch
;
boolean
hswitch
,
xswitch
,
iswitch
,
Iswitch
,
zswitch
;
boolean
badargs
,
digraph
;
long
pval1
,
pval2
,
maxin
,
refresh
,
inclines
;
HELP
;
PUTVERSION
;
iswitch
=
Iswitch
=
sswitch
=
fswitch
=
pswitch
=
FALSE
;
gswitch
=
qswitch
=
xswitch
=
hswitch
=
zswitch
=
FALSE
;
infilename
=
outfilename
=
NULL
;
argnum
=
0
;
badargs
=
FALSE
;
for
(
j
=
1
;
!
badargs
&&
j
<
argc
;
++
j
)
{
arg
=
argv
[
j
];
if
(
arg
[
0
]
==
'-'
&&
arg
[
1
]
!=
'\0'
)
{
++
arg
;
while
(
*
arg
!=
'\0'
)
{
sw
=
*
arg
++
;
SWBOOLEAN
(
's'
,
sswitch
)
else
SWBOOLEAN
(
'g'
,
gswitch
)
else
SWBOOLEAN
(
'z'
,
zswitch
)
else
SWBOOLEAN
(
'q'
,
qswitch
)
else
SWBOOLEAN
(
'f'
,
fswitch
)
else
SWBOOLEAN
(
'h'
,
hswitch
)
else
SWBOOLEAN
(
'i'
,
iswitch
)
else
SWBOOLEAN
(
'x'
,
xswitch
)
else
SWLONG
(
'I'
,
Iswitch
,
refresh
,
"copyg -I"
)
else
SWRANGE
(
'p'
,
":-"
,
pswitch
,
pval1
,
pval2
,
"copyg -p"
)
else
badargs
=
TRUE
;
}
}
else
{
++
argnum
;
if
(
argnum
==
1
)
infilename
=
arg
;
else
if
(
argnum
==
2
)
outfilename
=
arg
;
else
badargs
=
TRUE
;
}
}
if
(
Iswitch
)
iswitch
=
TRUE
;
if
((
sswitch
!=
0
)
+
(
gswitch
!=
0
)
+
(
iswitch
!=
0
)
+
(
zswitch
!=
0
)
>
1
)
gt_abort
(
">E copyg: -s, -g, -z and -i/-I are incompatible
\n
"
);
if
(
hswitch
&&
xswitch
)
gt_abort
(
">E copyg: -h and -x are incompatible
\n
"
);
if
(
badargs
||
argnum
>
2
)
{
fprintf
(
stderr
,
">E Usage: %s
\n
"
,
USAGE
);
GETHELP
;
exit
(
1
);
}
if
(
!
qswitch
)
{
fprintf
(
stderr
,
">A copyg"
);
if
(
sswitch
||
gswitch
||
iswitch
||
Iswitch
||
fswitch
||
zswitch
||
pswitch
||
xswitch
||
hswitch
)
fprintf
(
stderr
,
" -"
);
if
(
sswitch
)
fprintf
(
stderr
,
"s"
);
if
(
gswitch
)
fprintf
(
stderr
,
"g"
);
if
(
zswitch
)
fprintf
(
stderr
,
"z"
);
if
(
hswitch
)
fprintf
(
stderr
,
"h"
);
if
(
Iswitch
)
fprintf
(
stderr
,
"I%ld"
,
refresh
);
else
if
(
iswitch
)
fprintf
(
stderr
,
"i"
);
if
(
xswitch
)
fprintf
(
stderr
,
"x"
);
if
(
fswitch
)
fprintf
(
stderr
,
"f"
);
if
(
pswitch
)
writerange
(
stderr
,
'p'
,
pval1
,
pval2
);
if
(
argnum
>
0
)
fprintf
(
stderr
,
" %s"
,
infilename
);
if
(
argnum
>
1
)
fprintf
(
stderr
,
" %s"
,
outfilename
);
fprintf
(
stderr
,
"
\n
"
);
fflush
(
stderr
);
}
if
(
infilename
&&
infilename
[
0
]
==
'-'
)
infilename
=
NULL
;
infile
=
opengraphfile
(
infilename
,
&
codetype
,
fswitch
,
pswitch
?
pval1
:
1
);
if
(
!
infile
)
exit
(
1
);
if
(
!
infilename
)
infilename
=
"stdin"
;
if
(
!
outfilename
||
outfilename
[
0
]
==
'-'
)
{
outfilename
=
"stdout"
;
outfile
=
stdout
;
}
else
if
((
outfile
=
fopen
(
outfilename
,
"w"
))
==
NULL
)
{
fprintf
(
stderr
,
"Can't open output file %s
\n
"
,
outfilename
);
gt_abort
(
NULL
);
}
if
(
gswitch
)
outcode
=
GRAPH6
;
else
if
(
sswitch
||
iswitch
)
outcode
=
SPARSE6
;
else
if
(
zswitch
)
outcode
=
DIGRAPH6
;
else
if
((
codetype
&
GRAPH6
))
outcode
=
GRAPH6
;
else
if
((
codetype
&
SPARSE6
))
outcode
=
SPARSE6
;
else
if
((
codetype
&
DIGRAPH6
))
outcode
=
DIGRAPH6
;
else
{
outcode
=
GRAPH6
;
fprintf
(
stderr
,
">W copyg doesn't handle this graph format, writing graph6.
\n
"
);
}
if
(
hswitch
||
(
!
xswitch
&&
(
codetype
&
HAS_HEADER
)))
{
if
(
outcode
==
SPARSE6
)
writeline
(
outfile
,
SPARSE6_HEADER
);
else
if
(
outcode
==
DIGRAPH6
)
writeline
(
outfile
,
DIGRAPH6_HEADER
);
else
writeline
(
outfile
,
GRAPH6_HEADER
);
}
nin
=
0
;
if
(
!
pswitch
||
pval2
==
NOLIMIT
)
maxin
=
NOLIMIT
;
else
if
(
pval1
<
1
)
maxin
=
pval2
;
else
maxin
=
pval2
-
pval1
+
1
;
gprev
=
NULL
;
nprev
=
mprev
=
1
;
inclines
=
0
;
while
(
nin
<
maxin
||
maxin
==
NOLIMIT
)
{
if
((
g
=
readgg_inc
(
infile
,
NULL
,
0
,
&
m
,
&
n
,
gprev
,
mprev
,
nprev
,
&
digraph
))
==
NULL
)
break
;
++
nin
;
if
(
iswitch
)
{
if
(
digraph
)
gt_abort
(
">Z incremental sparse6 is incompatible with digraphs
\n
"
);
gbase
=
gprev
;
if
(
nprev
!=
n
||
mprev
!=
m
)
gbase
=
NULL
;
if
(
Iswitch
>
0
&&
inclines
==
refresh
)
gbase
=
NULL
;
if
(
gbase
==
NULL
)
inclines
=
0
;
else
++
inclines
;
writeis6
(
outfile
,
g
,
gbase
,
m
,
n
);
}
else
if
(
outcode
==
readg_code
)
writelast
(
outfile
);
else
if
(
digraph
)
writed6
(
outfile
,
g
,
m
,
n
);
else
if
(
outcode
==
SPARSE6
)
writes6
(
outfile
,
g
,
m
,
n
);
else
if
(
outcode
==
DIGRAPH6
)
writed6
(
outfile
,
g
,
m
,
n
);
else
writeg6
(
outfile
,
g
,
m
,
n
);
if
(
gprev
)
FREES
(
gprev
);
gprev
=
g
;
nprev
=
n
;
mprev
=
m
;
}
if
(
!
qswitch
)
fprintf
(
stderr
,
">Z "
COUNTER_FMT
" graphs copied from %s to %s
\n
"
,
nin
,
infilename
,
outfilename
);
exit
(
0
);
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Tue, Oct 27, 3:38 PM (1 d, 2 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
405796
Default Alt Text
copyg.c (6 KB)
Attached To
Mode
R272 SoC_NEM_Synthesis
Attached
Detach File
Event Timeline