1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-25 17:29:50 +00:00

scanf modules (currently not working)

git-svn-id: svn://svn.cc65.org/cc65/trunk@624 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2001-03-13 07:59:17 +00:00
parent 1411097746
commit 7c4bcbd569
3 changed files with 92 additions and 1 deletions

View File

@ -1,4 +1,4 @@
*.lst *.lst
_afailed.s _afailed.s
_fopen.s _fopen.s
_hextab.s _hextab.s
@ -29,6 +29,7 @@ puts.s
qsort.s qsort.s
realloc.s realloc.s
rewind.s rewind.s
sscanf.s
strtok.s strtok.s
strxfrm.s strxfrm.s
vprintf.s vprintf.s

46
libsrc/common/_scanf.h Normal file
View File

@ -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

44
libsrc/common/sscanf.c Normal file
View File

@ -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);
}