47693af92e50a1ad81825eb01b7157a211269613mx * Copyright (c) 2005, 2008 Sun Microsystems, Inc. All Rights Reserved.
47693af92e50a1ad81825eb01b7157a211269613mx * Use is subject to license terms.
47693af92e50a1ad81825eb01b7157a211269613mx * Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
47693af92e50a1ad81825eb01b7157a211269613mx * All Rights Reserved
47693af92e50a1ad81825eb01b7157a211269613mx * University Copyright- Copyright (c) 1982, 1986, 1988
47693af92e50a1ad81825eb01b7157a211269613mx * The Regents of the University of California
47693af92e50a1ad81825eb01b7157a211269613mx * All Rights Reserved
47693af92e50a1ad81825eb01b7157a211269613mx * University Acknowledgment- Portions of this document are derived from
47693af92e50a1ad81825eb01b7157a211269613mx * software developed by the University of California, Berkeley, and its
47693af92e50a1ad81825eb01b7157a211269613mx * contributors.
47693af92e50a1ad81825eb01b7157a211269613mx * Licensed under the Apache License, Version 2.0 (the "License");
47693af92e50a1ad81825eb01b7157a211269613mx * you may not use this file except in compliance with the License.
47693af92e50a1ad81825eb01b7157a211269613mx * You may obtain a copy of the License at
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Unless required by applicable law or agreed to in writing, software
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * distributed under the License is distributed on an "AS IS" BASIS,
d635b452b5b58e50f0c67983f4a57a04deefce77Winson Wang - Sun Microsystems - Beijing China * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
47693af92e50a1ad81825eb01b7157a211269613mx * or implied.
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * See the License for the specific language governing permissions and
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * limitations under the License.
51fc88a818087605a0e5f11eddb8b66576f72c23Winson Wang - Sun Microsystems - Beijing China/* Code moved from regexp.h */
6f3e57ac9d0b054c3169579f3422080b8ba10105mxstatic unsigned char bittab[] = { 1, 2, 4, 8, 16, 32, 64, 128 };
6f3e57ac9d0b054c3169579f3422080b8ba10105mxextern int sed_step(char *p1, char *p2, int circf, step_vars_storage *vars);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx /* No error */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx comperr(commands, "More than 2 numbers given in \\{ \\}: %s");
6f3e57ac9d0b054c3169579f3422080b8ba10105mx comperr(commands, "First number exceeds second in \\{ \\}: %s");
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mxchar *sed_compile(sed_commands_t *commands, sed_comp_args *compargs,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx int iflag; /* used for non-ascii characters in brackets */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx if (c == '\n') {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx if (c == '^')
6f3e57ac9d0b054c3169579f3422080b8ba10105mx while (1) {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx if (c == eof) {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx switch (c) {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx case '\n':
6f3e57ac9d0b054c3169579f3422080b8ba10105mx for (i = 0; i < 16; i++)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx c &= 0377;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx while (lc < c) {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx /* make nulls match so test fails */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx case '\\':
6f3e57ac9d0b054c3169579f3422080b8ba10105mx switch (c = GETC()) {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx if (lastep == (char *) 0)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx if (i >= 255)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx if (c == ',') {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx /* get 2'nd number */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx case '\n':
6f3e57ac9d0b054c3169579f3422080b8ba10105mx /* Drop through to default to use \ to turn off special chars */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (char*) NULL;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx /* XXX : Basant : what extra */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx /* int reglength = (int)(ep - expbuf); */
6f3e57ac9d0b054c3169579f3422080b8ba10105mxint sed_step(char *p1, char *p2, int circf, step_vars_storage *vars)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx /* fast check for first character */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx if (*p1 != c)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (1);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } while (*p1++);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx /* regular algorithm */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (1);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } while (*p1++);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mxstatic int _advance(char *lp, char *ep, step_vars_storage *vars)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx while (1) {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx switch (*ep++) {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx if (*lp == 0)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (1);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx c = (unsigned char)*lp++;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx if (*lp++ != c)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx if (*lp++ != c)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx c = (unsigned char)*lp++;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx c = (unsigned char)*lp++;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);
d27d4a13eaba374ddedac2be3de8c5318360ca01Miles Xu, Sun Microsystems ct = vars->braelist[epint] - bbeg;
a01a4735489b25416b449c3231ab8b710caaeb1cWinson Wang - Sun Microsystems - Beijing China case CBACK | STAR:
9fa05d92f6b225eb418fb782225c991b887ea8b7Winson Wang - Sun Microsystems - Beijing China epint = (int) *ep;
a01a4735489b25416b449c3231ab8b710caaeb1cWinson Wang - Sun Microsystems - Beijing China bbeg = vars->braslist[epint];
a01a4735489b25416b449c3231ab8b710caaeb1cWinson Wang - Sun Microsystems - Beijing China ct = vars->braelist[epint] - bbeg;
a01a4735489b25416b449c3231ab8b710caaeb1cWinson Wang - Sun Microsystems - Beijing China while (ecmp(bbeg, lp, ct))
a01a4735489b25416b449c3231ab8b710caaeb1cWinson Wang - Sun Microsystems - Beijing China while (lp >= curlp) {
a01a4735489b25416b449c3231ab8b710caaeb1cWinson Wang - Sun Microsystems - Beijing China if (_advance(lp, ep, vars))
a01a4735489b25416b449c3231ab8b710caaeb1cWinson Wang - Sun Microsystems - Beijing China case CDOT | STAR:
6f3e57ac9d0b054c3169579f3422080b8ba10105mx while (*lp++);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx c = (unsigned char)*lp++;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } while (ISTHERE(c));
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (1);
6f3e57ac9d0b054c3169579f3422080b8ba10105mx return (0);