Blame modules/filters/libsed.h

Packit 90a5c9
/*
Packit 90a5c9
 * Copyright (c) 2005, 2008 Sun Microsystems, Inc. All Rights Reserved.
Packit 90a5c9
 * Use is subject to license terms.
Packit 90a5c9
 *
Packit 90a5c9
 *      Copyright (c) 1984 AT&T
Packit 90a5c9
 *        All Rights Reserved
Packit 90a5c9
 *
Packit 90a5c9
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 90a5c9
 * you may not use this file except in compliance with the License.
Packit 90a5c9
 * You may obtain a copy of the License at
Packit 90a5c9
 *  http://www.apache.org/licenses/LICENSE-2.0.
Packit 90a5c9
 *
Packit 90a5c9
 * Unless required by applicable law or agreed to in writing, software
Packit 90a5c9
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 90a5c9
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
Packit 90a5c9
 * or implied.
Packit 90a5c9
 * See the License for the specific language governing permissions and
Packit 90a5c9
 * limitations under the License.
Packit 90a5c9
 */
Packit 90a5c9
Packit 90a5c9
#ifndef LIBSED_H
Packit 90a5c9
#define LIBSED_H
Packit 90a5c9
Packit 90a5c9
#ifdef __cplusplus
Packit 90a5c9
extern "C" {
Packit 90a5c9
#endif
Packit 90a5c9
Packit 90a5c9
#include <limits.h>
Packit 90a5c9
Packit 90a5c9
#include "apr_file_io.h"
Packit 90a5c9
Packit 90a5c9
#define SED_NLINES 256
Packit 90a5c9
#define SED_DEPTH 20
Packit 90a5c9
#define SED_LABSIZE 50
Packit 90a5c9
#define SED_ABUFSIZE 20
Packit 90a5c9
Packit 90a5c9
typedef struct sed_reptr_s sed_reptr_t;
Packit 90a5c9
Packit 90a5c9
struct sed_reptr_s {
Packit 90a5c9
    sed_reptr_t *next;
Packit 90a5c9
    char        *ad1;
Packit 90a5c9
    char        *ad2;
Packit 90a5c9
    char        *re1;
Packit 90a5c9
    sed_reptr_t *lb1;
Packit 90a5c9
    char        *rhs;
Packit 90a5c9
    int         findex;
Packit 90a5c9
    char        command;
Packit 90a5c9
    int         gfl;
Packit 90a5c9
    char        pfl;
Packit 90a5c9
    char        negfl;
Packit 90a5c9
    int         nrep;
Packit 90a5c9
};
Packit 90a5c9
Packit 90a5c9
typedef struct sed_label_s sed_label_t;
Packit 90a5c9
Packit 90a5c9
struct sed_label_s {
Packit 90a5c9
    char        asc[9];
Packit 90a5c9
    sed_reptr_t *chain;
Packit 90a5c9
    sed_reptr_t *address;
Packit 90a5c9
};
Packit 90a5c9
Packit 90a5c9
typedef apr_status_t (sed_err_fn_t)(void *data, const char *error);
Packit 90a5c9
typedef apr_status_t (sed_write_fn_t)(void *ctx, char *buf, int sz);
Packit 90a5c9
Packit 90a5c9
typedef struct sed_commands_s sed_commands_t;
Packit 90a5c9
#define NWFILES 11 /* 10 plus one for standard output */
Packit 90a5c9
Packit 90a5c9
struct sed_commands_s {
Packit 90a5c9
    sed_err_fn_t *errfn;
Packit 90a5c9
    void         *data;
Packit 90a5c9
Packit 90a5c9
    unsigned     lsize;
Packit 90a5c9
    char         *linebuf;
Packit 90a5c9
    char         *lbend;
Packit 90a5c9
    const char   *saveq;
Packit 90a5c9
Packit 90a5c9
    char         *cp;
Packit 90a5c9
    char         *lastre;
Packit 90a5c9
    char         *respace;
Packit 90a5c9
    char         sseof;
Packit 90a5c9
    char         *reend;
Packit 90a5c9
    const char   *earg;
Packit 90a5c9
    int          eflag;
Packit 90a5c9
    int          gflag;
Packit 90a5c9
    int          nflag;
Packit 90a5c9
    apr_int64_t  tlno[SED_NLINES];
Packit 90a5c9
    int          nlno;
Packit 90a5c9
    int          depth;
Packit 90a5c9
Packit 90a5c9
    char         *fname[NWFILES];
Packit 90a5c9
    int          nfiles;
Packit 90a5c9
Packit 90a5c9
    sed_label_t  ltab[SED_LABSIZE];
Packit 90a5c9
    sed_label_t  *labtab;
Packit 90a5c9
    sed_label_t  *lab;
Packit 90a5c9
    sed_label_t  *labend;
Packit 90a5c9
Packit 90a5c9
    sed_reptr_t  **cmpend[SED_DEPTH];
Packit 90a5c9
    sed_reptr_t  *ptrspace;
Packit 90a5c9
    sed_reptr_t  *ptrend;
Packit 90a5c9
    sed_reptr_t  *rep;
Packit 90a5c9
    int          nrep;
Packit 90a5c9
    apr_pool_t   *pool;
Packit 90a5c9
    int          canbefinal;
Packit 90a5c9
};
Packit 90a5c9
Packit 90a5c9
typedef struct sed_eval_s sed_eval_t;
Packit 90a5c9
Packit 90a5c9
struct sed_eval_s {
Packit 90a5c9
    sed_err_fn_t   *errfn;
Packit 90a5c9
    sed_write_fn_t *writefn;
Packit 90a5c9
    void           *data;
Packit 90a5c9
Packit 90a5c9
    sed_commands_t *commands;
Packit 90a5c9
Packit 90a5c9
    apr_int64_t    lnum;
Packit 90a5c9
    void           *fout;
Packit 90a5c9
Packit 90a5c9
    unsigned       lsize;
Packit 90a5c9
    char           *linebuf;
Packit 90a5c9
    char           *lspend;
Packit 90a5c9
Packit 90a5c9
    unsigned       hsize;
Packit 90a5c9
    char           *holdbuf;
Packit 90a5c9
    char           *hspend;
Packit 90a5c9
Packit 90a5c9
    unsigned       gsize;
Packit 90a5c9
    char           *genbuf;
Packit 90a5c9
    char           *lcomend;
Packit 90a5c9
Packit 90a5c9
    apr_file_t    *fcode[NWFILES];
Packit 90a5c9
    sed_reptr_t    *abuf[SED_ABUFSIZE];
Packit 90a5c9
    sed_reptr_t    **aptr;
Packit 90a5c9
    sed_reptr_t    *pending;
Packit 90a5c9
    unsigned char  *inar;
Packit 90a5c9
    int            nrep;
Packit 90a5c9
Packit 90a5c9
    int            dolflag;
Packit 90a5c9
    int            sflag;
Packit 90a5c9
    int            jflag;
Packit 90a5c9
    int            delflag;
Packit 90a5c9
    int            lreadyflag;
Packit 90a5c9
    int            quitflag;
Packit 90a5c9
    int            finalflag;
Packit 90a5c9
    int            numpass;
Packit 90a5c9
    int            nullmatch;
Packit 90a5c9
    int            col;
Packit 90a5c9
    apr_pool_t     *pool;
Packit 90a5c9
};
Packit 90a5c9
Packit 90a5c9
apr_status_t sed_init_commands(sed_commands_t *commands, sed_err_fn_t *errfn, void *data,
Packit 90a5c9
                               apr_pool_t *p);
Packit 90a5c9
apr_status_t sed_compile_string(sed_commands_t *commands, const char *s);
Packit 90a5c9
apr_status_t sed_compile_file(sed_commands_t *commands, apr_file_t *fin);
Packit 90a5c9
char* sed_get_finalize_error(const sed_commands_t *commands, apr_pool_t* pool);
Packit 90a5c9
int sed_canbe_finalized(const sed_commands_t *commands);
Packit 90a5c9
void sed_destroy_commands(sed_commands_t *commands);
Packit 90a5c9
Packit 90a5c9
apr_status_t sed_init_eval(sed_eval_t *eval, sed_commands_t *commands,
Packit 90a5c9
                           sed_err_fn_t *errfn, void *data,
Packit 90a5c9
                           sed_write_fn_t *writefn, apr_pool_t *p);
Packit 90a5c9
apr_status_t sed_reset_eval(sed_eval_t *eval, sed_commands_t *commands, sed_err_fn_t *errfn, void *data);
Packit 90a5c9
apr_status_t sed_eval_buffer(sed_eval_t *eval, const char *buf, int bufsz, void *fout);
Packit 90a5c9
apr_status_t sed_eval_file(sed_eval_t *eval, apr_file_t *fin, void *fout);
Packit 90a5c9
apr_status_t sed_finalize_eval(sed_eval_t *eval, void *f);
Packit 90a5c9
void sed_destroy_eval(sed_eval_t *eval);
Packit 90a5c9
Packit 90a5c9
#ifdef __cplusplus
Packit 90a5c9
}
Packit 90a5c9
#endif
Packit 90a5c9
Packit 90a5c9
#endif /* LIBSED_H */