|
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 */
|