lex.c revision f80a6dcd
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
11f80a6dcdSmrgDviGetAndPut(dw, cp)
12f80a6dcdSmrg    DviWidget	dw;
13f80a6dcdSmrg    int		*cp;
14f80a6dcdSmrg{
15f80a6dcdSmrg    if (dw->dvi.ungot)
16f80a6dcdSmrg    {
17f80a6dcdSmrg	dw->dvi.ungot = 0;
18f80a6dcdSmrg	*cp = getc (dw->dvi.file);
19f80a6dcdSmrg    }
20f80a6dcdSmrg    else
21f80a6dcdSmrg    {
22f80a6dcdSmrg	*cp = getc (dw->dvi.file);
23f80a6dcdSmrg	putc (*cp, dw->dvi.tmpFile);
24f80a6dcdSmrg    }
25f80a6dcdSmrg    return *cp;
26f80a6dcdSmrg}
27f80a6dcdSmrg
28f80a6dcdSmrgchar *
29f80a6dcdSmrgGetLine(dw, Buffer, Length)
30f80a6dcdSmrg	DviWidget	dw;
31f80a6dcdSmrg	char	*Buffer;
32f80a6dcdSmrg	int	Length;
33f80a6dcdSmrg{
34f80a6dcdSmrg	int 	i = 0, c;
35f80a6dcdSmrg	char	*p = Buffer;
36f80a6dcdSmrg
37f80a6dcdSmrg	Length--;			    /* Save room for final NULL */
38f80a6dcdSmrg
39f80a6dcdSmrg	while ((!p || i < Length) && DviGetC (dw, &c) != EOF && c != '\n')
40f80a6dcdSmrg		if (p)
41f80a6dcdSmrg			*p++ = c;
42f80a6dcdSmrg#if 0
43f80a6dcdSmrg	if (c == '\n' && p)		    /* Retain the newline like fgets */
44f80a6dcdSmrg		*p++ = c;
45f80a6dcdSmrg#endif
46f80a6dcdSmrg	if (c == '\n')
47f80a6dcdSmrg		DviUngetC(dw, c);
48f80a6dcdSmrg	if (p)
49f80a6dcdSmrg		*p = '\0';
50f80a6dcdSmrg	return (Buffer);
51f80a6dcdSmrg}
52f80a6dcdSmrg
53f80a6dcdSmrgchar *
54f80a6dcdSmrgGetWord(dw, Buffer, Length)
55f80a6dcdSmrg	DviWidget	dw;
56f80a6dcdSmrg	char	*Buffer;
57f80a6dcdSmrg	int	Length;
58f80a6dcdSmrg{
59f80a6dcdSmrg	int 	i = 0, c;
60f80a6dcdSmrg	char	*p = Buffer;
61f80a6dcdSmrg
62f80a6dcdSmrg	Length--;			    /* Save room for final NULL */
63f80a6dcdSmrg	while (DviGetC(dw, &c) != EOF && isspace(c))
64f80a6dcdSmrg		;
65f80a6dcdSmrg	if (c != EOF)
66f80a6dcdSmrg		DviUngetC(dw, c);
67f80a6dcdSmrg	while (i < Length && DviGetC(dw, &c) != EOF && !isspace(c))
68f80a6dcdSmrg		if (p)
69f80a6dcdSmrg			*p++ = c;
70f80a6dcdSmrg	if (c != EOF)
71f80a6dcdSmrg		DviUngetC(dw, c);
72f80a6dcdSmrg	if (p)
73f80a6dcdSmrg		*p = '\0';
74f80a6dcdSmrg	return (Buffer);
75f80a6dcdSmrg}
76f80a6dcdSmrg
77f80a6dcdSmrgint
78f80a6dcdSmrgGetNumber(dw)
79f80a6dcdSmrg	DviWidget	dw;
80f80a6dcdSmrg{
81f80a6dcdSmrg	int	i = 0,  c;
82f80a6dcdSmrg
83f80a6dcdSmrg	while (DviGetC(dw, &c) != EOF && isspace(c))
84f80a6dcdSmrg		;
85f80a6dcdSmrg	if (c != EOF)
86f80a6dcdSmrg		DviUngetC(dw, c);
87f80a6dcdSmrg	while (DviGetC(dw, &c) != EOF && isdigit(c))
88f80a6dcdSmrg		i = i*10 + c - '0';
89f80a6dcdSmrg	if (c != EOF)
90f80a6dcdSmrg		DviUngetC(dw, c);
91f80a6dcdSmrg	return (i);
92f80a6dcdSmrg}
93