Rewrote _scanf. It does need some tests and improvements, but it's a more

standard version than before, and it does support the necessary functionality
to support scanf functions for files.
Added vfscanf, fscanf and vfscanf.


git-svn-id: svn://svn.cc65.org/cc65/trunk@3301 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz
2004-11-26 22:16:54 +00:00
parent e35b91ed3b
commit b1d4e1613b
8 changed files with 369 additions and 173 deletions

View File

@@ -12,13 +12,11 @@
/* Forward */
struct indesc;
/* Type of the function that is called to input data. The function will
* return EOF if no more data is available.
*/
typedef char (*infunc) (struct indesc* desc);
typedef int __fastcall__ (*getfunc) (void* data);
typedef int __fastcall__ (*ungetfunc) (int c, void* data);
@@ -26,21 +24,19 @@ typedef char (*infunc) (struct indesc* desc);
* Beware: The low level functions will access the structure on the assembly
* level, so check this when altering the structure.
*/
struct indesc {
infunc fin; /* Pointer to input routine */
unsigned ccount; /* Number of chars read */
struct scanfdata {
getfunc get; /* Pointer to input routine */
ungetfunc unget; /* Pointer to pushback routine */
unsigned ccount; /* Number of chars read */
/* Fields used outside of _scanf */
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 */
void* data; /* Caller data */
};
/* Internal scanning routine */
int _scanf (struct indesc* d, const char* format, va_list ap);
int _scanf (struct scanfdata* d, const char* format, va_list ap);