lex.c revision 65912f00
1f80a6dcdSmrg/* $XFree86: xc/programs/xditview/lex.c,v 1.3 2000/12/04 21:01:01 dawes Exp $ */
2f80a6dcdSmrg
3f80a6dcdSmrg#include <X11/Xos.h>
4f80a6dcdSmrg#include <X11/IntrinsicP.h>
5f80a6dcdSmrg#include <X11/StringDefs.h>
6f80a6dcdSmrg#include <stdio.h>
7f80a6dcdSmrg#include <ctype.h>
8f80a6dcdSmrg#include "DviP.h"
9f80a6dcdSmrg
10f80a6dcdSmrgint
1165912f00SmrgDviGetAndPut(DviWidget dw, int *cp)
12f80a6dcdSmrg{
13f80a6dcdSmrg    if (dw->dvi.ungot)
14f80a6dcdSmrg    {
15f80a6dcdSmrg	dw->dvi.ungot = 0;
16f80a6dcdSmrg	*cp = getc (dw->dvi.file);
17f80a6dcdSmrg    }
18f80a6dcdSmrg    else
19f80a6dcdSmrg    {
20f80a6dcdSmrg	*cp = getc (dw->dvi.file);
21f80a6dcdSmrg	putc (*cp, dw->dvi.tmpFile);
22f80a6dcdSmrg    }
23f80a6dcdSmrg    return *cp;
24f80a6dcdSmrg}
25f80a6dcdSmrg
26f80a6dcdSmrgchar *
2765912f00SmrgGetLine(DviWidget dw, char *Buffer, int Length)
28f80a6dcdSmrg{
29f80a6dcdSmrg	int 	i = 0, c;
30f80a6dcdSmrg	char	*p = Buffer;
31f80a6dcdSmrg
32f80a6dcdSmrg	Length--;			    /* Save room for final NULL */
33f80a6dcdSmrg
34f80a6dcdSmrg	while ((!p || i < Length) && DviGetC (dw, &c) != EOF && c != '\n')
35f80a6dcdSmrg		if (p)
36f80a6dcdSmrg			*p++ = c;
37f80a6dcdSmrg#if 0
38f80a6dcdSmrg	if (c == '\n' && p)		    /* Retain the newline like fgets */
39f80a6dcdSmrg		*p++ = c;
40f80a6dcdSmrg#endif
41f80a6dcdSmrg	if (c == '\n')
42f80a6dcdSmrg		DviUngetC(dw, c);
43f80a6dcdSmrg	if (p)
44f80a6dcdSmrg		*p = '\0';
45f80a6dcdSmrg	return (Buffer);
46f80a6dcdSmrg}
47f80a6dcdSmrg
48f80a6dcdSmrgchar *
4965912f00SmrgGetWord(DviWidget dw, char *Buffer, int Length)
50f80a6dcdSmrg{
51f80a6dcdSmrg	int 	i = 0, c;
52f80a6dcdSmrg	char	*p = Buffer;
53f80a6dcdSmrg
54f80a6dcdSmrg	Length--;			    /* Save room for final NULL */
55f80a6dcdSmrg	while (DviGetC(dw, &c) != EOF && isspace(c))
56f80a6dcdSmrg		;
57f80a6dcdSmrg	if (c != EOF)
58f80a6dcdSmrg		DviUngetC(dw, c);
59f80a6dcdSmrg	while (i < Length && DviGetC(dw, &c) != EOF && !isspace(c))
60f80a6dcdSmrg		if (p)
61f80a6dcdSmrg			*p++ = c;
62f80a6dcdSmrg	if (c != EOF)
63f80a6dcdSmrg		DviUngetC(dw, c);
64f80a6dcdSmrg	if (p)
65f80a6dcdSmrg		*p = '\0';
66f80a6dcdSmrg	return (Buffer);
67f80a6dcdSmrg}
68f80a6dcdSmrg
69f80a6dcdSmrgint
7065912f00SmrgGetNumber(DviWidget dw)
71f80a6dcdSmrg{
72f80a6dcdSmrg	int	i = 0,  c;
73f80a6dcdSmrg
74f80a6dcdSmrg	while (DviGetC(dw, &c) != EOF && isspace(c))
75f80a6dcdSmrg		;
76f80a6dcdSmrg	if (c != EOF)
77f80a6dcdSmrg		DviUngetC(dw, c);
78f80a6dcdSmrg	while (DviGetC(dw, &c) != EOF && isdigit(c))
79f80a6dcdSmrg		i = i*10 + c - '0';
80f80a6dcdSmrg	if (c != EOF)
81f80a6dcdSmrg		DviUngetC(dw, c);
82f80a6dcdSmrg	return (i);
83f80a6dcdSmrg}
84