1 
2 #include <X11/Xos.h>
3 #include <X11/IntrinsicP.h>
4 #include <X11/StringDefs.h>
5 #include <stdio.h>
6 #include <ctype.h>
7 #include "DviP.h"
8 
9 int
DviGetAndPut(DviWidget dw,int * cp)10 DviGetAndPut(DviWidget dw, int *cp)
11 {
12     if (dw->dvi.ungot)
13     {
14 	dw->dvi.ungot = 0;
15 	*cp = getc (dw->dvi.file);
16     }
17     else
18     {
19 	*cp = getc (dw->dvi.file);
20 	putc (*cp, dw->dvi.tmpFile);
21     }
22     return *cp;
23 }
24 
25 char *
GetLine(DviWidget dw,char * Buffer,int Length)26 GetLine(DviWidget dw, char *Buffer, int Length)
27 {
28 	int 	i = 0, c;
29 	char	*p = Buffer;
30 
31 	Length--;			    /* Save room for final NULL */
32 
33 	while ((!p || i < Length) && DviGetC (dw, &c) != EOF && c != '\n')
34 		if (p)
35 			*p++ = c;
36 	if (c == '\n')
37 		DviUngetC(dw, c);
38 	if (p)
39 		*p = '\0';
40 	return (Buffer);
41 }
42 
43 char *
GetWord(DviWidget dw,char * Buffer,int Length)44 GetWord(DviWidget dw, char *Buffer, int Length)
45 {
46 	int 	i = 0, c;
47 	char	*p = Buffer;
48 
49 	Length--;			    /* Save room for final NULL */
50 	while (DviGetC(dw, &c) != EOF && isspace(c))
51 		;
52 	if (c != EOF)
53 		DviUngetC(dw, c);
54 	while (i < Length && DviGetC(dw, &c) != EOF && !isspace(c))
55 		if (p)
56 			*p++ = c;
57 	if (c != EOF)
58 		DviUngetC(dw, c);
59 	if (p)
60 		*p = '\0';
61 	return (Buffer);
62 }
63 
64 int
GetNumber(DviWidget dw)65 GetNumber(DviWidget dw)
66 {
67 	int	i = 0,  c;
68 
69 	while (DviGetC(dw, &c) != EOF && isspace(c))
70 		;
71 	if (c != EOF)
72 		DviUngetC(dw, c);
73 	while (DviGetC(dw, &c) != EOF && isdigit(c))
74 		i = i*10 + c - '0';
75 	if (c != EOF)
76 		DviUngetC(dw, c);
77 	return (i);
78 }
79