summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/scramble.c62
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);