Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libexpr/exrewind.c
1808 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1989-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
/*
22
* Glenn Fowler
23
* AT&T Research
24
*
25
* expression library
26
*/
27
28
#include "exlib.h"
29
30
int
31
exrewind(Expr_t* ex)
32
{
33
register int n;
34
35
if (ex->linewrap)
36
{
37
exerror("too much pushback");
38
return -1;
39
}
40
if (!ex->input->pushback && !(ex->input->pushback = oldof(0, char, sizeof(ex->line), 3)))
41
{
42
exnospace();
43
return -1;
44
}
45
if (n = ex->linep - ex->line)
46
memcpy(ex->input->pushback, ex->line, n);
47
if (ex->input->peek)
48
{
49
ex->input->pushback[n++] = ex->input->peek;
50
ex->input->peek = 0;
51
}
52
ex->input->pushback[n++] = ' ';
53
ex->input->pushback[n] = 0;
54
ex->input->pp = ex->input->pushback;
55
ex->input->nesting = ex->nesting;
56
setcontext(ex);
57
return 0;
58
}
59
60
void
61
exstatement(Expr_t* ex)
62
{
63
ex->nesting = ex->input->nesting;
64
setcontext(ex);
65
}
66
67