1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
/* $Id: excontext.c,v 1.1.1.1 2004/12/23 04:05:01 ellson Exp $ $Revision: 1.1.1.1 $ */
/* vim:set shiftwidth=4 ts=8: */
/**********************************************************
* This software is part of the graphviz package *
* http://www.graphviz.org/ *
* *
* Copyright (c) 1994-2004 AT&T Corp. *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Corp. *
* *
* Information and Software Systems Research *
* AT&T Research, Florham Park NJ *
**********************************************************/
/*
* Glenn Fowler
* AT&T Research
*
* expression library
*/
#include "exlib.h"
/*
* copy input token error context into buf of n chars and reset the context
* end of buf returned
*/
char *excontext(Expr_t * p, char *buf, int n)
{
register char *s;
register char *t;
register char *e;
s = buf;
if (p->linep > p->line || p->linewrap) {
e = buf + n - 5;
if (p->linewrap) {
t = p->linep + 1;
while (t < &p->line[sizeof(p->line)] && isspace(*t))
t++;
if ((n =
(sizeof(p->line) - (t - (p->linep + 1))) - (e - s)) > 0) {
if (n > &p->line[sizeof(p->line)] - t)
t = &p->line[sizeof(p->line)];
else
t += n;
}
while (t < &p->line[sizeof(p->line)])
*s++ = *t++;
}
t = p->line;
if (p->linewrap)
p->linewrap = 0;
else
while (t < p->linep && isspace(*t))
t++;
if ((n = (p->linep - t) - (e - s)) > 0)
t += n;
while (t < p->linep)
*s++ = *t++;
p->linep = p->line;
t = "<<< ";
while ((*s = *t++))
s++;
}
*s = 0;
return s;
}
|