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