Make updates for big endian
[keystone-rtos/ibl.git] / src / util / btoccs / ccs2bin.c
1 /* Convert a ccs file to a raw binary file
2  *
3  *  usage: ccs2bin [-swap] ccsfile binfile
4  */
6 #include <stdio.h>
8 unsigned int swap(unsigned int v)
9 {
10     unsigned int w;
12     w = (((v >> 24) & 0xff) <<  0)  |
13         (((v >> 16) & 0xff) <<  8)  |
14         (((v >>  8) & 0xff) << 16)  |
15         (((v >>  0) & 0xff) << 24);
17     return (w);
19 }
20 FILE *fin  = NULL;
21 FILE *fout = NULL;
22 int doswap = 0;
24 #define USAGE  "usage: %s [-swap] ccsfile binfile"
26 int parseit (int argc, char *argv[])
27 {
28     int i;
30     if ((argc != 3) && (argc != 4))  {
31        fprintf (stderr, USAGE, argv[0]);
32        return (-1);
33     }
35     for (i = 1; i < argc; i++)  {
37         if (!strcmp (argv[i], "-swap"))
38             doswap = 1;
40         else if (fin == NULL)  {
41             fin = fopen (argv[i], "r");
42             if (fin == NULL)  {
43                         fprintf (stderr, "%s: Could not open file %s\n", argv[0], argv[i]);
44                 return (-1);
45             }
47         }  else if (fout == NULL)  {
48             fout = fopen (argv[i], "wb");
49             if (fout == NULL)  {
50                 fprintf (stderr, "%s: Could not open file %s\n", argv[0], argv[i]);
51                 fclose (fin);
52                 return (-1);
53             }
55         } else  {
57             fprintf (stderr, USAGE, argv[0]);
58             fclose (fout);
59             fclose (fin);
60             return (-1);
61         }
62     }
64     return (0);
66 }
68         
72 int main (int argc, char *argv[])
73 {
74         unsigned int n;
75         unsigned int v;
76         unsigned int i;
78         int a, b, c, d;
81         char iline[132];
83     if (parseit (argc, argv))
84         return (-1);
86         fgets (iline, 131, fin);
87         sscanf (iline, "%x %x %x %x %x", &a, &b, &c, &d, &n);
90         for (i = 0; i < n; i++)  {
91                 fgets (iline, 131, fin);
92                 sscanf (&iline[2], "%x", &v);
93         if (doswap)
94             v = swap(v);
95                 fwrite (&v, sizeof(unsigned int), 1, fout);
96         }
98         fclose (fout);
99         fclose (fin);
101         return (0);