]> git.sur5r.net Git - cc65/commitdiff
Optimization
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 2 May 2004 21:01:12 +0000 (21:01 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 2 May 2004 21:01:12 +0000 (21:01 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3007 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/_scanf.c

index 8dbe2cb77ee8ab733d41cf2e5b172472176c7fbe..490b7532917a3d2afdeac42a937695a6e4a4a5b2 100644 (file)
@@ -105,6 +105,20 @@ static unsigned char IsCharInSet (unsigned char C)
 
 
 
+static void InvertCharSet (void)
+/* Invert the character set */
+{
+    asm ("ldy #%b", sizeof (CharSet) - 1);
+    asm ("L1:");
+    asm ("lda %v,y", CharSet);
+    asm ("eor #$FF");
+    asm ("sta %v,y", CharSet);
+    asm ("dey");
+    asm ("bpl L1");
+}
+
+
+
 /*****************************************************************************/
 /*                                  Code                                    */
 /*****************************************************************************/
@@ -206,7 +220,7 @@ static void AssignInt (void)
 
 
 
-int _scanf (struct indesc* D_, const char* format, va_list ap_)
+int _scanf (struct indesc* D_, register const char* format, va_list ap_)
 /* This is the routine used to do the actual work. It is called from several
  * types of wrappers to implement the actual ISO xxscanf functions.
  */
@@ -467,9 +481,7 @@ FlagsDone:
 
                         /* Invert the set if requested */
                         if (Invert) {
-                            for (Start = 0; Start < sizeof (CharSet); ++Start) {
-                                CharSet[Start] ^= 0xFF;
-                            }
+                            InvertCharSet ();
                         }
 
                         /* We have the set in CharSet. Read characters and