]> git.sur5r.net Git - cc65/commitdiff
scanf modules (currently not working)
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 13 Mar 2001 07:59:17 +0000 (07:59 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 13 Mar 2001 07:59:17 +0000 (07:59 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@624 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/.cvsignore
libsrc/common/_scanf.h [new file with mode: 0644]
libsrc/common/sscanf.c [new file with mode: 0644]

index 789eb14f2962c27ff9a7e58f3dbd951340006ef6..ec614502a3d1f3beac8f4ad275ae0a2adef92bad 100644 (file)
@@ -1,4 +1,4 @@
-*.lst
+*.lst  
 _afailed.s
 _fopen.s
 _hextab.s
@@ -29,6 +29,7 @@ puts.s
 qsort.s
 realloc.s
 rewind.s
+sscanf.s
 strtok.s
 strxfrm.s
 vprintf.s
diff --git a/libsrc/common/_scanf.h b/libsrc/common/_scanf.h
new file mode 100644 (file)
index 0000000..6634c75
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * _scanf.h
+ *
+ * (C) Copyright 2001 Ullrich von Bassewitz (uz@cc65.org)
+ *
+ */
+
+
+
+#ifndef __SCANF_H
+#define __SCANF_H
+
+
+
+/* Forward */
+struct indesc;
+
+/* Type of the function that is called to input data */
+typedef void (*infunc) (struct indesc* desc, const char* buf, unsigned count);
+
+
+
+/* Control structure passed to the low level worker function.
+ * Beware: The low level functions will access the structure on the assembly
+ * level, so check this when altering the structure.
+ */
+struct indesc {
+    char*              buf;            /* Pointer to input buffer */
+    unsigned   size;           /* Size of input buffer */
+    unsigned   fill;           /* Fill mark of input buffer */
+    unsigned   ridx;           /* Read index of input buffer */
+    infunc     fin;            /* Pointer to input routine */
+};
+
+
+
+/* Internal scanning routine */
+int _scanf (struct indesc* d, const char* format, va_list ap);
+
+
+
+/* End of _scanf.h */
+#endif
+
+
+
diff --git a/libsrc/common/sscanf.c b/libsrc/common/sscanf.c
new file mode 100644 (file)
index 0000000..dd10eb0
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * sscanf.c
+ *
+ * (C) Copyright 2001 Ullrich von Bassewitz (uz@cc65.org)
+ *
+ */
+
+
+
+#include <stdio.h>
+#include <string.h>
+#include "_scanf.h"
+
+
+
+/*****************************************************************************/
+/*                                          Code                                    */
+/*****************************************************************************/
+
+
+
+int sscanf (const char* str, const char* format, ...)
+/* Standard C function */
+{
+    struct indesc id;
+    va_list ap;
+
+    /* Initialize the indesc struct. We leave all fields uninitialized that we
+     * don't need
+     */
+    id.buf  = (char*) str;     
+    id.fill = strlen (str);
+
+    /* Setup for variable arguments */
+    va_start (ap, format);
+
+    /* Call the internal function. Since we know that va_end won't do anything,
+     * we will save the call and return the value directly.
+     */
+    return _scanf (&id, (const char*) va_fix (ap, 2), ap);
+}
+
+
+