Imported Upstream version 2.9.0
[debian/cc1111] / support / tests / internal / testmacro.c
1 #include <SDCCmacro.h>
2 #include <stdio.h>
3
4 static const char *_maps[] = 
5   {
6     "immedzero", "#0",
7     "immedvala", "#0x%02X",
8     "stra", "%s",
9     "port", "z80",
10     "stdlibpath", "{basepath}/lib/{port}",
11     "stdlibname", "{port}.lib",
12     "portouttypeflag", "-i",
13     "srcfilename", "fish",
14     "portoutext", ".ihx",
15     "crt0name", "{stdlibpath}/crt0{portobjext}",
16     "portobjext", ".o",
17     "otherobjfiles", "none",
18     "basepath", "/home/michaelh/sdcc",
19     NULL
20   };
21
22 static hTab *
23 _populateHash(const char **pin)
24 {
25   hTab *pret = NULL;
26
27   while (*pin)
28     {
29       printf("Adding %s -> %s\n", pin[0], pin[1]);
30       shash_add (&pret, pin[0], pin[1]);
31       pin += 2;
32
33     }
34
35   return pret;
36 }
37
38 static void
39 _testEval(hTab *ph, const char *pin, const char *pexpect, ...)
40 {
41   va_list ap;
42   char *pgot;
43
44   va_start(ap, pexpect);
45
46   pgot = mvsprintf(ph, pin, ap);
47
48   if (strcmp(pgot, pexpect) != 0)
49     {
50       printf("Fail: expected: %s, got %s\n", pexpect, pgot);
51     }
52   else
53     {
54       printf("%s -> %s\n", pin, pgot);
55     }
56
57   va_end(ap);
58 }
59
60 void
61 testMacros(void)
62 {
63   hTab *ph = _populateHash(_maps);
64
65   _testEval(ph, "{immedzero}", "#0");
66   _testEval(ph, "{immedvala}", "#0x23", 0x23);
67   _testEval(ph, "{stra}", "#0", "{immedzero}");
68
69   printf("Link command:\n%s\n", 
70          msprintf(ph, 
71                   "link-{port} -n -c -- -b_CODE=0x%04X -b_DATA=0x%04X"
72                   " -m -j -k{stdlibpath} -l{stdlibname} {portouttypeflag}"
73                   " {srcfilename}{portoutext} {crt0name} {srcfilename}{portobjext} {otherobjfiles}", 
74                   0x1234, 0x3456));
75   
76 }
77
78 int
79 main(void)
80 {
81   testMacros();
82
83   return 0; 
84 }