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