]> git.sur5r.net Git - cc65/blob - test/ref/varargs.c
remote TABs in doc/ and test/
[cc65] / test / ref / varargs.c
1 /*
2   !!DESCRIPTION!! varargs test
3   !!ORIGIN!!
4   !!LICENCE!!     public domain
5 */
6
7 #include <stdlib.h>
8 #include <stdio.h>
9 #include <stdarg.h>
10
11 void chk0(char *format,...);
12 void chk1(int fd,char *format,...);
13
14 #if 0
15 // old workaround for broken varargs
16
17 void chk0(char *format,...){
18     __asm__ ("pha");    // save argument size
19     {
20 //va_list ap;
21 char *ap;
22 char *_format;
23 static char string[0x100];
24
25 //    va_start(ap,format);
26     __asm__ ("pla");       // restore argument size
27     __asm__ ("ldx #$00");  // clear hibyte of AX
28     ap=__AX__;
29     ap+=(char*)&format;
30     // get value of format
31     ap-=2;
32     _format=*((char**)ap);
33
34 //    vsprintf(string,format,ap);
35     vsprintf(&string[0],_format,ap);
36     printf("format:%s,string:%s\n",_format,string);
37 //    va_end(ap);
38
39     }
40 }
41
42 void chk1(int fd,char *format,...){
43     __asm__ ("pha");    // save argument size
44     {
45 //va_list ap;
46 char *ap;
47 char *_format;
48 int _fd;
49 static char string[0x100];
50
51 //    va_start(ap,format);
52     __asm__ ("pla");       // restore argument size
53     __asm__ ("ldx #$00");  // clear hibyte of AX
54     ap=__AX__;
55     ap+=(char*)&format;
56     // get value of fd
57     ap-=2;
58     _fd=*((int*)ap);
59     // get value of format
60     ap-=2;
61     _format=*((char**)ap);
62
63 //    vsprintf(string,format,ap);
64     vsprintf(&string[0],_format,ap);
65     printf("fd:%d,format:%s,string:%s\n",_fd,_format,string);
66 //    va_end(ap);
67
68     }
69 }
70
71 #endif
72
73 void chk0(char *format,...){
74 va_list ap;
75 static char string[0x100];
76     va_start(ap,format);
77     vsprintf(string,format,ap);
78     printf("format:%s,string:%s\n",format,string);
79     va_end(ap);
80 }
81
82 void chk1(int fd,char *format,...){
83 va_list ap;
84 static char string[0x100];
85
86     va_start(ap,format);
87
88     vsprintf(string,format,ap);
89         printf("fd:%d,format:%s,string:%s\n",fd,format,string);
90     va_end(ap);
91 }
92
93 int main(int argc,char **argv) {
94     printf("varargs test\n");
95
96     printf("\nchk0/0:\n");chk0("chk0 %s","arg0");
97     printf("\nchk0/1:\n");chk0("chk0 %s %s","arg0","arg1");
98     printf("\nchk0/2:\n");chk0("chk0 %s %s %s","arg0","arg1","arg2");
99
100     printf("\nchk1/0:\n");chk1(0xfd,"chk1 %s","arg0");
101     printf("\nchk1/1:\n");chk1(0xfd,"chk1 %s %s","arg0","arg1");
102     printf("\nchk1/2:\n");chk1(0xfd,"chk1 %s %s %s","arg0","arg1","arg2");
103
104     return 0;
105 }