2 !!DESCRIPTION!! varargs test
\r
4 !!LICENCE!! public domain
\r
11 void chk0(char *format,...);
\r
12 void chk1(int fd,char *format,...);
\r
15 // old workaround for broken varargs
\r
17 void chk0(char *format,...){
\r
18 __asm__ ("pha"); // save argument size
\r
23 static char string[0x100];
\r
25 // va_start(ap,format);
\r
26 __asm__ ("pla"); // restore argument size
\r
27 __asm__ ("ldx #$00"); // clear hibyte of AX
\r
30 // get value of format
\r
32 _format=*((char**)ap);
\r
34 // vsprintf(string,format,ap);
\r
35 vsprintf(&string[0],_format,ap);
\r
36 printf("format:%s,string:%s\n",_format,string);
\r
42 void chk1(int fd,char *format,...){
\r
43 __asm__ ("pha"); // save argument size
\r
49 static char string[0x100];
\r
51 // va_start(ap,format);
\r
52 __asm__ ("pla"); // restore argument size
\r
53 __asm__ ("ldx #$00"); // clear hibyte of AX
\r
59 // get value of format
\r
61 _format=*((char**)ap);
\r
63 // vsprintf(string,format,ap);
\r
64 vsprintf(&string[0],_format,ap);
\r
65 printf("fd:%d,format:%s,string:%s\n",_fd,_format,string);
\r
73 void chk0(char *format,...){
\r
75 static char string[0x100];
\r
76 va_start(ap,format);
\r
77 vsprintf(string,format,ap);
\r
78 printf("format:%s,string:%s\n",format,string);
\r
82 void chk1(int fd,char *format,...){
\r
84 static char string[0x100];
\r
86 va_start(ap,format);
\r
88 vsprintf(string,format,ap);
\r
89 printf("fd:%d,format:%s,string:%s\n",fd,format,string);
\r
93 int main(int argc,char **argv) {
\r
94 printf("varargs test\n");
\r
96 printf("\nchk0/0:\n");chk0("chk0 %s","arg0");
\r
97 printf("\nchk0/1:\n");chk0("chk0 %s %s","arg0","arg1");
\r
98 printf("\nchk0/2:\n");chk0("chk0 %s %s %s","arg0","arg1","arg2");
\r
100 printf("\nchk1/0:\n");chk1(0xfd,"chk1 %s","arg0");
\r
101 printf("\nchk1/1:\n");chk1(0xfd,"chk1 %s %s","arg0","arg1");
\r
102 printf("\nchk1/2:\n");chk1(0xfd,"chk1 %s %s %s","arg0","arg1","arg2");
\r