TLS now working again.
[people/sha0/gpxe.git] / contrib / bin2intelhex / bin2intelhex.c.simple
1 /* 
2
3   Quick and dirty program to make intel-hex from a binary.
4
5   Written by R.E.Wolff@BitWizard.nl
6   This file is in the public domain
7
8   Typing started:
9
10   Mon Jun 16 00:24:15 MET DST 1997
11
12   programming stopped:
13
14   Mon Jun 16 00:31:27 MET DST 1997
15
16   debugging finished (2 bugs found):
17   Mon Jun 16 00:32:52 MET DST 1997
18
19 --------------------------------------------------------- 
20
21   Doc written in timeout. Everything else in this file was done while
22   the timer was running.
23
24   I promised "Mark Kopecki" that writing the bin-to-intel-hex
25   converter would cost less than 15 minutes, and that it would be more
26   trouble to find a converter on the net than to write the converter
27   myself.  I ended up spending over half an hour searching for
28   spec/converter/docs because of unreachable hosts on the internet. I
29   got a file with docs, after that it was 8 minutes.....
30
31 --------------------------------------------------------- 
32
33 */
34
35
36 #include <stdio.h>
37 #include <unistd.h>
38
39 /* Intel Hex format:
40    
41    ll aaaa tt dd....dd cc
42  
43    ll = length
44    aaaa = address
45    tt = type
46    dd....dd = data
47    cc = checksum.
48 */
49
50
51 int main (int argc, char **argv)
52 {
53   unsigned char buf[32];
54   int addr = 0;
55   int n,i;
56
57   while ((n = read (0, buf+4, 16)) > 0) {
58     buf[0] = n;
59     buf[1] = addr >> 8;
60     buf[2] = addr & 0xff;
61     buf[3] = 0x00;
62     buf[4+n] = 0x00;
63
64     for (i=0;i<4+n;i++)
65       buf[4+n] -= buf[i];
66     printf (":");
67     for (i=0;i<= 4+n;i++)
68       printf ("%02x", buf[i]);
69     printf ("\n");
70     addr += n;
71   }
72   printf (":0000000001ff\n");
73   exit (0);
74 }