/*
- !!DESCRIPTION!! varargs test\r
- !!ORIGIN!!\r
- !!LICENCE!! public domain\r
-*/\r
-\r
-#include <stdlib.h>\r
-#include <stdio.h>\r
-#include <stdarg.h>\r
-\r
-void chk0(char *format,...);\r
-void chk1(int fd,char *format,...);\r
-\r
-#if 0\r
-// old workaround for broken varargs\r
-\r
-void chk0(char *format,...){\r
- __asm__ ("pha"); // save argument size\r
- {\r
-//va_list ap;\r
-char *ap;\r
-char *_format;\r
-static char string[0x100];\r
-\r
-// va_start(ap,format);\r
- __asm__ ("pla"); // restore argument size\r
- __asm__ ("ldx #$00"); // clear hibyte of AX\r
- ap=__AX__;\r
- ap+=(char*)&format;\r
- // get value of format\r
- ap-=2;\r
- _format=*((char**)ap);\r
-\r
-// vsprintf(string,format,ap);\r
- vsprintf(&string[0],_format,ap);\r
- printf("format:%s,string:%s\n",_format,string);\r
-// va_end(ap);\r
-\r
- }\r
-}\r
-\r
-void chk1(int fd,char *format,...){\r
- __asm__ ("pha"); // save argument size\r
- {\r
-//va_list ap;\r
-char *ap;\r
-char *_format;\r
-int _fd;\r
-static char string[0x100];\r
-\r
-// va_start(ap,format);\r
- __asm__ ("pla"); // restore argument size\r
- __asm__ ("ldx #$00"); // clear hibyte of AX\r
- ap=__AX__;\r
- ap+=(char*)&format;\r
- // get value of fd\r
- ap-=2;\r
- _fd=*((int*)ap);\r
- // get value of format\r
- ap-=2;\r
- _format=*((char**)ap);\r
-\r
-// vsprintf(string,format,ap);\r
- vsprintf(&string[0],_format,ap);\r
- printf("fd:%d,format:%s,string:%s\n",_fd,_format,string);\r
-// va_end(ap);\r
-\r
- }\r
-}\r
-\r
-#endif\r
-\r
-void chk0(char *format,...){\r
-va_list ap;\r
-static char string[0x100];\r
- va_start(ap,format);\r
- vsprintf(string,format,ap);\r
- printf("format:%s,string:%s\n",format,string);\r
- va_end(ap);\r
-}\r
-\r
-void chk1(int fd,char *format,...){\r
-va_list ap;\r
-static char string[0x100];\r
-\r
- va_start(ap,format);\r
-\r
- vsprintf(string,format,ap);\r
- printf("fd:%d,format:%s,string:%s\n",fd,format,string);\r
- va_end(ap);\r
+ !!DESCRIPTION!! varargs test
+ !!ORIGIN!!
+ !!LICENCE!! public domain
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+void chk0(char *format,...);
+void chk1(int fd,char *format,...);
+
+#if 0
+// old workaround for broken varargs
+
+void chk0(char *format,...){
+ __asm__ ("pha"); // save argument size
+ {
+//va_list ap;
+char *ap;
+char *_format;
+static char string[0x100];
+
+// va_start(ap,format);
+ __asm__ ("pla"); // restore argument size
+ __asm__ ("ldx #$00"); // clear hibyte of AX
+ ap=__AX__;
+ ap+=(char*)&format;
+ // get value of format
+ ap-=2;
+ _format=*((char**)ap);
+
+// vsprintf(string,format,ap);
+ vsprintf(&string[0],_format,ap);
+ printf("format:%s,string:%s\n",_format,string);
+// va_end(ap);
+
+ }
+}
+
+void chk1(int fd,char *format,...){
+ __asm__ ("pha"); // save argument size
+ {
+//va_list ap;
+char *ap;
+char *_format;
+int _fd;
+static char string[0x100];
+
+// va_start(ap,format);
+ __asm__ ("pla"); // restore argument size
+ __asm__ ("ldx #$00"); // clear hibyte of AX
+ ap=__AX__;
+ ap+=(char*)&format;
+ // get value of fd
+ ap-=2;
+ _fd=*((int*)ap);
+ // get value of format
+ ap-=2;
+ _format=*((char**)ap);
+
+// vsprintf(string,format,ap);
+ vsprintf(&string[0],_format,ap);
+ printf("fd:%d,format:%s,string:%s\n",_fd,_format,string);
+// va_end(ap);
+
+ }
}
-int main(int argc,char **argv) {\r
- printf("varargs test\n");\r
-\r
- printf("\nchk0/0:\n");chk0("chk0 %s","arg0");\r
- printf("\nchk0/1:\n");chk0("chk0 %s %s","arg0","arg1");\r
- printf("\nchk0/2:\n");chk0("chk0 %s %s %s","arg0","arg1","arg2");\r
-\r
- printf("\nchk1/0:\n");chk1(0xfd,"chk1 %s","arg0");\r
- printf("\nchk1/1:\n");chk1(0xfd,"chk1 %s %s","arg0","arg1");\r
- printf("\nchk1/2:\n");chk1(0xfd,"chk1 %s %s %s","arg0","arg1","arg2");\r
-\r
+#endif
+
+void chk0(char *format,...){
+va_list ap;
+static char string[0x100];
+ va_start(ap,format);
+ vsprintf(string,format,ap);
+ printf("format:%s,string:%s\n",format,string);
+ va_end(ap);
+}
+
+void chk1(int fd,char *format,...){
+va_list ap;
+static char string[0x100];
+
+ va_start(ap,format);
+
+ vsprintf(string,format,ap);
+ printf("fd:%d,format:%s,string:%s\n",fd,format,string);
+ va_end(ap);
+}
+
+int main(int argc,char **argv) {
+ printf("varargs test\n");
+
+ printf("\nchk0/0:\n");chk0("chk0 %s","arg0");
+ printf("\nchk0/1:\n");chk0("chk0 %s %s","arg0","arg1");
+ printf("\nchk0/2:\n");chk0("chk0 %s %s %s","arg0","arg1","arg2");
+
+ printf("\nchk1/0:\n");chk1(0xfd,"chk1 %s","arg0");
+ printf("\nchk1/1:\n");chk1(0xfd,"chk1 %s %s","arg0","arg1");
+ printf("\nchk1/2:\n");chk1(0xfd,"chk1 %s %s %s","arg0","arg1","arg2");
+
return 0;
-}\r
+}