1 /* $MirOS: src/usr.bin/oldroff/tbl/tm.c,v 1.3 2008/11/08 23:04:54 tg Exp $ */
2 
3 /*-
4  * Copyright (c) 1979, 1980, 1981, 1986, 1988, 1990, 1991, 1992
5  *     The Regents of the University of California.
6  * Copyright (C) Caldera International Inc.  2001-2002.
7  * Copyright (c) 2003, 2004
8  *	Thorsten "mirabilos" Glaser <tg@mirbsd.org>
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms,
12  * with or without modification, are permitted provided
13  * that the following conditions are met:
14  *
15  * Redistributions of source code and documentation must retain
16  * the above copyright notice, this list of conditions and the
17  * following disclaimer.  Redistributions in binary form must
18  * reproduce the above copyright notice, this list of conditions
19  * and the following disclaimer in the documentation and/or other
20  * materials provided with the distribution.
21  *
22  * All advertising materials mentioning features or use of this
23  * software must display the following acknowledgement:
24  *   This product includes software developed or owned by
25  *   Caldera International, Inc.
26  *
27  * Neither the name of Caldera International, Inc. nor the names
28  * of other contributors may be used to endorse or promote products
29  * derived from this software without specific prior written permission.
30  *
31  * USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
32  * INTERNATIONAL, INC. AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
33  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
34  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
35  * ARE DISCLAIMED.  IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE
36  * LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR
37  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
38  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
39  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
40  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
41  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
42  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43  */
44 
45 /* tm.c: split numerical fields */
46 
47 # include "t..c"
48 __SCCSID("@(#)tm.c	4.3 (Berkeley) 4/18/91");
49 __RCSID("$MirOS: src/usr.bin/oldroff/tbl/tm.c,v 1.3 2008/11/08 23:04:54 tg Exp $");
50 
51 char *
maknew(str)52 maknew(str)
53 	char *str;
54 {
55 	/* make two numerical fields */
56 	int c;
57 	char *p, *q, *ba, *dpoint;
58 	p = str;
59 	for (ba= 0; c = *str; str++)
60 		if (c == '\\' && *(str+1)== '&')
61 			ba=str;
62 	str=p;
63 	if (ba==0)
64 		{
65 		for (dpoint=0; *str; str++)
66 			{
67 			if (*str=='.' && !ineqn(str,p) &&
68 				(str>p && digit(*(str-1)) ||
69 				digit(*(str+1))))
70 					dpoint=str;
71 			}
72 		if (dpoint==0)
73 			for(; str>p; str--)
74 			{
75 			if (digit( * (str-1) ) && !ineqn(str, p))
76 				break;
77 			}
78 		if (!dpoint && p==str) /* not numerical, don't split */
79 			return(0);
80 		if (dpoint) str=dpoint;
81 		}
82 	else
83 		str = ba;
84 	p =str;
85 	if (exstore ==0 || exstore >exlim)
86 		{
87 		exstore = chspace();
88 		exlim= exstore+MAXCHS;
89 		}
90 	q = exstore;
91 	while (*exstore++ = *str++);
92 	*p = 0;
93 	return(q);
94 	}
ineqn(s,p)95 ineqn (s, p)
96 	char *s, *p;
97 {
98 /* true if s is in a eqn within p */
99 int ineq = 0, c;
100 while (c = *p)
101 	{
102 	if (s == p)
103 		return(ineq);
104 	p++;
105 	if ((ineq == 0) && (c == delim1))
106 		ineq = 1;
107 	else
108 	if ((ineq == 1) && (c == delim2))
109 		ineq = 0;
110 	}
111 return(0);
112 }
113