]> git.sur5r.net Git - cc65/commitdiff
Fixed tab removal which somehow went wrong
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 14 Feb 2005 09:38:30 +0000 (09:38 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 14 Feb 2005 09:38:30 +0000 (09:38 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3382 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/_scanf.c
libsrc/common/scanf.s
libsrc/conio/cscanf.s
libsrc/conio/vcscanf.s
testcode/lib/scanf-test.c

index 4e8951feec3aae8cc95ace29a08f7c9262b9c395..f59d33c7545cad9876af9aa23a1bbf30293bba35 100644 (file)
@@ -36,42 +36,42 @@ extern void __fastcall__ _seterrno (unsigned char code);
 
 
 /*****************************************************************************/
-/*                             SetJmp return codes              */
+/*                           SetJmp return codes                            */
 /*****************************************************************************/
 
 
 
 enum {
-    RC_OK,                  /* setjmp() call */
-    RC_NOCONV,                  /* No conversion possible */
-    RC_EOF                  /* EOF reached */
+    RC_OK,                              /* setjmp() call */
+    RC_NOCONV,                          /* No conversion possible */
+    RC_EOF                              /* EOF reached */
 };
 
 
 
 /*****************************************************************************/
-/*                           Data                           */
+/*                                  Data                                    */
 /*****************************************************************************/
 
 
 
-static const char*    format;     /* Copy of function argument */
+static const char*    format;           /* Copy of function argument */
 static const struct scanfdata* D_;      /* Copy of function argument */
-static va_list        ap;               /* Copy of function argument */
-static jmp_buf        JumpBuf;   /* "Label" that is used for failures */
-static char           F;             /* Character from format string */
+static va_list        ap;              /* Copy of function argument */
+static jmp_buf        JumpBuf;         /* "Label" that is used for failures */
+static char           F;               /* Character from format string */
 static unsigned       CharCount;        /* Characters read so far */
-static int            C;                       /* Character from input */
-static unsigned       Width;            /* Maximum field width */
-static long           IntVal;     /* Converted int value */
-static int            Assignments;   /* Number of assignments */
+static int            C;               /* Character from input */
+static unsigned       Width;           /* Maximum field width */
+static long           IntVal;          /* Converted int value */
+static int            Assignments;     /* Number of assignments */
 static unsigned char  IntBytes;         /* Number of bytes-1 for int conversions */
 
 /* Flags */
-static bool           Converted;    /* Some object was converted */
-static bool           Positive;         /* Flag for positive value */
-static bool           NoAssign;         /* Suppress assignment */
-static bool           Invert;             /* Do we need to invert the charset? */
+static bool           Converted;       /* Some object was converted */
+static bool           Positive;                /* Flag for positive value */
+static bool           NoAssign;                /* Suppress assignment */
+static bool           Invert;          /* Do we need to invert the charset? */
 static unsigned char  CharSet[(1+UCHAR_MAX)/CHAR_BIT];
 static const unsigned char Bits[CHAR_BIT] = {
     0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
@@ -89,7 +89,7 @@ static const unsigned char Bits[CHAR_BIT] = {
 
 
 /*****************************************************************************/
-/*                           Character sets                       */
+/*                             Character sets                               */
 /*****************************************************************************/
 
 
@@ -107,13 +107,13 @@ static unsigned FindBit (void)
  */
 {
     asm ("pha");
-    asm ("lsr a");           /* Divide by CHAR_BIT */
+    asm ("lsr a");              /* Divide by CHAR_BIT */
     asm ("lsr a");
     asm ("lsr a");
-    asm ("tax");               /* Byte's offset */
+    asm ("tax");                /* Byte's offset */
     asm ("pla");
     asm ("and #%b", CHAR_BIT-1);
-    asm ("tay");               /* Bit's offset */
+    asm ("tay");                /* Bit's offset */
     asm ("lda %v,y", Bits);
     return (unsigned) __AX__;
 }
@@ -139,7 +139,7 @@ static unsigned char IsCharInSet (void)
     /* Get the character from C. */
     asm ("lda #$00");
     asm ("ldx %v+1", C);
-    asm ("bne L1");                 /* EOF never is in the set */
+    asm ("bne L1");                    /* EOF never is in the set */
     asm ("lda %v", C);
     FindBit();
     asm ("and %v,x", CharSet);
@@ -167,7 +167,7 @@ static void InvertCharSet (void)
 
 
 /*****************************************************************************/
-/*                          Code                           */
+/*                                          Code                                    */
 /*****************************************************************************/
 
 
@@ -432,17 +432,17 @@ static void __fastcall__ ScanInt (unsigned char Base)
                 case 'x':
                 case 'X':
                     Base = 16;
-                   Converted = true;
+                   Converted = true;
                     ReadChar ();
                     break;
                 default:
                     Base = 8;
 
-                   /* Restart at the beginning of the number because it might
-                    * be only a single zero digit (which already was read).
-                    */
-                   PushBack ();
-                   C = '0';
+                    /* Restart at the beginning of the number because it might
+                     * be only a single zero digit (which already was read).
+                     */
+                    PushBack ();
+                    C = '0';
             }
         } else {
             Base = 10;
@@ -480,7 +480,7 @@ static char GetFormat (void)
 
 
 int __fastcall__ _scanf (const struct scanfdata* D,
-                  const char* format_, va_list ap_)
+                        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.
  */
@@ -518,72 +518,72 @@ Again:
             /* Check for a conversion */
             if (F != '%') {
 
-               /* Check for a match */
-               if ((bool) isspace ((int) F)) {
+               /* Check for a match */
+               if ((bool) isspace ((int) F)) {
 
-                   /* Special white space handling: Any whitespace in the
+                   /* Special white space handling: Any whitespace in the
                      * format string matches any amount of whitespace including
                      * none(!). So this match will never fail.
-                    */
-                   SkipWhite ();
-                   continue;
-               }
+                    */
+                   SkipWhite ();
+                   continue;
+               }
 
 Percent:
-               /* ### Note:  The opposite test (C == F)
-               ** would be optimized into buggy code!
-               */
-               if (C != (int) F) {
+                /* ### Note:  The opposite test (C == F)
+                ** would be optimized into buggy code!
+                */
+                if (C != (int) F) {
 
-                   /* A mismatch -- we will stop scanning the input,
-                    * and return the number of assigned conversions.
-                    */
-                   goto NoConv;
-                   }
+                    /* A mismatch -- we will stop scanning the input,
+                     * and return the number of assigned conversions.
+                     */
+                    goto NoConv;
+               }
 
-               /* A match -- get the next input character, and continue. */
-               goto Again;
+                /* A match -- get the next input character, and continue. */
+                goto Again;
 
             } else {
 
-               /* A conversion. Skip the percent sign. */
-               /* 0. Check for %% */
-               if (GetFormat () == '%') {
-                   goto Percent;
-                   }
+               /* A conversion. Skip the percent sign. */
+               /* 0. Check for %% */
+               if (GetFormat () == '%') {
+                   goto Percent;
+               }
 
-                 /* 1. Assignment suppression */
-               NoAssign = (F == '*');
-               if (NoAssign) {
-                   GetFormat ();
+               /* 1. Assignment suppression */
+                NoAssign = (F == '*');
+                if (NoAssign) {
+                    GetFormat ();
                 }
 
                 /* 2. Maximum field width */
-                Width     = UINT_MAX;
-               HaveWidth = (bool) isdigit (F);
-               if (HaveWidth) {
-                   Width = 0;
+                       Width     = UINT_MAX;
+                HaveWidth = (bool) isdigit (F);
+                if (HaveWidth) {
+                    Width = 0;
                     do {
                         /* ### Non portable ### */
                         Width = Width * 10 + (F & 0x0F);
-                   } while ((bool) isdigit (GetFormat ()));
+                    } while ((bool) isdigit (GetFormat ()));
                 }
-               if (Width == 0) {
-                   /* Invalid specification */
-                   /* Note:  This method of leaving the function might seem
-                    * to be crude, but it optimizes very well because
-                    * the four exits can share this code.
-                    */
-                   _seterrno (EINVAL);
-                   Assignments = EOF;
-                   PushBack ();
-                   return Assignments;
-               }
-               /* Increment-and-test makes better code than test-and-decrement
-                * does.  So, change the width into a form that can be used in
-                * that way.
-                */
-               Width = ~Width;
+                if (Width == 0) {
+                    /* Invalid specification */
+                    /* Note:  This method of leaving the function might seem
+                     * to be crude, but it optimizes very well because
+                     * the four exits can share this code.
+                     */
+                    _seterrno (EINVAL);
+                    Assignments = EOF;
+                    PushBack ();
+                    return Assignments;
+                }
+                /* Increment-and-test makes better code than test-and-decrement
+                 * does.  So, change the width into a form that can be used in
+                 * that way.
+                 */
+                Width = ~Width;
 
                 /* 3. Length modifier */
                 IntBytes = sizeof(int) - 1;
@@ -593,7 +593,7 @@ Percent:
                             IntBytes = sizeof(char) - 1;
                             ++format;
                         }
-                     GetFormat ();
+                       GetFormat ();
                         break;
 
                     case 'l':
@@ -604,108 +604,108 @@ Percent:
                         /* FALLTHROUGH */
                     case 'j':   /* intmax_t */
                         IntBytes = sizeof(long) - 1;
-                     /* FALLTHROUGH */
+                       /* FALLTHROUGH */
 
                     case 'z':   /* size_t */
                     case 't':   /* ptrdiff_t */
-                     /* Same size as int */
+                       /* Same size as int */
 
                     case 'L':   /* long double - ignore this one */
-                     GetFormat ();
+                       GetFormat ();
                 }
 
                 /* 4. Conversion specifier */
-           switch (F) {
+                switch (F) {
                     /* 'd' and 'u' conversions are actually the same, since the
                      * standard says that even the 'u' modifier allows an
                      * optionally signed integer.
                      */
-                       case 'd':   /* Optionally signed decimal integer */
+                   case 'd':   /* Optionally signed decimal integer */
                     case 'u':
-                           ScanInt (10);
-                           break;
-
-                     case 'i':
-                           /* Optionally signed integer with a base */
-                    ScanInt (0);
-                           break;
-
-                     case 'o':
-                           /* Optionally signed octal integer */
-                           ScanInt (8);
-                   break;
-
-                   case 'x':
-                   case 'X':
-                       /* Optionally signed hexadecimal integer */
-                           ScanInt (16);
-                       break;
-
-                   case 's':
-                       /* Whitespace-terminated string */
-                             SkipWhite ();
-                     CheckEnd ();         /* Is it an input failure? */
+                       ScanInt (10);
+                       break;
+
+                   case 'i':
+                       /* Optionally signed integer with a base */
+                       ScanInt (0);
+                       break;
+
+                   case 'o':
+                       /* Optionally signed octal integer */
+                       ScanInt (8);
+                       break;
+
+                   case 'x':
+                   case 'X':
+                       /* Optionally signed hexadecimal integer */
+                       ScanInt (16);
+                       break;
+
+                   case 's':
+                       /* Whitespace-terminated string */
+                       SkipWhite ();
+                       CheckEnd ();       /* Is it an input failure? */
                         Converted = true;  /* No, conversion will succeed */
-                     if (NoAssign == false) {
-                         S = va_arg (ap, char*);
-                     }
-                        while (C != EOF
-                            && (bool) isspace (C) == false
-                            && ++Width) {
-                         if (NoAssign == false) {
-                               *S++ = C;
-                         }
-                             ReadChar ();
-                     }
-                     /* Terminate the string just read */
-                     if (NoAssign == false) {
-                         *S = '\0';
-                         ++Assignments;
-                     }
-                     break;
-
-                   case 'c':
-                     /* Fixed-length string, NOT zero-terminated */
-                     if (HaveWidth == false) {
-                         /* No width given, default is 1 */
-                         Width = ~1u;
-                     }
-                     CheckEnd ();         /* Is it an input failure? */
-                     Converted = true;  /* No, at least 1 char. available */
-                     if (NoAssign == false) {
-                         S = va_arg (ap, char*);
-                         /* ## This loop is convenient for us, but it isn't
-                          * standard C.  The standard implies that a failure
-                          * shouldn't put anything into the array argument.
-                          */
+                       if (NoAssign == false) {
+                           S = va_arg (ap, char*);
+                       }
+                               while (C != EOF
+                              && (bool) isspace (C) == false
+                              && ++Width) {
+                           if (NoAssign == false) {
+                               *S++ = C;
+                           }
+                           ReadChar ();
+                       }
+                       /* Terminate the string just read */
+                       if (NoAssign == false) {
+                           *S = '\0';
+                           ++Assignments;
+                       }
+                       break;
+
+                    case 'c':
+                       /* Fixed-length string, NOT zero-terminated */
+                       if (HaveWidth == false) {
+                           /* No width given, default is 1 */
+                           Width = ~1u;
+                       }
+                       CheckEnd ();       /* Is it an input failure? */
+                       Converted = true;  /* No, at least 1 char. available */
+                       if (NoAssign == false) {
+                           S = va_arg (ap, char*);
+                           /* ## This loop is convenient for us, but it isn't
+                            * standard C.  The standard implies that a failure
+                            * shouldn't put anything into the array argument.
+                            */
                             while (++Width) {
-                       CheckEnd ();  /* Is it a matching failure? */
+                               CheckEnd ();  /* Is it a matching failure? */
                                 *S++ = C;
                                 ReadChar ();
                             }
-                         ++Assignments;
-                     } else {
+                           ++Assignments;
+                       } else {
                             /* Just skip as many chars as given */
                             while (++Width) {
-                       CheckEnd ();  /* Is it a matching failure? */
+                               CheckEnd ();  /* Is it a matching failure? */
                                 ReadChar ();
                             }
                         }
-                     break;
+                       break;
 
-                   case '[':
-                     /* String using characters from a set */
+                    case '[':
+                       /* String using characters from a set */
                         /* Clear the set */
                         memset (CharSet, 0, sizeof (CharSet));
-                     /* Skip the left-bracket, and test for inversion. */
-                     Invert = (GetFormat () == '^');
+                       /* Skip the left-bracket, and test for inversion. */
+                       Invert = (GetFormat () == '^');
                         if (Invert) {
                             GetFormat ();
                         }
                         if (F == ']') {
-                         /* Empty sets aren't allowed; so, a right-bracket
-                          * at the beginning must be a member of the set.
-                          */
+                           /* Empty sets aren't allowed; so, a right-bracket
+                            * at the beginning must be a member of the set.
+                            */
                             AddCharToSet (F);
                             GetFormat ();
                         }
@@ -716,16 +716,16 @@ Percent:
                                 Start = F;
                                 ++format;
                                 switch (GetFormat ()) {
-                              case '\0':
-                              case ']':
+                                    case '\0':
+                                    case ']':
                                         /* '-' as last char means:  include '-' */
                                         AddCharToSet (Start);
                                         AddCharToSet ('-');
-                              break;
-                              default:
+                                        break;
+                                    default:
                                         /* Include all characters
-                               * that are in the range.
-                               */
+                                         * that are in the range.
+                                         */
                                         while (1) {
                                             AddCharToSet (Start);
                                             if (Start == F) {
@@ -743,11 +743,11 @@ Percent:
                                 GetFormat ();
                             }
                         }
-                     /* Don't go beyond the end of the format string. */
-                     /* (Maybe, this should mean an invalid specification.) */
-                     if (F == '\0') {
-                         --format;
-                     }
+                        /* Don't go beyond the end of the format string. */
+                        /* (Maybe, this should mean an invalid specification.) */
+                        if (F == '\0') {
+                            --format;
+                        }
 
                         /* Invert the set if requested */
                         if (Invert) {
@@ -758,90 +758,90 @@ Percent:
                          * store them into a string while they are part of
                          * the set.
                          */
-                     Match = false;
-                     if (NoAssign == false) {
-                         S = va_arg (ap, char*);
-                     }
+                        Match = false;
+                        if (NoAssign == false) {
+                           S = va_arg (ap, char*);
+                        }
                         while (IsCharInSet () && ++Width) {
-                         if (NoAssign == false) {
+                           if (NoAssign == false) {
                                 *S++ = C;
-                         }
-                         Match = Converted = true;
-                         ReadChar ();
+                            }
+                            Match = Converted = true;
+                            ReadChar ();
+                        }
+                        /* At least one character must match the set. */
+                        if (Match == false) {
+                            goto NoConv;
                         }
-                     /* At least one character must match the set. */
-                     if (Match == false) {
-                         goto NoConv;
-                     }
-                     if (NoAssign == false) {
+                        if (NoAssign == false) {
                             *S = '\0';
-                         ++Assignments;
-                     }
-                     break;
-
-              case 'p':
-                       /* Pointer, general format is 0xABCD.
-                      * %hhp --> zero-page pointer
-                      * %hp --> near pointer
-                      * %lp --> far pointer
-                      */
-                     SkipWhite ();
-                     if (CHAR (C) != '0') {
-                         goto NoConv;
+                            ++Assignments;
+                        }
+                       break;
+
+                    case 'p':
+                       /* Pointer, general format is 0xABCD.
+                         * %hhp --> zero-page pointer
+                         * %hp --> near pointer
+                         * %lp --> far pointer
+                        */
+                       SkipWhite ();
+                        if (CHAR (C) != '0') {
+                           goto NoConv;
+                        }
+                        Converted = true;
+                        ReadChar ();
+                        switch (CHAR (C)) {
+                            case 'x':
+                            case 'X':
+                                break;
+                            default:
+                                goto NoConv;
                         }
-                     Converted = true;
-                     ReadChar ();
-                     switch (CHAR (C)) {
-                         case 'x':
-                         case 'X':
-                          break;
-                         default:
-                          goto NoConv;
-                     }
                         ReadChar ();
                         ReadInt (16);
-                     AssignInt ();
-           break;
-
-              case 'n':
-           /* Store the number of characters consumed so far
-                      * (the read-ahead character hasn't been consumed).
-                      */
-                     IntVal = (long) (CharCount - (C == EOF ? 0u : 1u));
-                     AssignInt ();
-                     /* Don't count it. */
-                     if (NoAssign == false) {
-                         --Assignments;
-                     }
-                     break;
-
-                   case 'S':
-                   case 'C':
-                     /* Wide characters */
-
-                   case 'a':
-                   case 'A':
-                   case 'e':
-                   case 'E':
-                       case 'f':
-                   case 'F':
-                   case 'g':
-                   case 'G':
-                       /* Optionally signed float */
-
-                     /* Those 2 groups aren't implemented. */
-                     _seterrno (ENOSYS);
-                     Assignments = EOF;
-                     PushBack ();
-                     return Assignments;
-
-                   default:
-                     /* Invalid specification */
-                     _seterrno (EINVAL);
-                     Assignments = EOF;
-                     PushBack ();
-                     return Assignments;
-               }
+                        AssignInt ();
+                        break;
+
+                    case 'n':
+                        /* Store the number of characters consumed so far
+                         * (the read-ahead character hasn't been consumed).
+                         */
+                        IntVal = (long) (CharCount - (C == EOF ? 0u : 1u));
+                       AssignInt ();
+                        /* Don't count it. */
+                        if (NoAssign == false) {
+                           --Assignments;
+                        }
+                        break;
+
+                   case 'S':
+                   case 'C':
+                        /* Wide characters */
+
+                   case 'a':
+                   case 'A':
+                   case 'e':
+                   case 'E':
+                   case 'f':
+                   case 'F':
+                   case 'g':
+                   case 'G':
+                       /* Optionally signed float */
+
+                        /* Those 2 groups aren't implemented. */
+                        _seterrno (ENOSYS);
+                        Assignments = EOF;
+                       PushBack ();
+                       return Assignments;
+
+                    default:
+                        /* Invalid specification */
+                        _seterrno (EINVAL);
+                        Assignments = EOF;
+                        PushBack ();
+                        return Assignments;
+                }
             }
         }
     } else {
@@ -852,7 +852,7 @@ NoConv:
          * the number of assignments is returned (the default behaviour).
          */
         if (C == EOF && Converted == false) {
-            Assignments = EOF; /* Special case:  error */
+            Assignments = EOF; /* Special case:  error */
         }
     }
 
index 48bc42d824100dda30b1c01597d59777319dbe7c..e75c92327ba8e0857116ba5fff4a014f7d76472c 100644 (file)
@@ -5,18 +5,18 @@
 ; 2004-12-31, Greg King
 ;
 
-        .export               _scanf
+        .export                _scanf
 
-        .import               _stdin, pushax, addysp, _vfscanf
-        .import               sp:zp, ptr1:zp
+        .import                _stdin, pushax, addysp, _vfscanf
+        .import                sp:zp, ptr1:zp
 
-        .macpack       generic
+        .macpack       generic
 
 ; ----------------------------------------------------------------------------
 ; Code
 ;
 _scanf:
-        sty    ArgSize       ; Number of argument bytes passed in .Y
+        sty    ArgSize         ; Number of argument bytes passed in .Y
 
 ; We are using a (hopefully) clever trick here to reduce code size.  On entry,
 ; the stack pointer points to the last pushed argument of the variable
@@ -28,47 +28,47 @@ _scanf:
 ;   * we will have the address of the Format argument which needs to
 ;     be pushed next.
 
-        lda    _stdin
-        ldx    _stdin+1
-        jsr    pushax
+        lda    _stdin
+        ldx    _stdin+1
+        jsr    pushax
 
 ; Now, calculate the va_list pointer, which does point to Format.
 
-        lda    sp
-        ldx    sp+1
-        add    ArgSize
-        bcc    @L1
+        lda    sp
+        ldx    sp+1
+        add    ArgSize
+        bcc    @L1
         inx
-@L1:    sta        ptr1
-        stx    ptr1+1
+@L1:    sta    ptr1
+        stx    ptr1+1
 
 ; Push a copy of Format.
 
-        ldy    #1
-        lda    (ptr1),y
+        ldy    #1
+        lda    (ptr1),y
         tax
         dey
-        lda    (ptr1),y
-        jsr    pushax
+        lda    (ptr1),y
+        jsr    pushax
 
 ; Load va_list [last and __fastcall__ argument to vfscanf()].
 
-        lda    ptr1
-        ldx    ptr1+1
+        lda    ptr1
+        ldx    ptr1+1
 
 ; Call vfscanf().
 
-        jsr    _vfscanf
+        jsr    _vfscanf
 
 ; Clean up the stack.  We will return what we got from vfscanf().
 
-        ldy    ArgSize
-        jmp    addysp
+        ldy    ArgSize
+        jmp    addysp
 
 ; ----------------------------------------------------------------------------
 ; Data
 ;
         .bss
 ArgSize:
-        .res   1         ; Number of argument bytes
+        .res   1               ; Number of argument bytes
 
index 3725f96fa26ce5d91c6919ccfd9f9d0467896019..6be4dc0dc0687669f87f0609cea6850cf246eb74 100644 (file)
@@ -5,58 +5,58 @@
 ; 2005-01-01, Greg King
 ;
 
-        .export               _cscanf
+        .export                _cscanf
 
-        .import               pushax, addysp, _vcscanf
+        .import                pushax, addysp, _vcscanf
 
-        .macpack       generic
-        .include       "zeropage.inc"
+        .macpack       generic
+        .include       "zeropage.inc"
 
 ; ----------------------------------------------------------------------------
 ; Code
 ;
 _cscanf:
-        sty    ArgSize       ; Number of argument bytes passed in .Y
-        dey         ; subtract size of format pointer
+        sty    ArgSize         ; Number of argument bytes passed in .Y
+        dey                    ; subtract size of format pointer
         dey
         tya
 
 ; Now, calculate the va_list pointer -- which points to format.
 
-        ldx    sp+1
-        add    sp
-        bcc    @L1
+        ldx    sp+1
+        add    sp
+        bcc    @L1
         inx
-@L1:    sta        ptr1
-        stx    ptr1+1
+@L1:    sta    ptr1
+        stx    ptr1+1
 
 ; Push a copy of the format pointer onto the stack.
 
-        ldy    #1
-        lda    (ptr1),y
+        ldy    #1
+        lda    (ptr1),y
         tax
         dey
-        lda    (ptr1),y
-        jsr    pushax
+        lda    (ptr1),y
+        jsr    pushax
 
 ; Load va_list [last and __fastcall__ argument for vcscanf()].
 
-        lda    ptr1
-        ldx    ptr1+1
+        lda    ptr1
+        ldx    ptr1+1
 
 ; Call vcscanf().
 
-        jsr    _vcscanf
+        jsr    _vcscanf
 
 ; Clean up the stack.  We will return what we got from vcscanf().
 
-        ldy    ArgSize
-        jmp    addysp
+        ldy    ArgSize
+        jmp    addysp
 
 ; ----------------------------------------------------------------------------
 ; Data
 ;
         .bss
 ArgSize:
-        .res   1         ; Number of argument bytes
+        .res   1               ; Number of argument bytes
 
index a55704dfdd2e9c47380794f924364d4812791348..87c58515b761208b5886b83a492b17fb387e7880 100644 (file)
@@ -4,20 +4,20 @@
 ; 2005-01-02, Greg King
 ;
 
-        .export               _vcscanf
+        .export                _vcscanf
 
-        .import               _cgetc, _cputc
-        .import               popax, pushax, swapstk
+        .import                _cgetc, _cputc
+        .import                popax, pushax, swapstk
 
-        .include       "../common/_scanf.inc"
+        .include       "../common/_scanf.inc"
 
 
 ; static bool pushed;
 ; static char back;
 ;
         .bss
-pushed: .res    1
-back:   .res      1
+pushed: .res   1
+back:   .res   1
 
         .code
 ; /* Call-back functions:
@@ -39,26 +39,26 @@ back:   .res      1
 ;     return (int)C;
 ;     }
 ;
-get:    ldx        pushed
-        beq    L1
+get:    ldx    pushed
+        beq    L1
 
 ; Return the old, pushed-back character (instead of getting a new one).
 ;
-        dex         ; ldx #>0
-        stx    pushed
-        lda    back
+        dex                    ; ldx #>0
+        stx    pushed
+        lda    back
         rts
 
 ; Directly read the keyboard.
 ;
-L1:     jsr _cgetc
+L1:     jsr    _cgetc
 
 ; Echo the character to the screen.
 ;
         pha
-        jsr    _cputc
+        jsr    _cputc
         pla
-        ldx    #>0
+        ldx    #>0
         rts
 
 
@@ -68,10 +68,10 @@ L1:     jsr _cgetc
 ;     return back = c;
 ;     }
 ;
-unget:  ldx      #1
-        stx    pushed
-        jsr    popax           ; get the first argument
-        sta    back
+unget:  ldx    #1
+        stx    pushed
+        jsr    popax           ; get the first argument
+        sta    back
         rts
 
 
@@ -96,35 +96,35 @@ unget:  ldx      #1
 ;
 ; Beware:  Because ap is a fastcall parameter, we must not destroy .XA.
 ;
-        .proc  _vcscanf
+        .proc  _vcscanf
 
 ; ----------------------------------------------------------------------------
 ; Static, constant scanfdata structure for the _vcscanf routine.
 ;
         .rodata
-d:      .addr        get       ; SCANFDATA::GET
-        .addr  unget       ; SCANFDATA::UNGET
-;       .addr 0             ; SCANFDATA::DATA (not used)
+d:      .addr  get             ; SCANFDATA::GET
+        .addr  unget           ; SCANFDATA::UNGET
+;       .addr  0               ; SCANFDATA::DATA (not used)
 
         .code
-        pha         ; Save low byte of ap
+        pha                    ; Save low byte of ap
         txa
-        pha         ; Save high byte of ap
-        ldx    #0
-        stx    pushed
+        pha                    ; Save high byte of ap
+        ldx    #0
+        stx    pushed
 
 ; Put &d on the stack in front of the format pointer.
 
         lda     #<d
         ldx     #>d
         jsr     swapstk         ; Swap .XA with top-of-stack
-        jsr    pushax         ; Put format pointer back on stack
+        jsr    pushax          ; Put format pointer back on stack
 
 ; Restore ap, and jump to _scanf which will clean up the stack.
 
         pla
         tax
         pla
-        jmp    __scanf
+        jmp    __scanf
         .endproc
 
index a28bfdb1ea53e91caed9334d8608e1f7fcedc763..1f1da6f9e66379018e41ee4edaaf857e17bdd304 100644 (file)
@@ -39,18 +39,18 @@ static const struct {
         const char *input, *format;
         int rvalue;
         enum TYPE {
-               INT,
-               CHAR
-               } type1;
+                INT,
+                CHAR
+                } type1;
         union {
-               int nvalue;
-               const char *svalue;
-               } v1;
+                int nvalue;
+                const char *svalue;
+                } v1;
         enum TYPE type2;
         union {
-               int nvalue;
-               const char *svalue;
-               } v2;
+                int nvalue;
+                const char *svalue;
+                } v2;
         } test_data[] = {
 /* Input sequences for character specifiers must be less than 80 characters
 ** long.  These format strings are allowwed a maximum of two assignment
@@ -177,8 +177,8 @@ int main(void) {
         */
         sscanf("%  \r\n\f\v\t  0", "%%%i", &n1);
         if (n1 != 0)
-               PRINTF("sscanf()'s \"%%%%%%i\" couldn't scan either a \"%%\" "
-                      "or a single zero digit.\r\n\n");
+                PRINTF("sscanf()'s \"%%%%%%i\" couldn't scan either a \"%%\" "
+                       "or a single zero digit.\r\n\n");
 
         /* Test scanf()'s return-value:  EOF if input ends before the first
         ** conversion-attempt begins; an assignment-count, otherwise.
@@ -188,60 +188,60 @@ int main(void) {
         PRINTF("Testing scanf()'s return-value,\r\nconversions, and assignments...\r\n");
         for (t = 0; t < ARRAYSIZE(test_data); ++t) {
 
-               /* Prefill the arguments with zeroes. */
-               n1 = n2 = 0;
-               memset(s1, '\0', sizeof s1);
-               memset(s2, '\0', sizeof s2);
+                /* Prefill the arguments with zeroes. */
+                n1 = n2 = 0;
+                memset(s1, '\0', sizeof s1);
+                memset(s2, '\0', sizeof s2);
 
-               c=sscanf(test_data[t].input, test_data[t].format,
-                      /* Avoid warning messages about different
-                      ** pointer-types, by casting them to void-pointers.
-                      */
-                      test_data[t].type1 == INT ? (void *)&n1 : (void *)s1,
-                      test_data[t].type2 == INT ? (void *)&n2 : (void *)s2);
-               if (c != test_data[t].rvalue)
-                     PRINTF("Test #%u returned %d instead of %d.\r\n",
-                            t + 1, c, test_data[t].rvalue);
+                c=sscanf(test_data[t].input, test_data[t].format,
+                         /* Avoid warning messages about different
+                         ** pointer-types, by casting them to void-pointers.
+                         */
+                         test_data[t].type1 == INT ? (void *)&n1 : (void *)s1,
+                         test_data[t].type2 == INT ? (void *)&n2 : (void *)s2);
+                if (c != test_data[t].rvalue)
+                        PRINTF("Test #%u returned %d instead of %d.\r\n",
+                               t + 1, c, test_data[t].rvalue);
 
-               if (test_data[t].type1 == INT) {
-                     if (test_data[t].v1.nvalue != n1)
-                          PRINTF("Test #%u assigned %i, instead of %i,\r\n"
-                                 "\tto the first argument.\r\n\n",
-                                 t + 1, n1, test_data[t].v1.nvalue);
-                     }
-               else {               /* test_data[t].type1 == CHAR */
-                     if (strcmp(test_data[t].v1.svalue, s1))
-                          PRINTF("Test #%u assigned\r\n\"%s\",\r\n"
-                                 "\tinstead of\r\n\"%s\",\r\n"
-                                 "\tto the first argument.\r\n\n",
-                                 t + 1, s1, test_data[t].v1.svalue);
-                     }
+                if (test_data[t].type1 == INT) {
+                        if (test_data[t].v1.nvalue != n1)
+                                PRINTF("Test #%u assigned %i, instead of %i,\r\n"
+                                       "\tto the first argument.\r\n\n",
+                                       t + 1, n1, test_data[t].v1.nvalue);
+                        }
+                else {         /* test_data[t].type1 == CHAR */
+                        if (strcmp(test_data[t].v1.svalue, s1))
+                                PRINTF("Test #%u assigned\r\n\"%s\",\r\n"
+                                       "\tinstead of\r\n\"%s\",\r\n"
+                                       "\tto the first argument.\r\n\n",
+                                       t + 1, s1, test_data[t].v1.svalue);
+                        }
 
-               if (test_data[t].type2 == INT) {
-                     if (test_data[t].v2.nvalue != n2)
-                          PRINTF("Test #%u assigned %i, instead of %i,\r\n"
-                                 "\tto the second argument.\r\n\n",
-                                 t + 1, n2, test_data[t].v2.nvalue);
-                     }
-               else {               /* test_data[t].type2 == CHAR */
-                     if (strcmp(test_data[t].v2.svalue, s2))
-                          PRINTF("Test #%u assigned\r\n\"%s\",\r\n"
-                                 "\tinstead of\r\n\"%s\",\r\n"
-                                 "\tto the second argument.\r\n\n",
-                                 t + 1, s2, test_data[t].v2.svalue);
-                     }
-               }
+                if (test_data[t].type2 == INT) {
+                        if (test_data[t].v2.nvalue != n2)
+                                PRINTF("Test #%u assigned %i, instead of %i,\r\n"
+                                       "\tto the second argument.\r\n\n",
+                                       t + 1, n2, test_data[t].v2.nvalue);
+                        }
+                else {         /* test_data[t].type2 == CHAR */
+                        if (strcmp(test_data[t].v2.svalue, s2))
+                                PRINTF("Test #%u assigned\r\n\"%s\",\r\n"
+                                       "\tinstead of\r\n\"%s\",\r\n"
+                                       "\tto the second argument.\r\n\n",
+                                       t + 1, s2, test_data[t].v2.svalue);
+                        }
+                }
         Pause();
 
         /* Test the char, short, and long specification-modifiers. */
         PRINTF("Testing scanf()'s type-modifiers...\r\n");
         for (t = 0; t < ARRAYSIZE(type_data); ++t) {
-               n0 = 0L;
-               sscanf(type_data[t].input, type_data[t].format, &n0);
-               if (type_data[t].value != n0)
-                     PRINTF("Test #%u assigned %li instead of %li.\r\n",
-                            t + 1, n0, type_data[t].value);
-               }
+                n0 = 0L;
+                sscanf(type_data[t].input, type_data[t].format, &n0);
+                if (type_data[t].value != n0)
+                        PRINTF("Test #%u assigned %li instead of %li.\r\n",
+                               t + 1, n0, type_data[t].value);
+                }
         Pause();
 
         /* Test that the pointer specification
@@ -249,34 +249,34 @@ int main(void) {
         */
         PRINTF("Testing \"%%p\"...\r\n");
         sprintf(s1, "%p %p %p %p", NULL, NULL,
-               Pause,                     /* static (program) storage */
-               &c);           /* automatic (stack) storage */
+                Pause,                 /* static (program) storage */
+                &c);                   /* automatic (stack) storage */
         sscanf(s1, "%p%p%p %p", &p1, &p2, &p3, &p4);
         if (p1 != NULL || p2 != NULL ||
             p3 != (void *)Pause || p4 != (void *)&c)
