]> git.sur5r.net Git - cc65/blobdiff - libsrc/common/sscanf.c
Added mouse module from C64
[cc65] / libsrc / common / sscanf.c
index dd10eb06743d2d6814a3fd3148a7e570b844ee33..fdbf440584e116341830b3dc117e60755fa075f3 100644 (file)
 
 
 
+static char get (struct indesc* d)
+/* Read a character from the input string and return it */
+{
+    char C;
+    if (C = d->buf[d->ridx]) {
+       /* Increment index only if end not reached */
+       ++d->ridx;
+    }
+    return C;
+}
+
+
+
 int sscanf (const char* str, const char* format, ...)
 /* Standard C function */
 {
@@ -28,8 +41,9 @@ int sscanf (const char* str, const char* format, ...)
     /* Initialize the indesc struct. We leave all fields uninitialized that we
      * don't need
      */
-    id.buf  = (char*) str;     
-    id.fill = strlen (str);
+    id.fin  = (infunc) get;
+    id.buf  = (char*) str;
+    id.ridx = 0;
 
     /* Setup for variable arguments */
     va_start (ap, format);
@@ -37,7 +51,7 @@ int sscanf (const char* str, const char* 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);
+    return _scanf (&id, format, ap);
 }