-
Notifications
You must be signed in to change notification settings - Fork 0
/
printmulticode.c
117 lines (103 loc) · 2.65 KB
/
printmulticode.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
* File: printmulticode.c
* Author: nvcleemp
*
* Created on February 4, 2010, 9:52 AM
*
* Program that reads graphs in multicode and prints the code in text form.
*/
#include "printmulticode.h"
char read_2byte_number(FILE *f, unsigned short *n, int endian) {
unsigned char c[2];
if (fread(&c[0], sizeof (unsigned char), 2, f) < 2) {
return (2);
}
if (endian == BIG_ENDIAN) {
*n = c[0]*256 + c[1];
} else {
*n = c[1]*256 + c[0];
}
return (1);
}
char read_old_or_new(FILE *f, boolean bignum, int endian, unsigned short *number) {
unsigned char k;
if (bignum) {
if (read_2byte_number(f, number, endian) == 2) {
return (2);
}
} else {
if (fread(&k, sizeof (unsigned char), 1, f) == 0) {
return (2);
}
*number = (unsigned short) k;
}
//fprintf(outputFile, "%d ", *number);
return (1);
}
char readAndWriteMultiCodeNoHeader(FILE *f, FILE *out, int endian) {
int i, n;
unsigned short signum, number;
if (read_old_or_new(f, FALSE, endian, &signum) == 2) {
return (feof(f) ? 0 : 2);
}
//if the code starts with a zero, all the entries are two bytes
//else the number we just read was the order of the graph
fprintf(out, "%d ", signum);
if (signum == 0) {
if (read_old_or_new(f, TRUE, endian, &number) == 2) {
DEBUGMSG("Error while reading")
return (2);
}
fprintf(out, "%d ", number);
} else {
number = signum;
}
if ((n = (int) number) > MAXN) {
return (3);
}
i = 1;
while (i < n) {
if (read_old_or_new(f, signum == 0, endian, &number) == 2) {
DEBUGMSG("Error while reading")
return (2);
}
fprintf(out, "%d ", number);
if (number == 0) {
DEBUGMSG("next vertex")
i++;
}
}
fprintf(out, "\n");
return (1);
}
/*
*
*/
int main(int argc, char** argv) {
/*=========== commandline parsing ===========*/
//int c;
//char *name = argv[0];
int endian = defaultEndian;
/*
while ((c = getopt(argc, argv, "h")) != -1) {
switch (c) {
case 'h':
help(name);
return EXIT_SUCCESS;
default:
usage(name);
return EXIT_FAILURE;
}
}
*/
// check the non-option arguments
//if (argc - optind != 0) {
// usage(name);
// return EXIT_FAILURE;
//}
unsigned long count = 0;
while(readAndWriteMultiCodeNoHeader(stdin, stdout, endian)==(char)1){
count++;
}
return EXIT_SUCCESS;
}