-               PRINTF("p1 is %p, p2 is %p; they should be %p.\r\n"
-                      "scanf() assigned %p to p3, instead of %p.\r\n"
-                      "scanf() assigned %p to p4, instead of %p.\r\n",
-                      p1, p2, NULL,
-                      p3, Pause,
-                      p4, &c);
+                PRINTF("p1 is %p, p2 is %p; they should be %p.\r\n"
+                       "scanf() assigned %p to p3, instead of %p.\r\n"
+                       "scanf() assigned %p to p4, instead of %p.\r\n",
+                       p1, p2, NULL,
+                       p3, Pause,
+                       p4, &c);
 
         /* Test that scanf() can scan typed input.
         ** Retest that "%i" can decode radix prefixxes.
         */
         do {
-               Pause();
-               PRINTF("Type 3 signed numbers,\r\n"
-                      "separated by white-space:\r\n"
-                      "octal decimal hexadecimal\r\n"
-                      "? ");
-               c = SCANF("%i %i %i", &n1, &n2, &n3);
-               PRINTF("\r\n\nscanf() returned %i.\r\n"
-                      "The numbers are:\r\n"
-                      " %+o octal,\r\n"
-                      " %+d decimal,\r\n"
-                      " %+#X hexadecimal.\r\n",
-                      c, n1, n2, n3);
-               } while (c > 0);
+                Pause();
+                PRINTF("Type 3 signed numbers,\r\n"
+                       "separated by white-space:\r\n"
+                       "octal decimal hexadecimal\r\n"
+                       "? ");
+                c = SCANF("%i %i %i", &n1, &n2, &n3);
+                PRINTF("\r\n\nscanf() returned %i.\r\n"
+                       "The numbers are:\r\n"
+                       " %+o octal,\r\n"
+                       " %+d decimal,\r\n"
+                       " %+#X hexadecimal.\r\n",
+                       c, n1, n2, n3);
+                } while (c > 0);
         return 0;
         }