diff options
Diffstat (limited to 'tools/scramble.c')
-rw-r--r-- | tools/scramble.c | 62 |
1 files changed, 46 insertions, 16 deletions
diff --git a/tools/scramble.c b/tools/scramble.c index 5b59cf3d64..a5c8caea3e 100644 --- a/tools/scramble.c +++ b/tools/scramble.c | |||
@@ -25,18 +25,27 @@ int main (int argc, char** argv) | |||
25 | unsigned long length,i,slen; | 25 | unsigned long length,i,slen; |
26 | unsigned char *inbuf,*outbuf; | 26 | unsigned char *inbuf,*outbuf; |
27 | unsigned short crc=0; | 27 | unsigned short crc=0; |
28 | unsigned char header[6]; | 28 | unsigned char header[24]; |
29 | unsigned char *iname = argv[1]; | ||
30 | unsigned char *oname = argv[2]; | ||
31 | int headerlen = 6; | ||
29 | FILE* file; | 32 | FILE* file; |
30 | 33 | ||
31 | if (argc < 3) { | 34 | if (argc < 3) { |
32 | printf("usage: %s <input file> <output file>\n",argv[0]); | 35 | printf("usage: %s [-fm] <input file> <output file>\n",argv[0]); |
33 | return -1; | 36 | return -1; |
34 | } | 37 | } |
38 | |||
39 | if (argv[1][0] == '-') { /* assume any parameter is -fm :-) */ | ||
40 | headerlen = 24; | ||
41 | iname = argv[2]; | ||
42 | oname = argv[3]; | ||
43 | } | ||
35 | 44 | ||
36 | /* open file */ | 45 | /* open file */ |
37 | file = fopen(argv[1],"rb"); | 46 | file = fopen(iname,"rb"); |
38 | if (!file) { | 47 | if (!file) { |
39 | perror(argv[1]); | 48 | perror(iname); |
40 | return -1; | 49 | return -1; |
41 | } | 50 | } |
42 | fseek(file,0,SEEK_END); | 51 | fseek(file,0,SEEK_END); |
@@ -52,7 +61,7 @@ int main (int argc, char** argv) | |||
52 | /* read file */ | 61 | /* read file */ |
53 | i=fread(inbuf,1,length,file); | 62 | i=fread(inbuf,1,length,file); |
54 | if ( !i ) { | 63 | if ( !i ) { |
55 | perror(argv[1]); | 64 | perror(iname); |
56 | return -1; | 65 | return -1; |
57 | } | 66 | } |
58 | fclose(file); | 67 | fclose(file); |
@@ -71,25 +80,46 @@ int main (int argc, char** argv) | |||
71 | crc += inbuf[i]; | 80 | crc += inbuf[i]; |
72 | 81 | ||
73 | /* make header */ | 82 | /* make header */ |
74 | header[0] = (length >> 24) & 0xff; | 83 | memset(header, 0, sizeof header); |
75 | header[1] = (length >> 16) & 0xff; | 84 | if (headerlen == 6) { |
76 | header[2] = (length >> 8) & 0xff; | 85 | header[0] = (length >> 24) & 0xff; |
77 | header[3] = length & 0xff; | 86 | header[1] = (length >> 16) & 0xff; |
78 | header[4] = (crc >> 8) & 0xff; | 87 | header[2] = (length >> 8) & 0xff; |
79 | header[5] = crc & 0xff; | 88 | header[3] = length & 0xff; |
89 | header[4] = (crc >> 8) & 0xff; | ||
90 | header[5] = crc & 0xff; | ||
91 | } | ||
92 | else { | ||
93 | header[0] = | ||
94 | header[1] = | ||
95 | header[2] = | ||
96 | header[3] = 0xff; /* ??? */ | ||
97 | |||
98 | header[6] = (crc >> 8) & 0xff; | ||
99 | header[7] = crc & 0xff; | ||
100 | |||
101 | header[11] = 4; /* ??? */ | ||
102 | |||
103 | header[15] = headerlen; /* really? */ | ||
104 | |||
105 | header[20] = (length >> 24) & 0xff; | ||
106 | header[21] = (length >> 16) & 0xff; | ||
107 | header[22] = (length >> 8) & 0xff; | ||
108 | header[23] = length & 0xff; | ||
109 | } | ||
80 | 110 | ||
81 | /* write file */ | 111 | /* write file */ |
82 | file = fopen(argv[2],"wb"); | 112 | file = fopen(oname,"wb"); |
83 | if ( !file ) { | 113 | if ( !file ) { |
84 | perror(argv[2]); | 114 | perror(oname); |
85 | return -1; | 115 | return -1; |
86 | } | 116 | } |
87 | if ( !fwrite(header,6,1,file) ) { | 117 | if ( !fwrite(header,headerlen,1,file) ) { |
88 | perror(argv[2]); | 118 | perror(oname); |
89 | return -1; | 119 | return -1; |
90 | } | 120 | } |
91 | if ( !fwrite(outbuf,length,1,file) ) { | 121 | if ( !fwrite(outbuf,length,1,file) ) { |
92 | perror(argv[2]); | 122 | perror(oname); |
93 | return -1; | 123 | return -1; |
94 | } | 124 | } |
95 | fclose(file); | 125 | fclose(file); |