mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-19 06:31:34 -08:00
Include lisp.h.
(doprnt1): Renamed from doprnt. New arg LISPSTRINGS. This is now a static subroutine. (doprnt): New definition calls doprnt1. (doprnt_lisp): New function.
This commit is contained in:
parent
ed87401169
commit
1513af9e91
1 changed files with 47 additions and 3 deletions
50
src/doprnt.c
50
src/doprnt.c
|
|
@ -23,16 +23,21 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#include <config.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include "lisp.h"
|
||||
|
||||
extern long *xmalloc (), *xrealloc ();
|
||||
|
||||
static int doprnt1 ();
|
||||
|
||||
/* Generate output from a format-spec FORMAT,
|
||||
terminated at position FORMAT_END.
|
||||
Output goes in BUFFER, which has room for BUFSIZE chars.
|
||||
If the output does not fit, truncate it to fit.
|
||||
Returns the number of characters stored into BUFFER.
|
||||
ARGS points to the vector of arguments, and NARGS says how many.
|
||||
A double counts as two arguments. */
|
||||
A double counts as two arguments.
|
||||
String arguments are passed as C strings.
|
||||
Integers are passed as C integers. */
|
||||
|
||||
doprnt (buffer, bufsize, format, format_end, nargs, args)
|
||||
char *buffer;
|
||||
|
|
@ -41,6 +46,33 @@ doprnt (buffer, bufsize, format, format_end, nargs, args)
|
|||
char *format_end;
|
||||
int nargs;
|
||||
char **args;
|
||||
{
|
||||
return doprnt1 (0, buffer, bufsize, format, format_end, nargs, args);
|
||||
}
|
||||
|
||||
/* Like doprnt except that strings in ARGS are passed
|
||||
as Lisp_Object. */
|
||||
|
||||
doprnt_lisp (buffer, bufsize, format, format_end, nargs, args)
|
||||
char *buffer;
|
||||
register int bufsize;
|
||||
char *format;
|
||||
char *format_end;
|
||||
int nargs;
|
||||
char **args;
|
||||
{
|
||||
return doprnt1 (1, buffer, bufsize, format, format_end, nargs, args);
|
||||
}
|
||||
|
||||
static int
|
||||
doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args)
|
||||
int lispstrings;
|
||||
char *buffer;
|
||||
register int bufsize;
|
||||
char *format;
|
||||
char *format_end;
|
||||
int nargs;
|
||||
char **args;
|
||||
{
|
||||
int cnt = 0; /* Number of arg to gobble next */
|
||||
register char *fmt = format; /* Pointer into format string */
|
||||
|
|
@ -164,9 +196,21 @@ doprnt (buffer, bufsize, format, format_end, nargs, args)
|
|||
case 's':
|
||||
if (cnt == nargs)
|
||||
error ("not enough arguments for format string");
|
||||
string = args[cnt++];
|
||||
if (fmtcpy[1] != 's')
|
||||
minlen = atoi (&fmtcpy[1]);
|
||||
if (lispstrings)
|
||||
{
|
||||
string = XSTRING (((Lisp_Object *) args)[cnt])->data;
|
||||
tem = XSTRING (((Lisp_Object *) args)[cnt])->size;
|
||||
cnt++;
|
||||
}
|
||||
else
|
||||
{
|
||||
string = args[cnt++];
|
||||
tem = strlen (string);
|
||||
}
|
||||
goto doit1;
|
||||
|
||||
/* Copy string into final output, truncating if no room. */
|
||||
doit:
|
||||
tem = strlen (string);
|
||||
|
|
@ -183,7 +227,7 @@ doprnt (buffer, bufsize, format, format_end, nargs, args)
|
|||
}
|
||||
if (tem > bufsize)
|
||||
tem = bufsize;
|
||||
strncpy (bufptr, string, tem);
|
||||
bcopy (string, bufptr, tem);
|
||||
bufptr += tem;
|
||||
bufsize -= tem;
|
||||
if (minlen < 0)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue