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