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