rse         98/04/02 22:20:17

  Added:       src/test/rename Makefile README apapi.h apapi.h.mk
                        apapi_compat.h apapi_compat.h.mk rename.cf
                        rename.cf.update rename.pl
               src/test/rename/csubst Makefile csubst.c lexer.c lexer.l
                        tokens.h util.c
  Log:
  Move the global symbol renaming stuff from apache-core (where it was located
  wrong) to apache-1.3/src/test/rename/ (where it is not located a lot better,
  but a little bit better). After the renaming (if done) these stuff gets
  removed, of course.
  
  Brian: We should really create a, say apache-misc, repository for those
         (temporary) stuff.
  
  Revision  Changes    Path
  1.1                  apache-1.3/src/test/rename/Makefile
  
  Index: Makefile
  ===================================================================
  
  SRC=../..
  
  all:
        @echo "run 'make rename' for renaming _THIS_ source tree"
        @echo "run 'make rename SRC=/path/to/apache-1.3/src' for other test 
trees"
  
  rename: programs
        ./rename.pl $(SRC)/buildmark.c \
                    $(SRC)/os \
                                $(SRC)/main \
                                $(SRC)/ap \
                                $(SRC)/modules \
                                $(SRC)/include
  
  programs:
        @cd csubst; make
      
  clean:
        @cd csubst; make clean
  
  
  
  
  1.1                  apache-1.3/src/test/rename/README
  
  Index: README
  ===================================================================
  
  This can be used directly for everyone:
  
  rename.pl .......... The source renaming script
  
  These three Needs adjustments to work out-of-the-box:
  
  rename.cf.update ... Updates rename.cf according to API_EXPORT tags 
                       in the sources. Needs an ID file in src/ which
                       is generated by "mkid" from GNU id-utils
  apapi_compat.h.mk .. Creates apapi_compat.h file from rename.cf
  apapi.h.mk ......... Creates apapi.h file from rename.cf and ID file
  
  
  
  
  1.1                  apache-1.3/src/test/rename/apapi.h
  
  Index: apapi.h
  ===================================================================
  /*
  **  apapi.h -- Apache API prototypes
  */
  
  #ifndef APAPI_H
  #define APAPI_H
  
  extern void ap_MD5Final(unsigned char digest[16], AP_MD5_CTX * context);
  extern void ap_MD5Init(AP_MD5_CTX * context);
  extern ;
  extern void ap_add_cgi_vars(request_rec *r);
  extern void ap_add_common_vars(request_rec *r);
  extern void ap_add_module(module *m);
  extern int ap_add_named_module(const char *name);
  extern int ap_allow_options (request_rec *r);
  extern int ap_allow_overrides (request_rec *r);
  extern ;
  extern void ap_array_cat(array_header *dst, const array_header *src);
  extern char * ap_auth_name (request_rec *r);
  extern char * ap_auth_type (request_rec *r);
  extern void ap_basic_http_header(request_rec *r);
  extern int ap_bclose(BUFF *fb);
  extern BUFF * ap_bcreate(pool *p, int flags);
  extern int ap_bfilbuf(BUFF *fb);
  extern int ap_bfileno(BUFF *fb, int direction);
  extern int ap_bflsbuf(int c, BUFF *fb);
  extern int ap_bflush(BUFF *fb);
  extern int ap_bgetopt(BUFF *fb, int optname, void *optval);
  extern int ap_bgets(char *buff, int n, BUFF *fb);
  extern void ap_bhalfduplex(BUFF *fb);
  extern void ap_block_alarms();
  extern int ap_blookc(char *buff, BUFF *fb);
  extern int ap_bnonblock(BUFF *fb, int direction);
  extern void ap_bonerror(BUFF *fb, void (*error);
  extern void ap_bpushfd(BUFF *fb, int fd_in, int fd_out);
  extern int ap_bputs(const char *x, BUFF *fb);
  extern int ap_bread(BUFF *fb, void *buf, int nbyte);
  extern int ap_bsetflag(BUFF *fb, int flag, int value);
  extern int ap_bsetopt(BUFF *fb, int optname, const void *optval);
  extern int ap_bskiplf(BUFF *fb);
  extern int ap_bwrite(BUFF *fb, const void *buf, int nbyte);
  extern long ap_bytes_in_free_blocks(void);
  extern long ap_bytes_in_pool(pool *p);
  extern int ap_call_exec(request_rec *r, char *argv0, char **env, int 
shellcmd);
  extern int ap_can_exec(const struct stat *finfo);
  extern int ap_cfg_closefile(configfile_t *fp);
  extern int ap_cfg_getc(configfile_t *cfp);
  extern int ap_cfg_getline(char *buf, size_t bufsize, configfile_t *cfp);
  extern void ap_chdir_file(const char *file);
  extern const char * ap_check_cmd_context(cmd_parms *cmd, unsigned forbidden);
  extern int ap_checkmask(const char *data, const char *mask);
  extern void ap_child_terminate(request_rec *r);
  extern void ap_cleanup_for_exec(void);
  extern void ap_clear_module_list();
  extern void ap_clear_pool(struct pool *a);
  extern void ap_clear_table(table *t);
  extern void ap_close_piped_log (piped_log *pl);
  /* prototype for `ap_construct_server' cannot be found */
  extern char * ap_construct_url(pool *p, const char *uri, const request_rec 
*r);
  extern array_header * ap_copy_array(pool *p, const array_header *arr);
  extern array_header * ap_copy_array_hdr(pool *p, const array_header *arr);
  extern table * ap_copy_table(pool *p, const table *t);
  extern int ap_count_dirs(const char *path);
  extern char ** ap_create_environment(pool *p, table *t);
  extern void * ap_create_per_dir_config(pool *p);
  extern unsigned short ap_default_port_for_request(const request_rec *r);
  extern unsigned short ap_default_port_for_scheme(const char *scheme_str);
  extern char * ap_default_type (request_rec *r);
  extern void ap_destroy_pool(pool *a);
  extern void ap_destroy_sub_req(request_rec *r);
  extern int ap_discard_request_body(request_rec *r);
  extern char * ap_document_root (request_rec *r);
  extern int ap_each_byterange(request_rec *r, long *offset, long *length);
  extern void ap_error_log2stderr (server_rec *s);
  extern char * ap_escape_html(pool *p, const char *s);
  extern char * ap_escape_path_segment(pool *p, const char *segment);
  extern char * ap_escape_shell_cmd(pool *p, const char *str);
  extern int ap_exists_scoreboard_image(void);
  extern int ap_find_last_token(pool *p, const char *line, const char *tok);
  extern module * ap_find_linked_module(const char *name);
  extern const char * ap_find_module_name(module *m);
  extern int ap_find_path_info(const char *uri, const char *path_info);
  extern pool * ap_find_pool(const void *ts);
  extern int ap_find_token(pool *p, const char *line, const char *tok);
  extern int ap_get_basic_auth_pw(request_rec *r, char **pw);
  extern long ap_get_client_block(request_rec *r, char *buffer, int bufsiz);
  extern struct tm * ap_get_gmtoff(int *tz);
  extern void * ap_get_module_config(void *conf_vector, module *m);
  extern const char * ap_get_remote_host(conn_rec *conn, void *dir_config, int 
type);
  extern const char * ap_get_remote_logname(request_rec *r);
  extern const char * ap_get_server_name(const request_rec *r);
  extern unsigned ap_get_server_port(const request_rec *r);
  extern char * ap_get_time();
  extern char * ap_get_token(pool *p, char **accept_line, int accept_white);
  extern void ap_getparents(char *name);
  extern char * ap_getword(pool *atrans, const char **line, char stop);
  extern char * ap_getword_conf(pool *p, const char **line);
  extern char * ap_getword_conf_nc(pool *p, char **line);
  extern char * ap_getword_nc(pool *atrans, char **line, char stop);
  extern char * ap_getword_nulls(pool *atrans, const char **line, char stop);
  extern char * ap_getword_nulls_nc(pool *atrans, char **line, char stop);
  extern char * ap_getword_white(pool *atrans, const char **line);
  extern char * ap_getword_white_nc(pool *atrans, char **line);
  extern char * ap_gm_timestr_822(pool *p, time_t sec);
  extern gid_t ap_gname2id(const char *name);
  extern void ap_hard_timeout(char *name, request_rec *r);
  extern char * ap_ht_time(pool *p, time_t t, const char *fmt, int gmt);
  extern int ap_ind(const char *s, char c);
  extern int ap_index_of_response(int status);
  extern void ap_internal_redirect(const char *new_uri, request_rec *r);
  extern void ap_internal_redirect_handler(const char *new_uri, request_rec *r);
  extern int ap_is_directory(const char *path);
  extern int ap_is_initial_req(request_rec *r);
  extern int ap_is_matchexp(const char *str);
  extern int ap_is_url(const char *u);
  extern void ap_kill_cleanup(pool *p, void *data, void (*cleanup);
  extern void ap_kill_cleanups_for_fd(pool *p, int fd);
  extern void ap_kill_cleanups_for_socket(pool *p, int sock);
  extern void ap_kill_timeout(request_rec *dummy);
  extern void ap_log_assert (const char *szExp, const char *szFile, int nLine);
  extern void ap_log_error (const char *err, server_rec *s);
  extern void ap_log_printf (const server_rec *s, const char *fmt, ...);
  extern void ap_log_reason (const char *reason, const char *file, request_rec 
*r);
  /* prototype for `ap_log_unixerr' cannot be found */
  extern array_header * ap_make_array(pool *p, int nelts, int elt_size);
  extern char * ap_make_dirstr(pool *p, const char *s, int n);
  extern char * ap_make_dirstr_parent(pool *p, const char *s);
  extern char * ap_make_dirstr_prefix(char *d, const char *s, int n);
  extern ;
  extern struct pool * ap_make_sub_pool(struct pool *p);
  extern table * ap_make_table(pool *p, int nelts);
  extern ;
  extern int ap_meets_conditions(request_rec *r);
  extern void ap_no2slash(char *name);
  extern void ap_note_auth_failure(request_rec *r);
  extern void ap_note_basic_auth_failure(request_rec *r);
  extern void ap_note_cleanups_for_fd(pool *p, int fd);
  extern void ap_note_cleanups_for_file(pool *p, FILE *fp);
  extern void ap_note_cleanups_for_socket(pool *p, int fd);
  extern void ap_note_digest_auth_failure(request_rec *r);
  extern void ap_note_subprocess(pool *a, int pid, enum kill_conditions how);
  extern piped_log * ap_open_piped_log (pool *p, const char *program);
  extern char * ap_os_escape_path(pool *p, const char *path, int partial);
  extern table * ap_overlay_tables(pool *p, const table *overlay, const table 
*base);
  extern void * ap_palloc(struct pool *a, int reqsize);
  extern time_t ap_parseHTTPdate(const char *date);
  extern int ap_parse_uri_components(pool *p, const char *uri, uri_components 
*uptr);
  extern int ap_parse_hostinfo_components(pool *p, const char *hostinfo, 
uri_components *uptr);
  extern void * ap_pcalloc(struct pool *a, int size);
  /* prototype for `ap_pcfg_open_custom' cannot be found */
  extern configfile_t * ap_pcfg_openfile(pool *p, const char *name);
  extern void ap_pclosedir(pool *p, DIR * d);
  extern int ap_pclosef(pool *a, int fd);
  extern int ap_pclosesocket(pool *a, int sock);
  extern struct hostent * ap_pduphostent(pool *p, struct hostent *hp);
  extern int ap_pfclose(pool *a, FILE *fd);
  extern FILE * ap_pfdopen(pool *a, int fd, const char *mode);
  extern FILE * ap_pfopen(pool *a, const char *name, const char *mode);
  extern struct hostent * ap_pgethostbyname(pool *p, const char *hostname);
  extern int ap_pool_is_ancestor(pool *a, pool *b);
  extern void ap_pool_join(pool *p, pool *sub);
  extern DIR * ap_popendir(pool *p, const char *name);
  extern int ap_popenf(pool *a, const char *name, int flg, int mode);
  extern regex_t * ap_pregcomp(pool *p, const char *pattern, int cflags);
  extern void ap_pregfree(pool *p, regex_t * reg);
  /* prototype for `ap_pregsub' cannot be found */
  extern const char * ap_psignature(const char *prefix, request_rec *r);
  extern int ap_psocket(pool *p, int domain, int type, int protocol);
  extern char * ap_pstrdup(struct pool *a, const char *s);
  extern char * ap_pstrndup(struct pool *a, const char *s, int n);
  extern char * ap_pvsprintf(pool *p, const char *fmt, va_list ap);
  extern void * ap_push_array(array_header *arr);
  extern time_t ap_rationalize_mtime(request_rec *r, time_t mtime);
  extern void ap_register_cleanup(pool *p, void *data, void (*plain_cleanup);
  extern void ap_remove_module(module *m);
  extern array_header * ap_requires (request_rec *r);
  extern void ap_reset_timeout(request_rec *r);
  extern int ap_rflush(request_rec *r);
  extern int ap_rind(const char *s, char c);
  extern int ap_rprintf(request_rec *r, const char *fmt,...);
  extern int ap_rputc(int c, request_rec *r);
  extern int ap_rputs(const char *str, request_rec *r);
  extern void ap_run_cleanup(pool *p, void *data, void (*cleanup);
  extern int ap_run_sub_req(request_rec *r);
  extern int ap_rwrite(const void *buf, int nbyte, request_rec *r);
  extern int ap_satisfies (request_rec *r);
  extern int ap_scan_script_header_err(request_rec *r, FILE *f, char *buffer);
  extern ;
  extern long ap_send_fb(BUFF *fb, request_rec *r);
  extern long ap_send_fb_length(BUFF *fb, request_rec *r, long length);
  extern long ap_send_fd(FILE *f, request_rec *r);
  extern long ap_send_fd_length(FILE *f, request_rec *r, long length);
  extern void ap_send_http_header(request_rec *r);
  extern ;
  extern void ap_send_size(size_t size, request_rec *r);
  extern char * ap_server_root_relative(pool *p, char *file);
  extern int ap_set_byterange(request_rec *r);
  extern int ap_set_content_length(request_rec *r, long clength);
  extern void ap_set_etag(request_rec *r);
  extern int ap_set_keepalive(request_rec *r);
  extern void ap_set_last_modified(request_rec *r);
  extern void ap_set_module_config(void *conf_vector, module *m, void *val);
  extern int ap_setup_client_block(request_rec *r, int read_policy);
  extern int ap_should_client_block(request_rec *r);
  extern void ap_soft_timeout(char *name, request_rec *r);
  extern int ap_some_auth_required(request_rec *r);
  extern int ap_spawn_child_err(pool *p, int (*func);
  extern int ap_spawn_child_err_buff(pool *p, int (*func);
  extern const char * ap_srm_command_loop(cmd_parms *parms, void *config);
  extern void ap_str_tolower(char *str);
  extern int ap_strcasecmp_match(const char *str, const char *exp);
  extern int ap_strcmp_match(const char *str, const char *exp);
  extern ;
  extern ;
  extern void ap_sync_scoreboard_image();
  extern void ap_table_add(table *t, const char *key, const char *val);
  extern void ap_table_addn(table *t, const char *key, const char *val);
  extern char * ap_table_get(const table *t, const char *key);
  extern void ap_table_merge(table *t, const char *key, const char *val);
  extern void ap_table_mergen(table *t, const char *key, const char *val);
  extern void ap_table_set(table *t, const char *key, const char *val);
  extern void ap_table_setn(table *t, const char *key, const char *val);
  extern void ap_table_unset(table *t, const char *key);
  extern time_t ap_tm2sec(const struct tm * t);
  extern uid_t ap_uname2id(const char *name);
  extern void ap_unblock_alarms();
  extern int ap_unescape_url(char *url);
  extern char * ap_unparse_uri_components(pool *p, const uri_components *uptr, 
unsigned flags);
  extern time_t ap_update_mtime(request_rec *r, time_t dependency_mtime);
  extern char * ap_uudecode(pool *p, const char *bufcoded);
  extern int ap_vbprintf(BUFF *fb, const char *fmt, va_list ap);
  extern const char * ap_get_server_built();
  extern const char * ap_get_server_version();
  extern void ap_log_error (const char *err, server_rec *s);
  
  #endif /* APAPI_H */
  
  
  
  1.1                  apache-1.3/src/test/rename/apapi.h.mk
  
  Index: apapi.h.mk
  ===================================================================
  :
  eval 'exec perl -S $0 ${1+"$@"}'
      if $running_under_some_shell;
  ##
  ##  apapi.h.mk -- 
  ##
  
  #   configuration
  $id       = "../src/ID";
  $renamecf = "./rename.cf";
  $header   = "./apapi.h";
  
  sub func_prototype {
      my ($func) = @_;
  
      $rc = join('', `lid -f $id --key=token --result=grep $func`);
      if (($r, $f) = ($rc =~ m|\.c:\d+:\s*API_EXPORT\((.+?)\)(.+?\))|s)) {
          $pt = "$r$f";
          $pt =~ s|\n.+?:\d+:||sg;
          return "extern $1$2;";
      }
      return '';
  }
  
  open(CFG, "<$renamecf") || die;
  open(HDR, ">$header") || die;
  print HDR <<'EOT';
  /*
  **  apapi.h -- Apache API prototypes
  */
  
  #ifndef APAPI_H
  #define APAPI_H
  
  EOT
  while ($l = <CFG>) {
      $l =~ s|\n$||;
      next if ($l =~ m|^\s*#.*| or $l =~ m|^\s*$|);
      if (($s1, $old, $s2, $new, $s3) = ($l =~ m|^(\s*)(\S+)(\s+)(\S+)(\s*)$|)) 
{
          if ($new =~ m|^API_|) {
              $new =~ s|^API_|ap_|;
              $pt = &func_prototype($new);
                        if ($pt eq '') {
                                print STDERR "Sorry, prototype for `$new' 
cannot be found\n";
                                print HDR "/* prototype for `$new' cannot be 
found */\n";
                        }
                        else {
                  print HDR "$pt\n";
                        }
          }
      }
  }
  print HDR <<'EOT';
  
  #endif /* APAPI_H */
  EOT
  close(CFG);
  close(HDR);
  
  
  
  
  1.1                  apache-1.3/src/test/rename/apapi_compat.h
  
  Index: apapi_compat.h
  ===================================================================
  /*
  **  apapi_compat.h -- Apache API symbol space
  **                    backward compatibility defines
  **
  **  INCLUDE THIS HEADER FILE ONLY IF YOU REALLY NEED
  **  BACKWARD COMPATIBILITY FOR USED API SYMBOLS.
  */
  
  #ifndef APAPI_COMPAT_H
  #define APAPI_COMPAT_H
  
  /* 
   *   Mapping of Apache 1.2 symbols to 
   *   official Apache 1.3 API symbols
   */
  
  #define MD5Final                       ap_MD5Final
  #define MD5Init                        ap_MD5Init
  #define MD5Update                      ap_MD5Update
  #define add_cgi_vars                   ap_add_cgi_vars
  #define add_common_vars                ap_add_common_vars
  #define add_module                     ap_add_module
  #define add_named_module               ap_add_named_module
  #define allow_options                  ap_allow_options
  #define allow_overrides                ap_allow_overrides
  #define apapi_get_server_built         ap_get_server_built
  #define apapi_get_server_version       ap_get_server_version
  #define aplog_error                    ap_log_error
  #define append_arrays                  ap_append_arrays
  #define array_cat                      ap_array_cat
  #define auth_name                      ap_auth_name
  #define auth_type                      ap_auth_type
  #define basic_http_header              ap_basic_http_header
  #define bclose                         ap_bclose
  #define bcreate                        ap_bcreate
  #define bfilbuf                        ap_bfilbuf
  #define bfileno                        ap_bfileno
  #define bflsbuf                        ap_bflsbuf
  #define bflush                         ap_bflush
  #define bgetopt                        ap_bgetopt
  #define bgets                          ap_bgets
  #define bhalfduplex                    ap_bhalfduplex
  #define block_alarms                   ap_block_alarms
  #define blookc                         ap_blookc
  #define bnonblock                      ap_bnonblock
  #define bonerror                       ap_bonerror
  #define bpushfd                        ap_bpushfd
  #define bputs                          ap_bputs
  #define bread                          ap_bread
  #define bsetflag                       ap_bsetflag
  #define bsetopt                        ap_bsetopt
  #define bskiplf                        ap_bskiplf
  #define bwrite                         ap_bwrite
  #define bytes_in_free_blocks           ap_bytes_in_free_blocks
  #define bytes_in_pool                  ap_bytes_in_pool
  #define call_exec                      ap_call_exec
  #define can_exec                       ap_can_exec
  #define cfg_closefile                  ap_cfg_closefile
  #define cfg_getc                       ap_cfg_getc
  #define cfg_getline                    ap_cfg_getline
  #define chdir_file                     ap_chdir_file
  #define check_cmd_context              ap_check_cmd_context
  #define checkmask                      ap_checkmask
  #define child_terminate                ap_child_terminate
  #define cleanup_for_exec               ap_cleanup_for_exec
  #define clear_module_list              ap_clear_module_list
  #define clear_pool                     ap_clear_pool
  #define clear_table                    ap_clear_table
  #define close_piped_log                ap_close_piped_log
  #define construct_server               ap_construct_server
  #define construct_url                  ap_construct_url
  #define copy_array                     ap_copy_array
  #define copy_array_hdr                 ap_copy_array_hdr
  #define copy_table                     ap_copy_table
  #define count_dirs                     ap_count_dirs
  #define create_environment             ap_create_environment
  #define create_per_dir_config          ap_create_per_dir_config
  #define default_port_for_request       ap_default_port_for_request
  #define default_port_for_scheme        ap_default_port_for_scheme
  #define default_type                   ap_default_type
  #define destroy_pool                   ap_destroy_pool
  #define destroy_sub_req                ap_destroy_sub_req
  #define discard_request_body           ap_discard_request_body
  #define document_root                  ap_document_root
  #define each_byterange                 ap_each_byterange
  #define error_log2stderr               ap_error_log2stderr
  #define escape_html                    ap_escape_html
  #define escape_path_segment            ap_escape_path_segment
  #define escape_shell_cmd               ap_escape_shell_cmd
  #define exists_scoreboard_image        ap_exists_scoreboard_image
  #define find_last_token                ap_find_last_token
  #define find_linked_module             ap_find_linked_module
  #define find_module_name               ap_find_module_name
  #define find_path_info                 ap_find_path_info
  #define find_pool                      ap_find_pool
  #define find_token                     ap_find_token
  #define get_basic_auth_pw              ap_get_basic_auth_pw
  #define get_client_block               ap_get_client_block
  #define get_gmtoff                     ap_get_gmtoff
  #define get_module_config              ap_get_module_config
  #define get_remote_host                ap_get_remote_host
  #define get_remote_logname             ap_get_remote_logname
  #define get_server_name                ap_get_server_name
  #define get_server_port                ap_get_server_port
  #define get_time                       ap_get_time
  #define get_token                      ap_get_token
  #define getparents                     ap_getparents
  #define getword                        ap_getword
  #define getword_conf                   ap_getword_conf
  #define getword_conf_nc                ap_getword_conf_nc
  #define getword_nc                     ap_getword_nc
  #define getword_nulls                  ap_getword_nulls
  #define getword_nulls_nc               ap_getword_nulls_nc
  #define getword_white                  ap_getword_white
  #define getword_white_nc               ap_getword_white_nc
  #define gm_timestr_822                 ap_gm_timestr_822
  #define gname2id                       ap_gname2id
  #define hard_timeout                   ap_hard_timeout
  #define ht_time                        ap_ht_time
  #define ind                            ap_ind
  #define index_of_response              ap_index_of_response
  #define internal_redirect              ap_internal_redirect
  #define internal_redirect_handler      ap_internal_redirect_handler
  #define is_directory                   ap_is_directory
  #define is_initial_req                 ap_is_initial_req
  #define is_matchexp                    ap_is_matchexp
  #define is_url                         ap_is_url
  #define kill_cleanup                   ap_kill_cleanup
  #define kill_cleanups_for_fd           ap_kill_cleanups_for_fd
  #define kill_cleanups_for_socket       ap_kill_cleanups_for_socket
  #define kill_timeout                   ap_kill_timeout
  #define log_assert                     ap_log_assert
  #define log_error                      ap_log_error
  #define log_printf                     ap_log_printf
  #define log_reason                     ap_log_reason
  #define log_unixerr                    ap_log_unixerr
  #define make_array                     ap_make_array
  #define make_dirstr                    ap_make_dirstr
  #define make_dirstr_parent             ap_make_dirstr_parent
  #define make_dirstr_prefix             ap_make_dirstr_prefix
  #define make_full_path                 ap_make_full_path
  #define make_sub_pool                  ap_make_sub_pool
  #define make_table                     ap_make_table
  #define matches_request_vhost          ap_matches_request_vhost
  #define meets_conditions               ap_meets_conditions
  #define no2slash                       ap_no2slash
  #define note_auth_failure              ap_note_auth_failure
  #define note_basic_auth_failure        ap_note_basic_auth_failure
  #define note_cleanups_for_fd           ap_note_cleanups_for_fd
  #define note_cleanups_for_file         ap_note_cleanups_for_file
  #define note_cleanups_for_socket       ap_note_cleanups_for_socket
  #define note_digest_auth_failure       ap_note_digest_auth_failure
  #define note_subprocess                ap_note_subprocess
  #define open_piped_log                 ap_open_piped_log
  #define os_escape_path                 ap_os_escape_path
  #define overlay_tables                 ap_overlay_tables
  #define palloc                         ap_palloc
  #define parseHTTPdate                  ap_parseHTTPdate
  #define parse_hostinfo_components      ap_parse_hostinfo_components
  #define parse_uri_components           ap_parse_uri_components
  #define pcalloc                        ap_pcalloc
  #define pcfg_open_custom               ap_pcfg_open_custom
  #define pcfg_openfile                  ap_pcfg_openfile
  #define pclosedir                      ap_pclosedir
  #define pclosef                        ap_pclosef
  #define pclosesocket                   ap_pclosesocket
  #define pduphostent                    ap_pduphostent
  #define pfclose                        ap_pfclose
  #define pfdopen                        ap_pfdopen
  #define pfopen                         ap_pfopen
  #define pgethostbyname                 ap_pgethostbyname
  #define pool_is_ancestor               ap_pool_is_ancestor
  #define pool_join                      ap_pool_join
  #define popendir                       ap_popendir
  #define popenf                         ap_popenf
  #define pregcomp                       ap_pregcomp
  #define pregfree                       ap_pregfree
  #define pregsub                        ap_pregsub
  #define psignature                     ap_psignature
  #define psocket                        ap_psocket
  #define pstrdup                        ap_pstrdup
  #define pstrndup                       ap_pstrndup
  #define push_array                     ap_push_array
  #define pvsprintf                      ap_pvsprintf
  #define rationalize_mtime              ap_rationalize_mtime
  #define register_cleanup               ap_register_cleanup
  #define remove_module                  ap_remove_module
  #define requires                       ap_requires
  #define reset_timeout                  ap_reset_timeout
  #define rflush                         ap_rflush
  #define rind                           ap_rind
  #define rprintf                        ap_rprintf
  #define rputc                          ap_rputc
  #define rputs                          ap_rputs
  #define run_cleanup                    ap_run_cleanup
  #define run_sub_req                    ap_run_sub_req
  #define rwrite                         ap_rwrite
  #define satisfies                      ap_satisfies
  #define scan_script_header_err         ap_scan_script_header_err
  #define scan_script_header_err_buff    ap_scan_script_header_err_buff
  #define send_fb                        ap_send_fb
  #define send_fb_length                 ap_send_fb_length
  #define send_fd                        ap_send_fd
  #define send_fd_length                 ap_send_fd_length
  #define send_http_header               ap_send_http_header
  #define send_mmap                      ap_send_mmap
  #define send_size                      ap_send_size
  #define server_root_relative           ap_server_root_relative
  #define set_byterange                  ap_set_byterange
  #define set_content_length             ap_set_content_length
  #define set_etag                       ap_set_etag
  #define set_keepalive                  ap_set_keepalive
  #define set_last_modified              ap_set_last_modified
  #define set_module_config              ap_set_module_config
  #define setup_client_block             ap_setup_client_block
  #define should_client_block            ap_should_client_block
  #define soft_timeout                   ap_soft_timeout
  #define some_auth_required             ap_some_auth_required
  #define spawn_child_err                ap_spawn_child_err
  #define spawn_child_err_buff           ap_spawn_child_err_buff
  #define srm_command_loop               ap_srm_command_loop
  #define str_tolower                    ap_str_tolower
  #define strcasecmp_match               ap_strcasecmp_match
  #define strcmp_match                   ap_strcmp_match
  #define sub_req_lookup_file            ap_sub_req_lookup_file
  #define sub_req_lookup_uri             ap_sub_req_lookup_uri
  #define sync_scoreboard_image          ap_sync_scoreboard_image
  #define table_add                      ap_table_add
  #define table_addn                     ap_table_addn
  #define table_get                      ap_table_get
  #define table_merge                    ap_table_merge
  #define table_mergen                   ap_table_mergen
  #define table_set                      ap_table_set
  #define table_setn                     ap_table_setn
  #define table_unset                    ap_table_unset
  #define tm2sec                         ap_tm2sec
  #define uname2id                       ap_uname2id
  #define unblock_alarms                 ap_unblock_alarms
  #define unescape_url                   ap_unescape_url
  #define unparse_uri_components         ap_unparse_uri_components
  #define update_mtime                   ap_update_mtime
  #define uudecode                       ap_uudecode
  #define vbprintf                       ap_vbprintf
  
  /* 
   *   Mapping of Apache 1.2 symbols to 
   *   Apache 1.3 symbols which are
   *   _NO LONGER PART OF THE API_
   */
  
  #ifdef APAPI_STRICT
  
  #define add_per_dir_conf               DO_NOT_USE_add_per_dir_conf
  #define add_per_url_conf               DO_NOT_USE_add_per_url_conf
  #define bind_address                   DO_NOT_USE_bind_address
  #define bprintf                        DO_NOT_USE_bprintf
  #define bvputs                         DO_NOT_USE_bvputs
  #define check_access                   DO_NOT_USE_check_access
  #define check_alarm                    DO_NOT_USE_check_alarm
  #define check_auth                     DO_NOT_USE_check_auth
  #define check_user_id                  DO_NOT_USE_check_user_id
  #define child_exit_modules             DO_NOT_USE_child_exit_modules
  #define child_init_modules             DO_NOT_USE_child_init_modules
  #define core_reorder_directories       DO_NOT_USE_core_reorder_directories
  #define coredump_dir                   DO_NOT_USE_coredump_dir
  #define create_request_config          DO_NOT_USE_create_request_config
  #define daemons_limit                  DO_NOT_USE_daemons_limit
  #define daemons_max_free               DO_NOT_USE_daemons_max_free
  #define daemons_min_free               DO_NOT_USE_daemons_min_free
  #define daemons_to_start               DO_NOT_USE_daemons_to_start
  #define day_snames                     DO_NOT_USE_day_snames
  #define die                            DO_NOT_USE_die
  #define dummy_mutex                    DO_NOT_USE_dummy_mutex
  #define excess_requests_per_child      DO_NOT_USE_excess_requests_per_child
  #define finalize_request_protocol      DO_NOT_USE_finalize_request_protocol
  #define finalize_sub_req_protocol      DO_NOT_USE_finalize_sub_req_protocol
  #define find_command                   DO_NOT_USE_find_command
  #define find_command_in_modules        DO_NOT_USE_find_command_in_modules
  #define find_types                     DO_NOT_USE_find_types
  #define fini_vhost_config              DO_NOT_USE_fini_vhost_config
  #define fnmatch                        DO_NOT_USE_fnmatch
  #define force_library_loading          DO_NOT_USE_force_library_loading
  #define get_local_host                 DO_NOT_USE_get_local_host
  #define get_virthost_addr              DO_NOT_USE_get_virthost_addr
  #define group_id                       DO_NOT_USE_group_id
  #define handle_command                 DO_NOT_USE_handle_command
  #define header_parse                   DO_NOT_USE_header_parse
  #define init_alloc                     DO_NOT_USE_init_alloc
  #define init_modules                   DO_NOT_USE_init_modules
  #define init_vhost_config              DO_NOT_USE_init_vhost_config
  #define init_virtual_host              DO_NOT_USE_init_virtual_host
  #define invoke_handler                 DO_NOT_USE_invoke_handler
  #define is_fnmatch                     DO_NOT_USE_is_fnmatch
  #define keepalive_timeout              DO_NOT_USE_keepalive_timeout
  #define limit_section                  DO_NOT_USE_limit_section
  #define listenbacklog                  DO_NOT_USE_listenbacklog
  #define listeners                      DO_NOT_USE_listeners
  #define lock_fname                     DO_NOT_USE_lock_fname
  #define log_pid                        DO_NOT_USE_log_pid
  #define log_transaction                DO_NOT_USE_log_transaction
  #define max_requests_per_child         DO_NOT_USE_max_requests_per_child
  #define merge_per_dir_configs          DO_NOT_USE_merge_per_dir_configs
  #define month_snames                   DO_NOT_USE_month_snames
  #define null_cleanup                   DO_NOT_USE_null_cleanup
  #define open_logs                      DO_NOT_USE_open_logs
  #define os_is_path_absolute            DO_NOT_USE_os_is_path_absolute
  #define parse_htaccess                 DO_NOT_USE_parse_htaccess
  #define parse_uri                      DO_NOT_USE_parse_uri
  #define parse_vhost_addrs              DO_NOT_USE_parse_vhost_addrs
  #define pid_fname                      DO_NOT_USE_pid_fname
  #define process_request                DO_NOT_USE_process_request
  #define process_resource_config        DO_NOT_USE_process_resource_config
  #define proxy_add_header               DO_NOT_USE_proxy_add_header
  #define proxy_c2hex                    DO_NOT_USE_proxy_c2hex
  #define proxy_cache_check              DO_NOT_USE_proxy_cache_check
  #define proxy_cache_error              DO_NOT_USE_proxy_cache_error
  #define proxy_cache_tidy               DO_NOT_USE_proxy_cache_tidy
  #define proxy_cache_update             DO_NOT_USE_proxy_cache_update
  #define proxy_canon_netloc             DO_NOT_USE_proxy_canon_netloc
  #define proxy_canonenc                 DO_NOT_USE_proxy_canonenc
  #define proxy_connect_handler          DO_NOT_USE_proxy_connect_handler
  #define proxy_date_canon               DO_NOT_USE_proxy_date_canon
  #define proxy_del_header               DO_NOT_USE_proxy_del_header
  #define proxy_doconnect                DO_NOT_USE_proxy_doconnect
  #define proxy_ftp_canon                DO_NOT_USE_proxy_ftp_canon
  #define proxy_ftp_handler              DO_NOT_USE_proxy_ftp_handler
  #define proxy_garbage_coll             DO_NOT_USE_proxy_garbage_coll
  #define proxy_garbage_init             DO_NOT_USE_proxy_garbage_init
  #define proxy_get_header               DO_NOT_USE_proxy_get_header
  #define proxy_hash                     DO_NOT_USE_proxy_hash
  #define proxy_hex2c                    DO_NOT_USE_proxy_hex2c
  #define proxy_hex2sec                  DO_NOT_USE_proxy_hex2sec
  #define proxy_host2addr                DO_NOT_USE_proxy_host2addr
  #define proxy_http_canon               DO_NOT_USE_proxy_http_canon
  #define proxy_http_handler             DO_NOT_USE_proxy_http_handler
  #define proxy_is_domainname            DO_NOT_USE_proxy_is_domainname
  #define proxy_is_hostname              DO_NOT_USE_proxy_is_hostname
  #define proxy_is_ipaddr                DO_NOT_USE_proxy_is_ipaddr
  #define proxy_is_word                  DO_NOT_USE_proxy_is_word
  #define proxy_liststr                  DO_NOT_USE_proxy_liststr
  #define proxy_log_uerror               DO_NOT_USE_proxy_log_uerror
  #define proxy_read_headers             DO_NOT_USE_proxy_read_headers
  #define proxy_sec2hex                  DO_NOT_USE_proxy_sec2hex
  #define proxy_send_fb                  DO_NOT_USE_proxy_send_fb
  #define proxy_send_headers             DO_NOT_USE_proxy_send_headers
  #define proxyerror                     DO_NOT_USE_proxyerror
  #define psprintf                       DO_NOT_USE_psprintf
  #define pstrcat                        DO_NOT_USE_pstrcat
  #define read_config                    DO_NOT_USE_read_config
  #define read_request                   DO_NOT_USE_read_request
  #define register_other_child           DO_NOT_USE_register_other_child
  #define response_code_string           DO_NOT_USE_response_code_string
  #define restart_time                   DO_NOT_USE_restart_time
  #define rfc1413                        DO_NOT_USE_rfc1413
  #define rfc1413_timeout                DO_NOT_USE_rfc1413_timeout
  #define run_fixups                     DO_NOT_USE_run_fixups
  #define run_post_read_request          DO_NOT_USE_run_post_read_request
  #define rvputs                         DO_NOT_USE_rvputs
  #define scoreboard_fname               DO_NOT_USE_scoreboard_fname
  #define scoreboard_image               DO_NOT_USE_scoreboard_image
  #define send_error_response            DO_NOT_USE_send_error_response
  #define send_header_field              DO_NOT_USE_send_header_field
  #define send_http_options              DO_NOT_USE_send_http_options
  #define send_http_trace                DO_NOT_USE_send_http_trace
  #define server_argv0                   DO_NOT_USE_server_argv0
  #define server_confname                DO_NOT_USE_server_confname
  #define server_post_read_config        DO_NOT_USE_server_post_read_config
  #define server_pre_read_config         DO_NOT_USE_server_pre_read_config
  #define server_root                    DO_NOT_USE_server_root
  #define set_callback_and_alarm         DO_NOT_USE_set_callback_and_alarm
  #define set_file_slot                  DO_NOT_USE_set_file_slot
  #define set_flag_slot                  DO_NOT_USE_set_flag_slot
  #define set_name_virtual_host          DO_NOT_USE_set_name_virtual_host
  #define set_string_slot                DO_NOT_USE_set_string_slot
  #define set_string_slot_lower          DO_NOT_USE_set_string_slot_lower
  #define set_sub_req_protocol           DO_NOT_USE_set_sub_req_protocol
  #define setup_prelinked_modules        DO_NOT_USE_setup_prelinked_modules
  #define show_directives                DO_NOT_USE_show_directives
  #define show_modules                   DO_NOT_USE_show_modules
  #define standalone                     DO_NOT_USE_standalone
  #define start_restart                  DO_NOT_USE_start_restart
  #define start_shutdown                 DO_NOT_USE_start_shutdown
  #define suexec_enabled                 DO_NOT_USE_suexec_enabled
  #define table_do                       DO_NOT_USE_table_do
  #define threads_per_child              DO_NOT_USE_threads_per_child
  #define time_process_request           DO_NOT_USE_time_process_request
  #define translate_name                 DO_NOT_USE_translate_name
  #define unregister_other_child         DO_NOT_USE_unregister_other_child
  #define update_child_status            DO_NOT_USE_update_child_status
  #define update_vhost_from_headers      DO_NOT_USE_update_vhost_from_headers
  #define update_vhost_given_ip          DO_NOT_USE_update_vhost_given_ip
  #define user_id                        DO_NOT_USE_user_id
  #define user_name                      DO_NOT_USE_user_name
  #define util_init                      DO_NOT_USE_util_init
  #define util_uri_init                  DO_NOT_USE_util_uri_init
  
  #else /* APAPI_STRICT */
  
  #define add_per_dir_conf               apx_add_per_dir_conf
  #define add_per_url_conf               apx_add_per_url_conf
  #define bind_address                   apx_bind_address
  #define bprintf                        apx_bprintf
  #define bvputs                         apx_bvputs
  #define check_access                   apx_check_access
  #define check_alarm                    apx_check_alarm
  #define check_auth                     apx_check_auth
  #define check_user_id                  apx_check_user_id
  #define child_exit_modules             apx_child_exit_modules
  #define child_init_modules             apx_child_init_modules
  #define core_reorder_directories       apx_core_reorder_directories
  #define coredump_dir                   apx_coredump_dir
  #define create_request_config          apx_create_request_config
  #define daemons_limit                  apx_daemons_limit
  #define daemons_max_free               apx_daemons_max_free
  #define daemons_min_free               apx_daemons_min_free
  #define daemons_to_start               apx_daemons_to_start
  #define day_snames                     apx_day_snames
  #define die                            apx_die
  #define dummy_mutex                    apx_dummy_mutex
  #define excess_requests_per_child      apx_excess_requests_per_child
  #define finalize_request_protocol      apx_finalize_request_protocol
  #define finalize_sub_req_protocol      apx_finalize_sub_req_protocol
  #define find_command                   apx_find_command
  #define find_command_in_modules        apx_find_command_in_modules
  #define find_types                     apx_find_types
  #define fini_vhost_config              apx_fini_vhost_config
  #define fnmatch                        apx_fnmatch
  #define force_library_loading          apx_force_library_loading
  #define get_local_host                 apx_get_local_host
  #define get_virthost_addr              apx_get_virthost_addr
  #define group_id                       apx_group_id
  #define handle_command                 apx_handle_command
  #define header_parse                   apx_header_parse
  #define init_alloc                     apx_init_alloc
  #define init_modules                   apx_init_modules
  #define init_vhost_config              apx_init_vhost_config
  #define init_virtual_host              apx_init_virtual_host
  #define invoke_handler                 apx_invoke_handler
  #define is_fnmatch                     apx_is_fnmatch
  #define keepalive_timeout              apx_keepalive_timeout
  #define limit_section                  apx_limit_section
  #define listenbacklog                  apx_listenbacklog
  #define listeners                      apx_listeners
  #define lock_fname                     apx_lock_fname
  #define log_pid                        apx_log_pid
  #define log_transaction                apx_log_transaction
  #define max_requests_per_child         apx_max_requests_per_child
  #define merge_per_dir_configs          apx_merge_per_dir_configs
  #define month_snames                   apx_month_snames
  #define null_cleanup                   apx_null_cleanup
  #define open_logs                      apx_open_logs
  #define os_is_path_absolute            apx_os_is_path_absolute
  #define parse_htaccess                 apx_parse_htaccess
  #define parse_uri                      apx_parse_uri
  #define parse_vhost_addrs              apx_parse_vhost_addrs
  #define pid_fname                      apx_pid_fname
  #define process_request                apx_process_request
  #define process_resource_config        apx_process_resource_config
  #define proxy_add_header               apx_proxy_add_header
  #define proxy_c2hex                    apx_proxy_c2hex
  #define proxy_cache_check              apx_proxy_cache_check
  #define proxy_cache_error              apx_proxy_cache_error
  #define proxy_cache_tidy               apx_proxy_cache_tidy
  #define proxy_cache_update             apx_proxy_cache_update
  #define proxy_canon_netloc             apx_proxy_canon_netloc
  #define proxy_canonenc                 apx_proxy_canonenc
  #define proxy_connect_handler          apx_proxy_connect_handler
  #define proxy_date_canon               apx_proxy_date_canon
  #define proxy_del_header               apx_proxy_del_header
  #define proxy_doconnect                apx_proxy_doconnect
  #define proxy_ftp_canon                apx_proxy_ftp_canon
  #define proxy_ftp_handler              apx_proxy_ftp_handler
  #define proxy_garbage_coll             apx_proxy_garbage_coll
  #define proxy_garbage_init             apx_proxy_garbage_init
  #define proxy_get_header               apx_proxy_get_header
  #define proxy_hash                     apx_proxy_hash
  #define proxy_hex2c                    apx_proxy_hex2c
  #define proxy_hex2sec                  apx_proxy_hex2sec
  #define proxy_host2addr                apx_proxy_host2addr
  #define proxy_http_canon               apx_proxy_http_canon
  #define proxy_http_handler             apx_proxy_http_handler
  #define proxy_is_domainname            apx_proxy_is_domainname
  #define proxy_is_hostname              apx_proxy_is_hostname
  #define proxy_is_ipaddr                apx_proxy_is_ipaddr
  #define proxy_is_word                  apx_proxy_is_word
  #define proxy_liststr                  apx_proxy_liststr
  #define proxy_log_uerror               apx_proxy_log_uerror
  #define proxy_read_headers             apx_proxy_read_headers
  #define proxy_sec2hex                  apx_proxy_sec2hex
  #define proxy_send_fb                  apx_proxy_send_fb
  #define proxy_send_headers             apx_proxy_send_headers
  #define proxyerror                     apx_proxyerror
  #define psprintf                       apx_psprintf
  #define pstrcat                        apx_pstrcat
  #define read_config                    apx_read_config
  #define read_request                   apx_read_request
  #define register_other_child           apx_register_other_child
  #define response_code_string           apx_response_code_string
  #define restart_time                   apx_restart_time
  #define rfc1413                        apx_rfc1413
  #define rfc1413_timeout                apx_rfc1413_timeout
  #define run_fixups                     apx_run_fixups
  #define run_post_read_request          apx_run_post_read_request
  #define rvputs                         apx_rvputs
  #define scoreboard_fname               apx_scoreboard_fname
  #define scoreboard_image               apx_scoreboard_image
  #define send_error_response            apx_send_error_response
  #define send_header_field              apx_send_header_field
  #define send_http_options              apx_send_http_options
  #define send_http_trace                apx_send_http_trace
  #define server_argv0                   apx_server_argv0
  #define server_confname                apx_server_confname
  #define server_post_read_config        apx_server_post_read_config
  #define server_pre_read_config         apx_server_pre_read_config
  #define server_root                    apx_server_root
  #define set_callback_and_alarm         apx_set_callback_and_alarm
  #define set_file_slot                  apx_set_file_slot
  #define set_flag_slot                  apx_set_flag_slot
  #define set_name_virtual_host          apx_set_name_virtual_host
  #define set_string_slot                apx_set_string_slot
  #define set_string_slot_lower          apx_set_string_slot_lower
  #define set_sub_req_protocol           apx_set_sub_req_protocol
  #define setup_prelinked_modules        apx_setup_prelinked_modules
  #define show_directives                apx_show_directives
  #define show_modules                   apx_show_modules
  #define standalone                     apx_standalone
  #define start_restart                  apx_start_restart
  #define start_shutdown                 apx_start_shutdown
  #define suexec_enabled                 apx_suexec_enabled
  #define table_do                       apx_table_do
  #define threads_per_child              apx_threads_per_child
  #define time_process_request           apx_time_process_request
  #define translate_name                 apx_translate_name
  #define unregister_other_child         apx_unregister_other_child
  #define update_child_status            apx_update_child_status
  #define update_vhost_from_headers      apx_update_vhost_from_headers
  #define update_vhost_given_ip          apx_update_vhost_given_ip
  #define user_id                        apx_user_id
  #define user_name                      apx_user_name
  #define util_init                      apx_util_init
  #define util_uri_init                  apx_util_uri_init
  
  #endif /* APAPI_STRICT */
  
  #endif /* APAPI_COMPAT_H */
  
  
  
  1.1                  apache-1.3/src/test/rename/apapi_compat.h.mk
  
  Index: apapi_compat.h.mk
  ===================================================================
  :
  eval 'exec perl -S $0 ${1+"$@"}'
      if $running_under_some_shell;
  ##
  ##  apapi_compat.h.mk 
  ##
  
  #   configuration
  $config = "./rename.cf";
  $header = "./apapi_compat.h";
  
  #   read config file into hash
  %PREFIX = ();
  %SUBST = ();
  open(CFG, "<$config") || die;
  while (<CFG>) {
      s|\n$||;
      next if (m|^\s*#.*| or m|^\s*$|);
      if (($symbolic, $real) = m|^\s*(\S+)\s*=\s*(\S+)\s*$|) {
          $PREFIX{$symbolic} = $real;
      }
      elsif (($old, $new) = m|^\s*(\S+)\s+(\S+)\s*$|) {
          foreach $p (keys(%PREFIX)) {
              $new =~ s|^$p|$PREFIX{$p}|;
          }
          $SUBST{$old} = $new;
      }
  }
  close(CFG);
  
  #   create the C header file
  open(FP, ">$header") || die;
  print FP <<'EOT';
  /*
  **  apapi_compat.h -- Apache API symbol space
  **                    backward compatibility defines
  **
  **  INCLUDE THIS HEADER FILE ONLY IF YOU REALLY NEED
  **  BACKWARD COMPATIBILITY FOR USED API SYMBOLS.
  */
  
  #ifndef APAPI_COMPAT_H
  #define APAPI_COMPAT_H
  
  /* 
   *   Mapping of Apache 1.2 symbols to 
   *   official Apache 1.3 API symbols
   */
  
  EOT
  $apapiprefix = $PREFIX{'API_'};
  foreach $s (sort(keys(%SUBST))) {
      $n = $SUBST{$s};
      next if ($n !~ m|^$apapiprefix|);
      printf(FP "#define %-30s %s\n", $s, $n);
  }
  print FP <<'EOT';
  
  /* 
   *   Mapping of Apache 1.2 symbols to 
   *   Apache 1.3 symbols which are
   *   _NO LONGER PART OF THE API_
   */
  
  #ifdef APAPI_STRICT
  
  EOT
  foreach $s (sort(keys(%SUBST))) {
      $n = $SUBST{$s};
      next if ($n =~ m|^$apapiprefix|);
      printf(FP "#define %-30s %s\n", $s, "DO_NOT_USE_$s");
  }
  print FP <<'EOT';
  
  #else /* APAPI_STRICT */
  
  EOT
  foreach $s (sort(keys(%SUBST))) {
      $n = $SUBST{$s};
      next if ($n =~ m|^$apapiprefix|);
      printf(FP "#define %-30s %s\n", $s, $n);
  }
  print FP <<'EOT';
  
  #endif /* APAPI_STRICT */
  
  #endif /* APAPI_COMPAT_H */
  EOT
  close(FP);
  
  
  
  
  1.1                  apache-1.3/src/test/rename/rename.cf
  
  Index: rename.cf
  ===================================================================
  ##
  ##  rename.cf -- global symbol renaming list for Apache 1.3b6
  ##
  
  ##  The used prefixes for function/variable names of 
  ##
  ##  - Apache official API symbols (API):
  ##    the ones the user can use for programming modules
  ##    (should be as short as possible while still Apache specific)
  ##
  ##  - Apache official module handles (APM):
  ##    the symbols used for the module structures which
  ##    are a special case due to DSO support [mod_so] !
  ##    (should only be Apache specific and indicate module structs)
  ##
  ##  - Apache internal cross-object symbols (APX):
  ##    the ones we need for internal cross-object references
  ##    (should only be Apache specific and indicate cross-object symbols)
  ##
  API_ = ap_
  APM_ = apm_
  APX_ = apx_
  
  ##
  ##  The actual list of symbols to rename
  ##
  
  #   BSS
  bind_address                   APX_bind_address
  coredump_dir                   APX_coredump_dir
  daemons_limit                  APX_daemons_limit
  daemons_max_free               APX_daemons_max_free
  daemons_min_free               APX_daemons_min_free
  daemons_to_start               APX_daemons_to_start
  excess_requests_per_child      APX_excess_requests_per_child
  group_id                       APX_group_id
  listenbacklog                  APX_listenbacklog
  listeners                      APX_listeners
  lock_fname                     APX_lock_fname
  max_requests_per_child         APX_max_requests_per_child
  pid_fname                      APX_pid_fname
  restart_time                   APX_restart_time
  scoreboard_fname               APX_scoreboard_fname
  server_argv0                   APX_server_argv0
  server_confname                APX_server_confname
  server_post_read_config        APX_server_post_read_config
  server_pre_read_config         APX_server_pre_read_config
  server_root                    APX_server_root
  standalone                     APX_standalone
  threads_per_child              APX_threads_per_child
  user_id                        APX_user_id
  user_name                      APX_user_name
  
  #    DATA
  suexec_enabled                 APX_suexec_enabled
  day_snames                     APX_day_snames
  dummy_mutex                    APX_dummy_mutex
  month_snames                   APX_month_snames
  rfc1413_timeout                APX_rfc1413_timeout
  scoreboard_image               APX_scoreboard_image
  
  #    DATA
  #    these need a change in mod_so and a change to the name guessing in
  #    the src/Configure script plus changes to the embedded 
  #    "Name:" C comments inside the module source files
  #access_module                  APM_access_module
  #action_module                  APM_action_module
  #agent_log_module               APM_agent_log_module
  #alias_module                   APM_alias_module
  #anon_auth_module               APM_anon_auth_module
  #asis_module                    APM_asis_module
  #auth_module                    APM_auth_module
  #autoindex_module               APM_autoindex_module
  #cern_meta_module               APM_cern_meta_module
  #cgi_module                     APM_cgi_module
  #config_log_module              APM_config_log_module
  #core_module                    APM_core_module
  #db_auth_module                 APM_db_auth_module
  #dbm_auth_module                APM_dbm_auth_module
  #digest_module                  APM_digest_module
  #dir_module                     APM_dir_module
  #env_module                     APM_env_module
  #example_module                 APM_example_module
  #expires_module                 APM_expires_module
  #headers_module                 APM_headers_module
  #imap_module                    APM_imap_module
  #includes_module                APM_includes_module
  #info_module                    APM_info_module
  #mime_magic_module              APM_mime_magic_module
  #mime_module                    APM_mime_module
  #negotiation_module             APM_negotiation_module
  #proxy_module                   APM_proxy_module
  #referer_log_module             APM_referer_log_module
  #rewrite_module                 APM_rewrite_module
  #setenvif_module                APM_setenvif_module
  #so_module                      APM_so_module
  #speling_module                 APM_speling_module
  #status_module                  APM_status_module
  #top_module                     APM_top_module
  #unique_id_module               APM_unique_id_module
  #userdir_module                 APM_userdir_module
  #usertrack_module               APM_usertrack_module
  
  #   DATA
  #   these two require also a (trivial) change in Configure
  #prelinked_modules              APX_prelinked_modules
  #preloaded_modules              APX_preloaded_modules
  
  #   TEXT
  MD5Final                       API_MD5Final
  MD5Init                        API_MD5Init
  MD5Update                      API_MD5Update
  add_cgi_vars                   API_add_cgi_vars
  add_common_vars                API_add_common_vars
  add_module                     API_add_module
  add_named_module               API_add_named_module
  add_per_dir_conf               APX_add_per_dir_conf
  add_per_url_conf               APX_add_per_url_conf
  allow_options                  API_allow_options
  allow_overrides                API_allow_overrides
  append_arrays                  API_append_arrays
  array_cat                      API_array_cat
  auth_name                      API_auth_name
  auth_type                      API_auth_type
  basic_http_header              API_basic_http_header
  bclose                         API_bclose
  bcreate                        API_bcreate
  bfilbuf                        API_bfilbuf
  bfileno                        API_bfileno
  bflsbuf                        API_bflsbuf
  bflush                         API_bflush
  bgetopt                        API_bgetopt
  bgets                          API_bgets
  bhalfduplex                    API_bhalfduplex
  block_alarms                   API_block_alarms
  blookc                         API_blookc
  bnonblock                      API_bnonblock
  bonerror                       API_bonerror
  bpushfd                        API_bpushfd
  bputs                          API_bputs
  bprintf                        APX_bprintf
  bread                          API_bread
  bsetflag                       API_bsetflag
  bsetopt                        API_bsetopt
  bskiplf                        API_bskiplf
  bvputs                         APX_bvputs
  bwrite                         API_bwrite
  bytes_in_free_blocks           API_bytes_in_free_blocks
  bytes_in_pool                  API_bytes_in_pool
  call_exec                      API_call_exec
  can_exec                       API_can_exec
  cfg_closefile                  API_cfg_closefile
  cfg_getc                       API_cfg_getc
  cfg_getline                    API_cfg_getline
  chdir_file                     API_chdir_file
  check_access                   APX_check_access
  check_alarm                    APX_check_alarm
  check_auth                     APX_check_auth
  check_cmd_context              API_check_cmd_context
  check_user_id                  APX_check_user_id
  checkmask                      API_checkmask
  child_exit_modules             APX_child_exit_modules
  child_init_modules             APX_child_init_modules
  child_terminate                API_child_terminate
  cleanup_for_exec               API_cleanup_for_exec
  clear_module_list              API_clear_module_list
  clear_pool                     API_clear_pool
  clear_table                    API_clear_table
  close_piped_log                API_close_piped_log
  construct_server               API_construct_server
  construct_url                  API_construct_url
  copy_array                     API_copy_array
  copy_array_hdr                 API_copy_array_hdr
  copy_table                     API_copy_table
  core_reorder_directories       APX_core_reorder_directories
  count_dirs                     API_count_dirs
  create_environment             API_create_environment
  create_per_dir_config          API_create_per_dir_config
  create_request_config          APX_create_request_config
  default_port_for_request       API_default_port_for_request
  default_port_for_scheme        API_default_port_for_scheme
  default_type                   API_default_type
  destroy_pool                   API_destroy_pool
  destroy_sub_req                API_destroy_sub_req
  die                            APX_die
  discard_request_body           API_discard_request_body
  document_root                  API_document_root
  each_byterange                 API_each_byterange
  error_log2stderr               API_error_log2stderr
  escape_html                    API_escape_html
  escape_path_segment            API_escape_path_segment
  escape_shell_cmd               API_escape_shell_cmd
  exists_scoreboard_image        API_exists_scoreboard_image
  finalize_request_protocol      APX_finalize_request_protocol
  finalize_sub_req_protocol      APX_finalize_sub_req_protocol
  find_command                   APX_find_command
  find_command_in_modules        APX_find_command_in_modules
  find_last_token                API_find_last_token
  find_linked_module             API_find_linked_module
  find_module_name               API_find_module_name
  find_path_info                 API_find_path_info
  find_pool                      API_find_pool
  find_token                     API_find_token
  find_types                     APX_find_types
  fini_vhost_config              APX_fini_vhost_config
  fnmatch                        APX_fnmatch
  force_library_loading          APX_force_library_loading
  get_basic_auth_pw              API_get_basic_auth_pw
  get_client_block               API_get_client_block
  get_gmtoff                     API_get_gmtoff
  get_local_host                 APX_get_local_host
  get_module_config              API_get_module_config
  get_remote_host                API_get_remote_host
  get_remote_logname             API_get_remote_logname
  get_server_name                API_get_server_name
  get_server_port                API_get_server_port
  get_time                       API_get_time
  get_token                      API_get_token
  get_virthost_addr              APX_get_virthost_addr
  getparents                     API_getparents
  getword                        API_getword
  getword_conf                   API_getword_conf
  getword_conf_nc                API_getword_conf_nc
  getword_nc                     API_getword_nc
  getword_nulls                  API_getword_nulls
  getword_nulls_nc               API_getword_nulls_nc
  getword_white                  API_getword_white
  getword_white_nc               API_getword_white_nc
  gm_timestr_822                 API_gm_timestr_822
  gname2id                       API_gname2id
  handle_command                 APX_handle_command
  hard_timeout                   API_hard_timeout
  header_parse                   APX_header_parse
  ht_time                        API_ht_time
  ind                            API_ind
  index_of_response              API_index_of_response
  init_alloc                     APX_init_alloc
  init_modules                   APX_init_modules
  init_vhost_config              APX_init_vhost_config
  init_virtual_host              APX_init_virtual_host
  internal_redirect              API_internal_redirect
  internal_redirect_handler      API_internal_redirect_handler
  invoke_handler                 APX_invoke_handler
  is_directory                   API_is_directory
  is_fnmatch                     APX_is_fnmatch
  is_initial_req                 API_is_initial_req
  is_matchexp                    API_is_matchexp
  is_url                         API_is_url
  keepalive_timeout              APX_keepalive_timeout
  kill_cleanup                   API_kill_cleanup
  kill_cleanups_for_fd           API_kill_cleanups_for_fd
  kill_cleanups_for_socket       API_kill_cleanups_for_socket
  kill_timeout                   API_kill_timeout
  limit_section                  APX_limit_section
  log_assert                     API_log_assert
  log_pid                        APX_log_pid
  log_printf                     API_log_printf
  log_reason                     API_log_reason
  log_transaction                APX_log_transaction
  log_unixerr                    API_log_unixerr
  make_array                     API_make_array
  make_dirstr                    API_make_dirstr
  make_dirstr_parent             API_make_dirstr_parent
  make_dirstr_prefix             API_make_dirstr_prefix
  make_full_path                 API_make_full_path
  make_sub_pool                  API_make_sub_pool
  make_table                     API_make_table
  matches_request_vhost          API_matches_request_vhost
  meets_conditions               API_meets_conditions
  merge_per_dir_configs          APX_merge_per_dir_configs
  no2slash                       API_no2slash
  note_auth_failure              API_note_auth_failure
  note_basic_auth_failure        API_note_basic_auth_failure
  note_cleanups_for_fd           API_note_cleanups_for_fd
  note_cleanups_for_file         API_note_cleanups_for_file
  note_cleanups_for_socket       API_note_cleanups_for_socket
  note_digest_auth_failure       API_note_digest_auth_failure
  note_subprocess                API_note_subprocess
  null_cleanup                   APX_null_cleanup
  open_logs                      APX_open_logs
  open_piped_log                 API_open_piped_log
  os_escape_path                 API_os_escape_path
  os_is_path_absolute            APX_os_is_path_absolute
  overlay_tables                 API_overlay_tables
  palloc                         API_palloc
  parseHTTPdate                  API_parseHTTPdate
  parse_htaccess                 APX_parse_htaccess
  parse_uri                      APX_parse_uri
  parse_uri_components           API_parse_uri_components
  parse_hostinfo_components      API_parse_hostinfo_components
  parse_vhost_addrs              APX_parse_vhost_addrs
  pcalloc                        API_pcalloc
  pcfg_open_custom               API_pcfg_open_custom
  pcfg_openfile                  API_pcfg_openfile
  pclosedir                      API_pclosedir
  pclosef                        API_pclosef
  pclosesocket                   API_pclosesocket
  pduphostent                    API_pduphostent
  pfclose                        API_pfclose
  pfdopen                        API_pfdopen
  pfopen                         API_pfopen
  pgethostbyname                 API_pgethostbyname
  pool_is_ancestor               API_pool_is_ancestor
  pool_join                      API_pool_join
  popendir                       API_popendir
  popenf                         API_popenf
  pregcomp                       API_pregcomp
  pregfree                       API_pregfree
  pregsub                        API_pregsub
  process_request                APX_process_request
  process_resource_config        APX_process_resource_config
  proxy_add_header               APX_proxy_add_header
  proxy_c2hex                    APX_proxy_c2hex
  proxy_cache_check              APX_proxy_cache_check
  proxy_cache_error              APX_proxy_cache_error
  proxy_cache_tidy               APX_proxy_cache_tidy
  proxy_cache_update             APX_proxy_cache_update
  proxy_canon_netloc             APX_proxy_canon_netloc
  proxy_canonenc                 APX_proxy_canonenc
  proxy_connect_handler          APX_proxy_connect_handler
  proxy_date_canon               APX_proxy_date_canon
  proxy_del_header               APX_proxy_del_header
  proxy_doconnect                APX_proxy_doconnect
  proxy_ftp_canon                APX_proxy_ftp_canon
  proxy_ftp_handler              APX_proxy_ftp_handler
  proxy_garbage_coll             APX_proxy_garbage_coll
  proxy_garbage_init             APX_proxy_garbage_init
  proxy_get_header               APX_proxy_get_header
  proxy_hash                     APX_proxy_hash
  proxy_hex2c                    APX_proxy_hex2c
  proxy_hex2sec                  APX_proxy_hex2sec
  proxy_host2addr                APX_proxy_host2addr
  proxy_http_canon               APX_proxy_http_canon
  proxy_http_handler             APX_proxy_http_handler
  proxy_is_domainname            APX_proxy_is_domainname
  proxy_is_hostname              APX_proxy_is_hostname
  proxy_is_ipaddr                APX_proxy_is_ipaddr
  proxy_is_word                  APX_proxy_is_word
  proxy_liststr                  APX_proxy_liststr
  proxy_log_uerror               APX_proxy_log_uerror
  proxy_read_headers             APX_proxy_read_headers
  proxy_sec2hex                  APX_proxy_sec2hex
  proxy_send_fb                  APX_proxy_send_fb
  proxy_send_headers             APX_proxy_send_headers
  proxyerror                     APX_proxyerror
  psignature                     API_psignature
  psocket                        API_psocket
  pstrcat                        APX_pstrcat
  pstrdup                        API_pstrdup
  pstrndup                       API_pstrndup
  psprintf                       APX_psprintf
  pvsprintf                      API_pvsprintf
  push_array                     API_push_array
  rationalize_mtime              API_rationalize_mtime
  read_config                    APX_read_config
  read_request                   APX_read_request
  register_cleanup               API_register_cleanup
  register_other_child           APX_register_other_child
  remove_module                  API_remove_module
  requires                       API_requires
  reset_timeout                  API_reset_timeout
  response_code_string           APX_response_code_string
  rfc1413                        APX_rfc1413
  rflush                         API_rflush
  rind                           API_rind
  rprintf                        API_rprintf
  rputc                          API_rputc
  rputs                          API_rputs
  run_cleanup                    API_run_cleanup
  run_fixups                     APX_run_fixups
  run_post_read_request          APX_run_post_read_request
  run_sub_req                    API_run_sub_req
  rvputs                         APX_rvputs
  rwrite                         API_rwrite
  satisfies                      API_satisfies
  scan_script_header_err         API_scan_script_header_err
  scan_script_header_err_buff    API_scan_script_header_err_buff
  send_error_response            APX_send_error_response
  send_fb                        API_send_fb
  send_fb_length                 API_send_fb_length
  send_fd                        API_send_fd
  send_fd_length                 API_send_fd_length
  send_header_field              APX_send_header_field
  send_http_header               API_send_http_header
  send_http_options              APX_send_http_options
  send_http_trace                APX_send_http_trace
  send_mmap                      API_send_mmap
  send_size                      API_send_size
  server_root_relative           API_server_root_relative
  set_byterange                  API_set_byterange
  set_callback_and_alarm         APX_set_callback_and_alarm
  set_content_length             API_set_content_length
  set_etag                       API_set_etag
  set_file_slot                  APX_set_file_slot
  set_flag_slot                  APX_set_flag_slot
  set_keepalive                  API_set_keepalive
  set_last_modified              API_set_last_modified
  set_module_config              API_set_module_config
  set_name_virtual_host          APX_set_name_virtual_host
  set_string_slot                APX_set_string_slot
  set_string_slot_lower          APX_set_string_slot_lower
  set_sub_req_protocol           APX_set_sub_req_protocol
  setup_client_block             API_setup_client_block
  setup_prelinked_modules        APX_setup_prelinked_modules
  should_client_block            API_should_client_block
  show_directives                APX_show_directives
  show_modules                   APX_show_modules
  soft_timeout                   API_soft_timeout
  some_auth_required             API_some_auth_required
  spawn_child_err                API_spawn_child_err
  spawn_child_err_buff           API_spawn_child_err_buff
  srm_command_loop               API_srm_command_loop
  start_restart                  APX_start_restart
  start_shutdown                 APX_start_shutdown
  str_tolower                    API_str_tolower
  strcasecmp_match               API_strcasecmp_match
  strcmp_match                   API_strcmp_match
  sub_req_lookup_file            API_sub_req_lookup_file
  sub_req_lookup_uri             API_sub_req_lookup_uri
  sync_scoreboard_image          API_sync_scoreboard_image
  table_add                      API_table_add
  table_addn                     API_table_addn
  table_do                       APX_table_do
  table_get                      API_table_get
  table_merge                    API_table_merge
  table_mergen                   API_table_mergen
  table_set                      API_table_set
  table_setn                     API_table_setn
  table_unset                    API_table_unset
  time_process_request           APX_time_process_request
  tm2sec                         API_tm2sec
  translate_name                 APX_translate_name
  uname2id                       API_uname2id
  unblock_alarms                 API_unblock_alarms
  unescape_url                   API_unescape_url
  unparse_uri_components         API_unparse_uri_components
  unregister_other_child         APX_unregister_other_child
  update_child_status            APX_update_child_status
  update_mtime                   API_update_mtime
  update_vhost_from_headers      APX_update_vhost_from_headers
  update_vhost_given_ip          APX_update_vhost_given_ip
  util_init                      APX_util_init
  util_uri_init                  APX_util_uri_init
  uudecode                       API_uudecode
  vbprintf                       API_vbprintf
  
  #   specials
  apapi_get_server_built         API_get_server_built
  apapi_get_server_version       API_get_server_version
  aplog_error                    API_log_error
  log_error                      API_log_error_old
  
  
  
  
  1.1                  apache-1.3/src/test/rename/rename.cf.update
  
  Index: rename.cf.update
  ===================================================================
  :
  eval 'exec perl -S $0 ${1+"$@"}'
      if $running_under_some_shell;
  ##
  ##  rename.cf.update
  ##
  
  #   configuration
  $id       = "../src/ID";
  $renamecf = "./rename.cf";
  
  sub is_api_func {
      my ($func) = @_;
  
      $rc = join('', `lid -f $id --key=token --result=grep $func`);
      if ($rc =~ m|\.c:\d+:\s*API_EXPORT\(|s) {
          return 1;
      }
      return 0;
  }
  
  open(OLD, "<$renamecf") || die;
  open(NEW, ">$renamecf.new") || die;
  while ($l = <OLD>) {
      $l =~ s|\n$||;
      if ($l =~ m|^\s*#.*| or $l =~ m|^\s*$|) {
          print NEW "$l\n";
          next;
      }
      if (($s1, $old, $s2, $new, $s3) = ($l =~ m|^(\s*)(\S+)(\s+)(\S+)(\s*)$|)) 
{
          if (&is_api_func($old)) {
              if ($new !~ m|^API_|) {
                  print "<<$s1$old$s2$new$s3\n";
                  $new =~ s|^[A-Z]+_|API_|;
                  print ">>$s1$old$s2$new$s3\n";
                  print NEW "$s1$old$s2$new$s3\n";
                  next;
              }
          }
          else {
              if ($new !~ m|^APX_|) {
                  print "<<$s1$old$s2$new$s3\n";
                  $new =~ s|^[A-Z]+_|APX_|;
                  print ">>$s1$old$s2$new$s3\n";
                  print NEW "$s1$old$s2$new$s3\n";
                  next;
              }
          }
      }
      print NEW "$l\n";
  }
  close(OLD);
  close(NEW);
  
  
  
  
  1.1                  apache-1.3/src/test/rename/rename.pl
  
  Index: rename.pl
  ===================================================================
  :
  eval 'exec perl -S $0 ${1+"$@"}'
      if $running_under_some_shell;
  ##
  ##  rename -- global symbol renaming for C sources
  ##  Written by Ralf S. Engelschall <[EMAIL PROTECTED]>
  ##
  
  #   configuration
  $config = "./rename.cf";
  $csubst = "./csubst/csubst";
  
  #   parameter
  @SRC = @ARGV;
  
  #   read config file into hash
  %PREFIX = ();
  %SUBST = ();
  open(CFG, "<$config") || die;
  while (<CFG>) {
      s|\n$||;
      next if (m|^\s*#.*| or m|^\s*$|);
      if (($symbolic, $real) = m|^\s*(\S+)\s*=\s*(\S+)\s*$|) {
          $PREFIX{$symbolic} = $real;
      }
      elsif (($old, $new) = m|^\s*(\S+)\s+(\S+)\s*$|) {
          foreach $p (keys(%PREFIX)) {
              $new =~ s|^$p|$PREFIX{$p}|;
          }
          $SUBST{$old} = $new;
      }
  }
  close(CFG);
  
  #   create csubst command line
  $csubst_cmd = "$csubst";
  foreach $old (keys(%SUBST)) {
      $new = $SUBST{$old};
      $csubst_cmd .= " -s $old:$new";
  }
  
  #   create file list
  @FILES = ();
  foreach $src (@SRC) {
      if (-f $src) {
          push(@FILES, $src);
      }
      else {
          push(@FILES, `find $src -name "*.[ch]" -type f -print`);
      }
  }
  
  #   walk through the file list
  foreach $file (@FILES) {
      $file =~ s|\n$||;
      print STDERR " FILE $file\n";
      open(PIPE, "cp $file $file.bak && " .
                 "$csubst_cmd -o $file.n $file && " .
                 "cp $file.n $file && " .
                 "rm $file.n " .
                 "|") || die;
      %stat = ();
      while (<PIPE>) {
          if (m|^Subst:\s+(\S+)\s+->\s+\S+|) {
              $stat{$1} = 0 if (not defined $stat{$1});
              $stat{$1}++;
          }
      }
      close(PIPE);
      @S = sort(keys(%stat));
      $n = -1;
      if ($#S == -1) {
          print STDERR " --NO-SYMBOL-SUBSTITUTIONS--\n";
      }
      else {
          foreach $s (@S) {
              printf(STDERR " %-25s", "$s:$stat{$s}");
              $n++;
              if ($n % 3 == 0) {
                  print STDERR "\n";
              }
          }
          if ($n % 3 != 0) {
              print STDERR "\n";
          }
      }
      print STDERR "\n";
  }
  
  
  
  
  1.1                  apache-1.3/src/test/rename/csubst/Makefile
  
  Index: Makefile
  ===================================================================
  
  CC = gcc
  CFLAGS = -O2 -I.
  LDFLAGS = 
  LIBS = 
  
  LEX  = flex
  YACC = bison -y
  
  PROG = csubst
  OBJS = csubst.o lexer.o util.o
  
  .c.o:
        $(CC) $(CFLAGS) -c $<
  
  all: $(PROG)
  
  $(PROG): $(OBJS)
        $(CC) $(LDFLAGS) -o $(PROG) $(OBJS) $(LIBS)
  
  lexer.c: lexer.l
        $(LEX) lexer.l
        mv lex.yy.c lexer.c
  
  clean: 
        -rm -f $(PROG) *.o
  
  distclean: clean 
        -rm -f Makefile
  
  realclean: distclean
        -rm -f lexer.c
  
  mostlyclean: clean
  
  
  
  
  1.1                  apache-1.3/src/test/rename/csubst/csubst.c
  
  Index: csubst.c
  ===================================================================
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  #include <err.h>
  
  #include "tokens.h"
  
  int opt_directives;
  
  /* From lexer.c */
  extern char *yytext;
  extern char *token_buffer;
  extern FILE *yyin;
  extern int yylex(void);
  extern void init_lex(void);
  extern void done_lex(void);
  
  static FILE *output_file = stdout;
  
  static struct {
      char *old;
      char *new;
  } map[1024];
  
  int mapidx = 0;
  
  static void process_token(int token, char *buf)
  {
      int i;
  
      if (token == IDENTIFIER) {
          for (i = 0; map[i].old != NULL; i++) {
              if (strcmp(map[i].old, buf) == 0) {
                  printf("Subst: %s -> %s\n", map[i].old, map[i].new);
                  buf = map[i].new;
                  break;
              }
          }
      }
      fputs(buf, output_file);
  }
  
  static void parse(void)
  {
      int tk;
  
      while ((tk = yylex()) != 0)
          switch (tk) {
          case COMMENT:
          case DIRECTIVE:
          case STRING:
              process_token(tk, token_buffer);
              break;
          default:
              process_token(tk, yytext);
              break;
          }
  }
  
  static void process_file(char *filename)
  {
      if (filename != NULL && strcmp(filename, "-") != 0) {
          if ((yyin = fopen(filename, "r")) == NULL)
              err(1, "%s", filename);
      }
      else
          yyin = stdin;
  
      init_lex();
      parse();
      done_lex();
  
      if (yyin != stdin)
          fclose(yyin);
  }
  
  /*
   * Output the program syntax then exit.
   */
  static void usage(void)
  {
      fprintf(stderr, "usage: csubst [-o file] [-s old:new] [file ...]\n");
      exit(1);
  }
  
  int main(int argc, char **argv)
  {
      int c;
      char *cp;
  
      while ((c = getopt(argc, argv, "o:s:")) != -1)
          switch (c) {
              case 's':
                  if ((cp = strchr(optarg, ':')) == NULL)
                      err(1, "invalid subst %s", optarg);
                  *cp++ = '\0';
                  map[mapidx].old = strdup(optarg);
                  map[mapidx].new = strdup(cp);
                  mapidx++;
                  break;
              case 'o':
                  if (output_file != stdout)
                      fclose(output_file);
                  if ((output_file = fopen(optarg, "w")) == NULL)
                      err(1, "%s", optarg);
                  break;
              case '?':
              default:
                  usage();
                  /* NOTREACHED */
          }
      argc -= optind;
      argv += optind;
  
      opt_directives = 1;
      map[mapidx].old = NULL;
      map[mapidx].new = NULL;
  
      if (argc < 1)
          process_file(NULL);
      else
          while (*argv)
              process_file(*argv++);
      if (output_file != stdout)
          fclose(output_file);
  
      return 0;
  }
  
  
  
  1.1                  apache-1.3/src/test/rename/csubst/lexer.c
  
  Index: lexer.c
  ===================================================================
  /* A lexical scanner generated by flex */
  
  /* Scanner skeleton version:
   * $Header: /export/home/cvs/apache-1.3/src/test/rename/csubst/lexer.c,v 1.1 
1998/04/03 06:20:15 rse Exp $
   */
  
  #define FLEX_SCANNER
  #define YY_FLEX_MAJOR_VERSION 2
  #define YY_FLEX_MINOR_VERSION 5
  
  #include <stdio.h>
  
  
  /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
  #ifdef c_plusplus
  #ifndef __cplusplus
  #define __cplusplus
  #endif
  #endif
  
  
  #ifdef __cplusplus
  
  #include <stdlib.h>
  #include <unistd.h>
  
  /* Use prototypes in function declarations. */
  #define YY_USE_PROTOS
  
  /* The "const" storage-class-modifier is valid. */
  #define YY_USE_CONST
  
  #else /* ! __cplusplus */
  
  #if __STDC__
  
  #define YY_USE_PROTOS
  #define YY_USE_CONST
  
  #endif        /* __STDC__ */
  #endif        /* ! __cplusplus */
  
  #ifdef __TURBOC__
   #pragma warn -rch
   #pragma warn -use
  #include <io.h>
  #include <stdlib.h>
  #define YY_USE_CONST
  #define YY_USE_PROTOS
  #endif
  
  #ifdef YY_USE_CONST
  #define yyconst const
  #else
  #define yyconst
  #endif
  
  
  #ifdef YY_USE_PROTOS
  #define YY_PROTO(proto) proto
  #else
  #define YY_PROTO(proto) ()
  #endif
  
  /* Returned upon end-of-file. */
  #define YY_NULL 0
  
  /* Promotes a possibly negative, possibly signed char to an unsigned
   * integer for use as an array index.  If the signed char is negative,
   * we want to instead treat it as an 8-bit unsigned char, hence the
   * double cast.
   */
  #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
  
  /* Enter a start condition.  This macro really ought to take a parameter,
   * but we do it the disgusting crufty way forced on us by the ()-less
   * definition of BEGIN.
   */
  #define BEGIN yy_start = 1 + 2 *
  
  /* Translate the current start state into a value that can be later handed
   * to BEGIN to return to the state.  The YYSTATE alias is for lex
   * compatibility.
   */
  #define YY_START ((yy_start - 1) / 2)
  #define YYSTATE YY_START
  
  /* Action number for EOF rule of a given start state. */
  #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
  
  /* Special action meaning "start processing a new file". */
  #define YY_NEW_FILE yyrestart( yyin )
  
  #define YY_END_OF_BUFFER_CHAR 0
  
  /* Size of default input buffer. */
  #define YY_BUF_SIZE 16384
  
  typedef struct yy_buffer_state *YY_BUFFER_STATE;
  
  extern int yyleng;
  extern FILE *yyin, *yyout;
  
  #define EOB_ACT_CONTINUE_SCAN 0
  #define EOB_ACT_END_OF_FILE 1
  #define EOB_ACT_LAST_MATCH 2
  
  /* The funky do-while in the following #define is used to turn the definition
   * int a single C statement (which needs a semi-colon terminator).  This
   * avoids problems with code like:
   *
   *    if ( condition_holds )
   *            yyless( 5 );
   *    else
   *            do_something_else();
   *
   * Prior to using the do-while the compiler would get upset at the
   * "else" because it interpreted the "if" statement as being all
   * done when it reached the ';' after the yyless() call.
   */
  
  /* Return all but the first 'n' matched characters back to the input stream. 
*/
  
  #define yyless(n) \
        do \
                { \
                /* Undo effects of setting up yytext. */ \
                *yy_cp = yy_hold_char; \
                YY_RESTORE_YY_MORE_OFFSET \
                yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
                YY_DO_BEFORE_ACTION; /* set up yytext again */ \
                } \
        while ( 0 )
  
  #define unput(c) yyunput( c, yytext_ptr )
  
  /* The following is because we cannot portably get our hands on size_t
   * (without autoconf's help, which isn't available because we want
   * flex-generated scanners to compile on their own).
   */
  typedef unsigned int yy_size_t;
  
  
  struct yy_buffer_state
        {
        FILE *yy_input_file;
  
        char *yy_ch_buf;                /* input buffer */
        char *yy_buf_pos;               /* current position in input buffer */
  
        /* Size of input buffer in bytes, not including room for EOB
         * characters.
         */
        yy_size_t yy_buf_size;
  
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
         */
        int yy_n_chars;
  
        /* Whether we "own" the buffer - i.e., we know we created it,
         * and can realloc() it to grow it, and should free() it to
         * delete it.
         */
        int yy_is_our_buffer;
  
        /* Whether this is an "interactive" input source; if so, and
         * if we're using stdio for input, then we want to use getc()
         * instead of fread(), to make sure we stop fetching input after
         * each newline.
         */
        int yy_is_interactive;
  
        /* Whether we're considered to be at the beginning of a line.
         * If so, '^' rules will be active on the next match, otherwise
         * not.
         */
        int yy_at_bol;
  
        /* Whether to try to fill the input buffer when we reach the
         * end of it.
         */
        int yy_fill_buffer;
  
        int yy_buffer_status;
  #define YY_BUFFER_NEW 0
  #define YY_BUFFER_NORMAL 1
        /* When an EOF's been seen but there's still some text to process
         * then we mark the buffer as YY_EOF_PENDING, to indicate that we
         * shouldn't try reading from the input source any more.  We might
         * still have a bunch of tokens to match, though, because of
         * possible backing-up.
         *
         * When we actually see the EOF, we change the status to "new"
         * (via yyrestart()), so that the user can continue scanning by
         * just pointing yyin at a new input file.
         */
  #define YY_BUFFER_EOF_PENDING 2
        };
  
  static YY_BUFFER_STATE yy_current_buffer = 0;
  
  /* We provide macros for accessing buffer states in case in the
   * future we want to put the buffer states in a more general
   * "scanner state".
   */
  #define YY_CURRENT_BUFFER yy_current_buffer
  
  
  /* yy_hold_char holds the character lost when yytext is formed. */
  static char yy_hold_char;
  
  static int yy_n_chars;                /* number of characters read into 
yy_ch_buf */
  
  
  int yyleng;
  
  /* Points to current character in buffer. */
  static char *yy_c_buf_p = (char *) 0;
  static int yy_init = 1;               /* whether we need to initialize */
  static int yy_start = 0;      /* start state number */
  
  /* Flag which is used to allow yywrap()'s to do buffer switches
   * instead of setting up a fresh yyin.  A bit of a hack ...
   */
  static int yy_did_buffer_switch_on_eof;
  
  void yyrestart YY_PROTO(( FILE *input_file ));
  
  void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
  void yy_load_buffer_state YY_PROTO(( void ));
  YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
  void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
  void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
  void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
  #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
  
  YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
  YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
  YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
  
  static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
  static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
  static void yy_flex_free YY_PROTO(( void * ));
  
  #define yy_new_buffer yy_create_buffer
  
  #define yy_set_interactive(is_interactive) \
        { \
        if ( ! yy_current_buffer ) \
                yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
        yy_current_buffer->yy_is_interactive = is_interactive; \
        }
  
  #define yy_set_bol(at_bol) \
        { \
        if ( ! yy_current_buffer ) \
                yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
        yy_current_buffer->yy_at_bol = at_bol; \
        }
  
  #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
  
  typedef unsigned char YY_CHAR;
  FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
  typedef int yy_state_type;
  extern char *yytext;
  #define yytext_ptr yytext
  
  static yy_state_type yy_get_previous_state YY_PROTO(( void ));
  static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state 
));
  static int yy_get_next_buffer YY_PROTO(( void ));
  static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
  
  /* Done after the current pattern has been matched and before the
   * corresponding action - sets up yytext.
   */
  #define YY_DO_BEFORE_ACTION \
        yytext_ptr = yy_bp; \
        yyleng = (int) (yy_cp - yy_bp); \
        yy_hold_char = *yy_cp; \
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
  
  #define YY_NUM_RULES 93
  #define YY_END_OF_BUFFER 94
  static yyconst short int yy_accept[233] =
      {   0,
          0,    0,   94,   92,   91,   91,   79,   44,    2,   85,
         78,   92,   73,   74,   83,   82,   70,   81,   77,   84,
         39,   39,   71,   67,   86,   72,   87,   90,   35,   75,
         76,   88,   35,   35,   35,   35,   35,   35,   35,   35,
         35,   35,   35,   35,   35,   35,   35,   68,   89,   69,
         80,   65,   51,   60,   52,    0,    0,   49,   57,   47,
         58,   48,   59,    0,   42,    1,   50,   43,   37,    0,
         38,    0,   39,   56,   62,   64,   63,   55,   35,   53,
         35,   35,   35,   35,   35,   35,   10,   35,   35,   35,
         35,   35,   35,   18,   35,   35,   35,   35,   35,   35,
  
         35,   35,   35,   35,   35,   54,   61,   40,   66,    0,
         42,   42,    0,   43,   37,    0,   41,   36,   46,   45,
         35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
         35,   16,   35,   19,   35,   35,   35,   35,   35,   35,
         35,   35,   35,   35,   35,   35,   35,   35,   35,    0,
         42,    0,   42,    0,   43,   41,   36,    3,   35,    5,
          6,   35,   35,   35,   35,   12,   13,   35,   35,   17,
         20,   35,   35,   35,   35,   35,   35,   35,   35,   35,
         35,   35,   32,   35,   35,    0,   42,    4,    7,   35,
         35,   35,   35,   15,   35,   35,   23,   35,   35,   35,
  
         35,   35,   35,   30,   35,   35,   34,   35,   35,   11,
         14,   35,   22,   24,   25,   26,   27,   28,   35,   35,
         35,   35,    9,   35,   29,   35,   35,    8,   21,   31,
         33,    0
      } ;
  
  static yyconst int yy_ec[256] =
      {   0,
          1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
          2,    2,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    2,    4,    5,    6,    1,    7,    8,    9,   10,
         11,   12,   13,   14,   15,   16,   17,   18,   19,   19,
         19,   19,   19,   19,   19,   19,   19,   20,   21,   22,
         23,   24,   25,    1,   26,   26,   26,   26,   27,   28,
         29,   29,   29,   29,   29,   30,   29,   29,   29,   29,
         29,   29,   29,   29,   31,   29,   29,   32,   29,   29,
         33,   34,   35,   36,   29,    1,   37,   38,   39,   40,
  
         41,   42,   43,   44,   45,   29,   46,   47,   48,   49,
         50,   51,   29,   52,   53,   54,   55,   56,   57,   58,
         59,   60,   61,   62,   63,   64,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1
      } ;
  
  static yyconst int yy_meta[65] =
      {   0,
          1,    1,    1,    1,    1,    1,    1,    1,    2,    1,
          1,    1,    1,    1,    1,    1,    1,    3,    3,    1,
          1,    1,    1,    1,    1,    3,    3,    3,    4,    4,
          4,    4,    1,    1,    1,    1,    3,    3,    3,    3,
          3,    3,    4,    4,    4,    4,    4,    4,    4,    4,
          4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
          1,    1,    1,    1
      } ;
  
  static yyconst short int yy_base[236] =
      {   0,
          0,    0,  354,  355,  355,  355,  330,  355,  355,  329,
         57,  317,  355,  355,  327,   53,  355,   54,   52,   60,
         68,   63,  355,  355,   51,  326,   65,  355,    0,  355,
        355,  325,  292,  294,   64,   55,   64,   56,  295,   43,
        294,  302,   75,  283,  292,  290,  295,  355,   68,  355,
        355,  355,  355,  355,  355,   93,  122,  355,  355,  355,
        355,  355,  355,  322,  115,  355,  355,  119,  149,  135,
        128,    0,  154,  314,  355,  355,  355,  313,    0,  355,
        281,  293,  280,  295,  282,  288,  274,  275,  272,  272,
        275,  272,  269,    0,  268,  272,   74,  270,   64,   60,
  
        274,  267,   22,   94,  272,  355,  355,  355,  355,  173,
        355,  175,  193,  355,  168,  117,  200,  190,  355,  355,
        266,  278,  273,  261,   98,  275,  273,  269,  261,  267,
        270,    0,  256,    0,  262,  259,  248,  250,  252,  259,
        245,  243,  243,  255,  245,  249,  253,  251,  238,  145,
        206,  214,  355,  159,  221,  355,  224,    0,  238,    0,
          0,  229,  237,  225,  231,    0,    0,  225,  222,    0,
          0,  222,  222,  219,  231,  220,  221,  226,  225,  222,
        212,  217,    0,  205,  215,  195,  239,    0,    0,  203,
        203,  205,  195,    0,  189,  192,    0,  198,  193,  192,
  
        172,  166,  166,    0,  151,  152,    0,  134,  133,    0,
          0,  141,    0,    0,    0,    0,    0,    0,  132,  130,
        122,  114,    0,   92,    0,  100,   80,    0,    0,    0,
          0,  355,  286,  288,  113
      } ;
  
  static yyconst short int yy_def[236] =
      {   0,
        232,    1,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  233,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  234,  232,
        232,  232,  234,  234,  234,  234,  234,  234,  234,  234,
        234,  234,  234,  234,  234,  234,  234,  232,  232,  232,
        232,  232,  232,  232,  232,  233,  233,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  235,  232,  232,  232,  232,  232,  232,  234,  232,
        234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
        234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
  
        234,  234,  234,  234,  234,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  235,  232,  232,
        234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
        234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
        234,  234,  234,  234,  234,  234,  234,  234,  234,  232,
        232,  232,  232,  232,  232,  232,  232,  234,  234,  234,
        234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
        234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
        234,  234,  234,  234,  234,  232,  232,  234,  234,  234,
        234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
  
        234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
        234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
        234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
        234,    0,  232,  232,  232
      } ;
  
  static yyconst short int yy_nxt[420] =
      {   0,
          4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
         14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
         24,   25,   26,   27,   28,   29,   29,   29,   29,   29,
         29,   29,   30,    4,   31,   32,   33,   34,   35,   36,
         37,   38,   39,   29,   40,   29,   41,   29,   29,   29,
         29,   42,   43,   44,   45,   46,   47,   29,   29,   29,
         48,   49,   50,   51,   54,   59,  145,   64,   61,   65,
         65,   66,   74,   75,  146,   60,   62,   63,   68,   55,
         73,   73,   67,   68,   94,   69,   69,   77,   78,   70,
        106,   95,   71,   71,   70,   86,  141,   71,   71,   72,
  
         83,  108,   91,   70,   87,   92,  139,   84,   70,   71,
         88,  142,   89,   85,   71,  118,  136,   71,   98,   99,
        231,   90,   71,  140,  232,   72,   57,  137,  100,  107,
         56,  101,   65,   65,  117,  117,  112,  112,  147,  230,
        148,  110,  111,  229,  111,  113,  114,  116,  114,  116,
        162,  163,  117,  117,  228,  110,  111,   71,   71,  113,
        114,  111,  151,  151,   68,  114,   69,   69,  227,   68,
        226,   73,   73,  225,   71,   70,  155,  155,  115,  115,
         70,  224,   71,   71,   71,  150,  223,  150,  222,   70,
        151,  151,  112,  112,   70,  115,  221,  115,  115,  220,
  
         71,  152,  153,  115,  153,  154,  219,  154,   71,  218,
        155,  155,  187,  187,  115,  152,  153,  117,  117,  157,
        157,  153,  115,  151,  151,  217,  186,  156,  186,  156,
        216,  187,  187,  111,  215,  111,  157,  214,  155,  155,
        213,  156,  212,  211,  157,  210,  156,  111,  114,  209,
        114,  208,  111,  157,  157,  207,  187,  187,  206,  205,
        204,  203,  114,  202,  201,  200,  153,  114,  153,  199,
        157,  198,  197,  196,  195,  194,  193,  192,  157,  191,
        153,  190,  189,  188,  185,  153,   56,  184,   56,   56,
         79,   79,  183,  182,  181,  180,  179,  178,  177,  176,
  
        175,  174,  173,  172,  171,  170,  169,  168,  167,  166,
        165,  164,  161,  160,  159,  158,  149,  144,  143,  138,
        135,  134,  133,  132,  131,  130,  129,  128,  127,  126,
        125,  124,  123,  122,  121,  120,  119,  109,  105,  104,
        103,  102,   97,   96,   93,   82,   81,   80,   76,   58,
         57,   53,   52,  232,    3,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
  
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232
      } ;
  
  static yyconst short int yy_chk[420] =
      {   0,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,   11,   16,  103,   19,   18,   19,
         19,   20,   25,   25,  103,   16,   18,   18,   22,   11,
         22,   22,   20,   21,   40,   21,   21,   27,   27,   22,
         49,   40,   22,   22,   21,   36,  100,   21,   21,   21,
  
         35,   56,   38,   22,   36,   38,   99,   35,   21,   22,
         37,  100,   37,   35,   21,  235,   97,   22,   43,   43,
        227,   37,   21,   99,   57,   21,   56,   97,   43,   49,
         57,   43,   65,   65,  116,  116,   68,   68,  104,  226,
        104,   65,   65,  224,   65,   68,   68,   70,   68,   70,
        125,  125,   70,   70,  222,   65,   65,   71,   71,   68,
         68,   65,  150,  150,   69,   68,   69,   69,  221,   73,
        220,   73,   73,  219,   71,   69,  154,  154,   69,   69,
         73,  212,   71,   73,   73,  110,  209,  110,  208,   69,
        110,  110,  112,  112,   73,   69,  206,  115,  115,  205,
  
         73,  112,  112,   69,  112,  113,  203,  113,   73,  202,
        113,  113,  186,  186,  115,  112,  112,  117,  117,  118,
        118,  112,  115,  151,  151,  201,  152,  117,  152,  117,
        200,  152,  152,  151,  199,  151,  118,  198,  155,  155,
        196,  117,  195,  193,  118,  192,  117,  151,  155,  191,
        155,  190,  151,  157,  157,  185,  187,  187,  184,  182,
        181,  180,  155,  179,  178,  177,  187,  155,  187,  176,
        157,  175,  174,  173,  172,  169,  168,  165,  157,  164,
        187,  163,  162,  159,  149,  187,  233,  148,  233,  233,
        234,  234,  147,  146,  145,  144,  143,  142,  141,  140,
  
        139,  138,  137,  136,  135,  133,  131,  130,  129,  128,
        127,  126,  124,  123,  122,  121,  105,  102,  101,   98,
         96,   95,   93,   92,   91,   90,   89,   88,   87,   86,
         85,   84,   83,   82,   81,   78,   74,   64,   47,   46,
         45,   44,   42,   41,   39,   34,   33,   32,   26,   15,
         12,   10,    7,    3,  232,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
  
        232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
        232,  232,  232,  232,  232,  232,  232,  232,  232
      } ;
  
  static yy_state_type yy_last_accepting_state;
  static char *yy_last_accepting_cpos;
  
  /* The intent behind this definition is that it'll catch
   * any uses of REJECT which flex missed.
   */
  #define REJECT reject_used_but_not_detected
  #define yymore() yymore_used_but_not_detected
  #define YY_MORE_ADJ 0
  #define YY_RESTORE_YY_MORE_OFFSET
  char *yytext;
  #line 1 "lexer.l"
  #define INITIAL 0
  #line 10 "lexer.l"
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <err.h>
  
  #include "tokens.h"
  
  extern int opt_directives;
  
  static void string(void);
  static void comment(void);
  static int directive(void);
  
  static int yywrap(void) { return 1; }
  #line 549 "lex.yy.c"
  
  /* Macros after this point can all be overridden by user definitions in
   * section 1.
   */
  
  #ifndef YY_SKIP_YYWRAP
  #ifdef __cplusplus
  extern "C" int yywrap YY_PROTO(( void ));
  #else
  extern int yywrap YY_PROTO(( void ));
  #endif
  #endif
  
  #ifndef YY_NO_UNPUT
  static void yyunput YY_PROTO(( int c, char *buf_ptr ));
  #endif
  
  #ifndef yytext_ptr
  static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
  #endif
  
  #ifdef YY_NEED_STRLEN
  static int yy_flex_strlen YY_PROTO(( yyconst char * ));
  #endif
  
  #ifndef YY_NO_INPUT
  #ifdef __cplusplus
  static int yyinput YY_PROTO(( void ));
  #else
  static int input YY_PROTO(( void ));
  #endif
  #endif
  
  #if YY_STACK_USED
  static int yy_start_stack_ptr = 0;
  static int yy_start_stack_depth = 0;
  static int *yy_start_stack = 0;
  #ifndef YY_NO_PUSH_STATE
  static void yy_push_state YY_PROTO(( int new_state ));
  #endif
  #ifndef YY_NO_POP_STATE
  static void yy_pop_state YY_PROTO(( void ));
  #endif
  #ifndef YY_NO_TOP_STATE
  static int yy_top_state YY_PROTO(( void ));
  #endif
  
  #else
  #define YY_NO_PUSH_STATE 1
  #define YY_NO_POP_STATE 1
  #define YY_NO_TOP_STATE 1
  #endif
  
  #ifdef YY_MALLOC_DECL
  YY_MALLOC_DECL
  #else
  #if __STDC__
  #ifndef __cplusplus
  #include <stdlib.h>
  #endif
  #else
  /* Just try to get by without declaring the routines.  This will fail
   * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
   * or sizeof(void*) != sizeof(int).
   */
  #endif
  #endif
  
  /* Amount of stuff to slurp up with each read. */
  #ifndef YY_READ_BUF_SIZE
  #define YY_READ_BUF_SIZE 8192
  #endif
  
  /* Copy whatever the last rule matched to the standard output. */
  
  #ifndef ECHO
  /* This used to be an fputs(), but since the string might contain NUL's,
   * we now use fwrite().
   */
  #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
  #endif
  
  /* Gets input and stuffs it into "buf".  number of characters read, or 
YY_NULL,
   * is returned in "result".
   */
  #ifndef YY_INPUT
  #define YY_INPUT(buf,result,max_size) \
        if ( yy_current_buffer->yy_is_interactive ) \
                { \
                int c = '*', n; \
                for ( n = 0; n < max_size && \
                             (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
                if ( c == '\n' ) \
                        buf[n++] = (char) c; \
                if ( c == EOF && ferror( yyin ) ) \
                        YY_FATAL_ERROR( "input in flex scanner failed" ); \
                result = n; \
                } \
        else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
                  && ferror( yyin ) ) \
                YY_FATAL_ERROR( "input in flex scanner failed" );
  #endif
  
  /* No semi-colon after return; correct usage is to write "yyterminate();" -
   * we don't want an extra ';' after the "return" because that will cause
   * some compilers to complain about unreachable statements.
   */
  #ifndef yyterminate
  #define yyterminate() return YY_NULL
  #endif
  
  /* Number of entries by which start-condition stack grows. */
  #ifndef YY_START_STACK_INCR
  #define YY_START_STACK_INCR 25
  #endif
  
  /* Report a fatal error. */
  #ifndef YY_FATAL_ERROR
  #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
  #endif
  
  /* Default declaration of generated scanner - a define so the user can
   * easily add parameters.
   */
  #ifndef YY_DECL
  #define YY_DECL int yylex YY_PROTO(( void ))
  #endif
  
  /* Code executed at the beginning of each rule, after yytext and yyleng
   * have been set up.
   */
  #ifndef YY_USER_ACTION
  #define YY_USER_ACTION
  #endif
  
  /* Code executed at the end of each rule. */
  #ifndef YY_BREAK
  #define YY_BREAK break;
  #endif
  
  #define YY_RULE_SETUP \
        YY_USER_ACTION
  
  YY_DECL
        {
        register yy_state_type yy_current_state;
        register char *yy_cp, *yy_bp;
        register int yy_act;
  
  #line 26 "lexer.l"
  
  
  #line 703 "lex.yy.c"
  
        if ( yy_init )
                {
                yy_init = 0;
  
  #ifdef YY_USER_INIT
                YY_USER_INIT;
  #endif
  
                if ( ! yy_start )
                        yy_start = 1;   /* first start state */
  
                if ( ! yyin )
                        yyin = stdin;
  
                if ( ! yyout )
                        yyout = stdout;
  
                if ( ! yy_current_buffer )
                        yy_current_buffer =
                                yy_create_buffer( yyin, YY_BUF_SIZE );
  
                yy_load_buffer_state();
                }
  
        while ( 1 )             /* loops until end-of-file is reached */
                {
                yy_cp = yy_c_buf_p;
  
                /* Support of yytext. */
                *yy_cp = yy_hold_char;
  
                /* yy_bp points to the position in yy_ch_buf of the start of
                 * the current run.
                 */
                yy_bp = yy_cp;
  
                yy_current_state = yy_start;
  yy_match:
                do
                        {
                        register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
                        if ( yy_accept[yy_current_state] )
                                {
                                yy_last_accepting_state = yy_current_state;
                                yy_last_accepting_cpos = yy_cp;
                                }
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != 
yy_current_state )
                                {
                                yy_current_state = (int) 
yy_def[yy_current_state];
                                if ( yy_current_state >= 233 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + 
(unsigned int) yy_c];
                        ++yy_cp;
                        }
                while ( yy_base[yy_current_state] != 355 );
  
  yy_find_action:
                yy_act = yy_accept[yy_current_state];
                if ( yy_act == 0 )
                        { /* have to back up */
                        yy_cp = yy_last_accepting_cpos;
                        yy_current_state = yy_last_accepting_state;
                        yy_act = yy_accept[yy_current_state];
                        }
  
                YY_DO_BEFORE_ACTION;
  
  
  do_action:    /* This label is used only to access EOF actions. */
  
  
                switch ( yy_act )
        { /* beginning of action switch */
                        case 0: /* must back up */
                        /* undo the effects of YY_DO_BEFORE_ACTION */
                        *yy_cp = yy_hold_char;
                        yy_cp = yy_last_accepting_cpos;
                        yy_current_state = yy_last_accepting_state;
                        goto yy_find_action;
  
  case 1:
  YY_RULE_SETUP
  #line 28 "lexer.l"
  { comment(); return COMMENT; }
        YY_BREAK
  case 2:
  YY_RULE_SETUP
  #line 29 "lexer.l"
  { return directive(); }
        YY_BREAK
  case 3:
  YY_RULE_SETUP
  #line 31 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 4:
  YY_RULE_SETUP
  #line 32 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 5:
  YY_RULE_SETUP
  #line 33 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 6:
  YY_RULE_SETUP
  #line 34 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 7:
  YY_RULE_SETUP
  #line 35 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 8:
  YY_RULE_SETUP
  #line 36 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 9:
  YY_RULE_SETUP
  #line 37 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 10:
  YY_RULE_SETUP
  #line 38 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 11:
  YY_RULE_SETUP
  #line 39 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 12:
  YY_RULE_SETUP
  #line 40 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 13:
  YY_RULE_SETUP
  #line 41 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 14:
  YY_RULE_SETUP
  #line 42 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 15:
  YY_RULE_SETUP
  #line 43 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 16:
  YY_RULE_SETUP
  #line 44 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 17:
  YY_RULE_SETUP
  #line 45 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 18:
  YY_RULE_SETUP
  #line 46 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 19:
  YY_RULE_SETUP
  #line 47 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 20:
  YY_RULE_SETUP
  #line 48 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 21:
  YY_RULE_SETUP
  #line 49 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 22:
  YY_RULE_SETUP
  #line 50 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 23:
  YY_RULE_SETUP
  #line 51 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 24:
  YY_RULE_SETUP
  #line 52 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 25:
  YY_RULE_SETUP
  #line 53 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 26:
  YY_RULE_SETUP
  #line 54 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 27:
  YY_RULE_SETUP
  #line 55 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 28:
  YY_RULE_SETUP
  #line 56 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 29:
  YY_RULE_SETUP
  #line 57 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 30:
  YY_RULE_SETUP
  #line 58 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 31:
  YY_RULE_SETUP
  #line 59 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 32:
  YY_RULE_SETUP
  #line 60 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 33:
  YY_RULE_SETUP
  #line 61 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 34:
  YY_RULE_SETUP
  #line 62 "lexer.l"
  { return KEYWORD; }
        YY_BREAK
  case 35:
  YY_RULE_SETUP
  #line 64 "lexer.l"
  { return IDENTIFIER; }
        YY_BREAK
  case 36:
  YY_RULE_SETUP
  #line 66 "lexer.l"
  { return CONSTANT; }
        YY_BREAK
  case 37:
  YY_RULE_SETUP
  #line 67 "lexer.l"
  { return CONSTANT; }
        YY_BREAK
  case 38:
  YY_RULE_SETUP
  #line 68 "lexer.l"
  { return CONSTANT; }
        YY_BREAK
  case 39:
  YY_RULE_SETUP
  #line 69 "lexer.l"
  { return CONSTANT; }
        YY_BREAK
  case 40:
  YY_RULE_SETUP
  #line 70 "lexer.l"
  { return CHARACTER; }
        YY_BREAK
  case 41:
  YY_RULE_SETUP
  #line 72 "lexer.l"
  { return CONSTANT; }
        YY_BREAK
  case 42:
  YY_RULE_SETUP
  #line 73 "lexer.l"
  { return CONSTANT; }
        YY_BREAK
  case 43:
  YY_RULE_SETUP
  #line 74 "lexer.l"
  { return CONSTANT; }
        YY_BREAK
  case 44:
  YY_RULE_SETUP
  #line 76 "lexer.l"
  { string(); return STRING; }
        YY_BREAK
  case 45:
  YY_RULE_SETUP
  #line 78 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 46:
  YY_RULE_SETUP
  #line 79 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 47:
  YY_RULE_SETUP
  #line 80 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 48:
  YY_RULE_SETUP
  #line 81 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 49:
  YY_RULE_SETUP
  #line 82 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 50:
  YY_RULE_SETUP
  #line 83 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 51:
  YY_RULE_SETUP
  #line 84 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 52:
  YY_RULE_SETUP
  #line 85 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 53:
  YY_RULE_SETUP
  #line 86 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 54:
  YY_RULE_SETUP
  #line 87 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 55:
  YY_RULE_SETUP
  #line 88 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 56:
  YY_RULE_SETUP
  #line 89 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 57:
  YY_RULE_SETUP
  #line 90 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 58:
  YY_RULE_SETUP
  #line 91 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 59:
  YY_RULE_SETUP
  #line 92 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 60:
  YY_RULE_SETUP
  #line 93 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 61:
  YY_RULE_SETUP
  #line 94 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 62:
  YY_RULE_SETUP
  #line 95 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 63:
  YY_RULE_SETUP
  #line 96 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 64:
  YY_RULE_SETUP
  #line 97 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 65:
  YY_RULE_SETUP
  #line 98 "lexer.l"
  { return OPERATOR; }
        YY_BREAK
  case 66:
  YY_RULE_SETUP
  #line 99 "lexer.l"
  { return ELLIPSIS; }
        YY_BREAK
  case 67:
  YY_RULE_SETUP
  #line 100 "lexer.l"
  { return ';'; }
        YY_BREAK
  case 68:
  YY_RULE_SETUP
  #line 101 "lexer.l"
  { return '{'; }
        YY_BREAK
  case 69:
  YY_RULE_SETUP
  #line 102 "lexer.l"
  { return '}'; }
        YY_BREAK
  case 70:
  YY_RULE_SETUP
  #line 103 "lexer.l"
  { return ','; }
        YY_BREAK
  case 71:
  YY_RULE_SETUP
  #line 104 "lexer.l"
  { return ':'; }
        YY_BREAK
  case 72:
  YY_RULE_SETUP
  #line 105 "lexer.l"
  { return '='; }
        YY_BREAK
  case 73:
  YY_RULE_SETUP
  #line 106 "lexer.l"
  { return '('; }
        YY_BREAK
  case 74:
  YY_RULE_SETUP
  #line 107 "lexer.l"
  { return ')'; }
        YY_BREAK
  case 75:
  YY_RULE_SETUP
  #line 108 "lexer.l"
  { return '['; }
        YY_BREAK
  case 76:
  YY_RULE_SETUP
  #line 109 "lexer.l"
  { return ']'; }
        YY_BREAK
  case 77:
  YY_RULE_SETUP
  #line 110 "lexer.l"
  { return '.'; }
        YY_BREAK
  case 78:
  YY_RULE_SETUP
  #line 111 "lexer.l"
  { return '&'; }
        YY_BREAK
  case 79:
  YY_RULE_SETUP
  #line 112 "lexer.l"
  { return '!'; }
        YY_BREAK
  case 80:
  YY_RULE_SETUP
  #line 113 "lexer.l"
  { return '~'; }
        YY_BREAK
  case 81:
  YY_RULE_SETUP
  #line 114 "lexer.l"
  { return '-'; }
        YY_BREAK
  case 82:
  YY_RULE_SETUP
  #line 115 "lexer.l"
  { return '+'; }
        YY_BREAK
  case 83:
  YY_RULE_SETUP
  #line 116 "lexer.l"
  { return '*'; }
        YY_BREAK
  case 84:
  YY_RULE_SETUP
  #line 117 "lexer.l"
  { return '/'; }
        YY_BREAK
  case 85:
  YY_RULE_SETUP
  #line 118 "lexer.l"
  { return '%'; }
        YY_BREAK
  case 86:
  YY_RULE_SETUP
  #line 119 "lexer.l"
  { return '<'; }
        YY_BREAK
  case 87:
  YY_RULE_SETUP
  #line 120 "lexer.l"
  { return '>'; }
        YY_BREAK
  case 88:
  YY_RULE_SETUP
  #line 121 "lexer.l"
  { return '^'; }
        YY_BREAK
  case 89:
  YY_RULE_SETUP
  #line 122 "lexer.l"
  { return '|'; }
        YY_BREAK
  case 90:
  YY_RULE_SETUP
  #line 123 "lexer.l"
  { return '?'; }
        YY_BREAK
  case 91:
  YY_RULE_SETUP
  #line 125 "lexer.l"
  { return yytext[0]; }
        YY_BREAK
  case 92:
  YY_RULE_SETUP
  #line 126 "lexer.l"
  { return yytext[0]; }
        YY_BREAK
  case 93:
  YY_RULE_SETUP
  #line 128 "lexer.l"
  ECHO;
        YY_BREAK
  #line 1251 "lex.yy.c"
  case YY_STATE_EOF(INITIAL):
        yyterminate();
  
        case YY_END_OF_BUFFER:
                {
                /* Amount of text matched not including the EOB char. */
                int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
  
                /* Undo the effects of YY_DO_BEFORE_ACTION. */
                *yy_cp = yy_hold_char;
                YY_RESTORE_YY_MORE_OFFSET
  
                if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
                        {
                        /* We're scanning a new file or input source.  It's
                         * possible that this happened because the user
                         * just pointed yyin at a new source and called
                         * yylex().  If so, then we have to assure
                         * consistency between yy_current_buffer and our
                         * globals.  Here is the right place to do so, because
                         * this is the first action (other than possibly a
                         * back-up) that will match for the new input source.
                         */
                        yy_n_chars = yy_current_buffer->yy_n_chars;
                        yy_current_buffer->yy_input_file = yyin;
                        yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
                        }
  
                /* Note that here we test for yy_c_buf_p "<=" to the position
                 * of the first EOB in the buffer, since yy_c_buf_p will
                 * already have been incremented past the NUL character
                 * (since all states make transitions on EOB to the
                 * end-of-buffer state).  Contrast this with the test
                 * in input().
                 */
                if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
                        { /* This was really a NUL. */
                        yy_state_type yy_next_state;
  
                        yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
  
                        yy_current_state = yy_get_previous_state();
  
                        /* Okay, we're now positioned to make the NUL
                         * transition.  We couldn't have
                         * yy_get_previous_state() go ahead and do it
                         * for us because it doesn't know how to deal
                         * with the possibility of jamming (and we don't
                         * want to build jamming into it because then it
                         * will run more slowly).
                         */
  
                        yy_next_state = yy_try_NUL_trans( yy_current_state );
  
                        yy_bp = yytext_ptr + YY_MORE_ADJ;
  
                        if ( yy_next_state )
                                {
                                /* Consume the NUL. */
                                yy_cp = ++yy_c_buf_p;
                                yy_current_state = yy_next_state;
                                goto yy_match;
                                }
  
                        else
                                {
                                yy_cp = yy_c_buf_p;
                                goto yy_find_action;
                                }
                        }
  
                else switch ( yy_get_next_buffer() )
                        {
                        case EOB_ACT_END_OF_FILE:
                                {
                                yy_did_buffer_switch_on_eof = 0;
  
                                if ( yywrap() )
                                        {
                                        /* Note: because we've taken care in
                                         * yy_get_next_buffer() to have set up
                                         * yytext, we can now set up
                                         * yy_c_buf_p so that if some total
                                         * hoser (like flex itself) wants to
                                         * call the scanner after we return the
                                         * YY_NULL, it'll still work - another
                                         * YY_NULL will get returned.
                                         */
                                        yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
  
                                        yy_act = YY_STATE_EOF(YY_START);
                                        goto do_action;
                                        }
  
                                else
                                        {
                                        if ( ! yy_did_buffer_switch_on_eof )
                                                YY_NEW_FILE;
                                        }
                                break;
                                }
  
                        case EOB_ACT_CONTINUE_SCAN:
                                yy_c_buf_p =
                                        yytext_ptr + yy_amount_of_matched_text;
  
                                yy_current_state = yy_get_previous_state();
  
                                yy_cp = yy_c_buf_p;
                                yy_bp = yytext_ptr + YY_MORE_ADJ;
                                goto yy_match;
  
                        case EOB_ACT_LAST_MATCH:
                                yy_c_buf_p =
                                &yy_current_buffer->yy_ch_buf[yy_n_chars];
  
                                yy_current_state = yy_get_previous_state();
  
                                yy_cp = yy_c_buf_p;
                                yy_bp = yytext_ptr + YY_MORE_ADJ;
                                goto yy_find_action;
                        }
                break;
                }
  
        default:
                YY_FATAL_ERROR(
                        "fatal flex scanner internal error--no action found" );
        } /* end of action switch */
                } /* end of scanning one token */
        } /* end of yylex */
  
  
  /* yy_get_next_buffer - try to read in a new buffer
   *
   * Returns a code representing an action:
   *    EOB_ACT_LAST_MATCH -
   *    EOB_ACT_CONTINUE_SCAN - continue scanning from current position
   *    EOB_ACT_END_OF_FILE - end of file
   */
  
  static int yy_get_next_buffer()
        {
        register char *dest = yy_current_buffer->yy_ch_buf;
        register char *source = yytext_ptr;
        register int number_to_move, i;
        int ret_val;
  
        if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
                YY_FATAL_ERROR(
                "fatal flex scanner internal error--end of buffer missed" );
  
        if ( yy_current_buffer->yy_fill_buffer == 0 )
                { /* Don't try to fill the buffer, so this is an EOF. */
                if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
                        {
                        /* We matched a single character, the EOB, so
                         * treat this as a final EOF.
                         */
                        return EOB_ACT_END_OF_FILE;
                        }
  
                else
                        {
                        /* We matched some text prior to the EOB, first
                         * process it.
                         */
                        return EOB_ACT_LAST_MATCH;
                        }
                }
  
        /* Try to read more data. */
  
        /* First move last chars to start of buffer. */
        number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
  
        for ( i = 0; i < number_to_move; ++i )
                *(dest++) = *(source++);
  
        if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
                /* don't do the read, it's not guaranteed to return an EOF,
                 * just force an EOF
                 */
                yy_current_buffer->yy_n_chars = yy_n_chars = 0;
  
        else
                {
                int num_to_read =
                        yy_current_buffer->yy_buf_size - number_to_move - 1;
  
                while ( num_to_read <= 0 )
                        { /* Not enough room in the buffer - grow it. */
  #ifdef YY_USES_REJECT
                        YY_FATAL_ERROR(
  "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
  #else
  
                        /* just a shorter name for the current buffer */
                        YY_BUFFER_STATE b = yy_current_buffer;
  
                        int yy_c_buf_p_offset =
                                (int) (yy_c_buf_p - b->yy_ch_buf);
  
                        if ( b->yy_is_our_buffer )
                                {
                                int new_size = b->yy_buf_size * 2;
  
                                if ( new_size <= 0 )
                                        b->yy_buf_size += b->yy_buf_size / 8;
                                else
                                        b->yy_buf_size *= 2;
  
                                b->yy_ch_buf = (char *)
                                        /* Include room in for 2 EOB chars. */
                                        yy_flex_realloc( (void *) b->yy_ch_buf,
                                                         b->yy_buf_size + 2 );
                                }
                        else
                                /* Can't grow it, we don't own it. */
                                b->yy_ch_buf = 0;
  
                        if ( ! b->yy_ch_buf )
                                YY_FATAL_ERROR(
                                "fatal error - scanner input buffer overflow" );
  
                        yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
  
                        num_to_read = yy_current_buffer->yy_buf_size -
                                                number_to_move - 1;
  #endif
                        }
  
                if ( num_to_read > YY_READ_BUF_SIZE )
                        num_to_read = YY_READ_BUF_SIZE;
  
                /* Read in more data. */
                YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
                        yy_n_chars, num_to_read );
  
                yy_current_buffer->yy_n_chars = yy_n_chars;
                }
  
        if ( yy_n_chars == 0 )
                {
                if ( number_to_move == YY_MORE_ADJ )
                        {
                        ret_val = EOB_ACT_END_OF_FILE;
                        yyrestart( yyin );
                        }
  
                else
                        {
                        ret_val = EOB_ACT_LAST_MATCH;
                        yy_current_buffer->yy_buffer_status =
                                YY_BUFFER_EOF_PENDING;
                        }
                }
  
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
  
        yy_n_chars += number_to_move;
        yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
        yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
  
        yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
  
        return ret_val;
        }
  
  
  /* yy_get_previous_state - get the state just before the EOB char was reached 
*/
  
  static yy_state_type yy_get_previous_state()
        {
        register yy_state_type yy_current_state;
        register char *yy_cp;
  
        yy_current_state = yy_start;
  
        for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
                {
                register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 
1);
                if ( yy_accept[yy_current_state] )
                        {
                        yy_last_accepting_state = yy_current_state;
                        yy_last_accepting_cpos = yy_cp;
                        }
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != 
yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
                        if ( yy_current_state >= 233 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned 
int) yy_c];
                }
  
        return yy_current_state;
        }
  
  
  /* yy_try_NUL_trans - try to make a transition on the NUL character
   *
   * synopsis
   *    next_state = yy_try_NUL_trans( current_state );
   */
  
  #ifdef YY_USE_PROTOS
  static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
  #else
  static yy_state_type yy_try_NUL_trans( yy_current_state )
  yy_state_type yy_current_state;
  #endif
        {
        register int yy_is_jam;
        register char *yy_cp = yy_c_buf_p;
  
        register YY_CHAR yy_c = 1;
        if ( yy_accept[yy_current_state] )
                {
                yy_last_accepting_state = yy_current_state;
                yy_last_accepting_cpos = yy_cp;
                }
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
                if ( yy_current_state >= 233 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) 
yy_c];
        yy_is_jam = (yy_current_state == 232);
  
        return yy_is_jam ? 0 : yy_current_state;
        }
  
  
  #ifndef YY_NO_UNPUT
  #ifdef YY_USE_PROTOS
  static void yyunput( int c, register char *yy_bp )
  #else
  static void yyunput( c, yy_bp )
  int c;
  register char *yy_bp;
  #endif
        {
        register char *yy_cp = yy_c_buf_p;
  
        /* undo effects of setting up yytext */
        *yy_cp = yy_hold_char;
  
        if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
                { /* need to shift things up to make room */
                /* +2 for EOB chars. */
                register int number_to_move = yy_n_chars + 2;
                register char *dest = &yy_current_buffer->yy_ch_buf[
                                        yy_current_buffer->yy_buf_size + 2];
                register char *source =
                                &yy_current_buffer->yy_ch_buf[number_to_move];
  
                while ( source > yy_current_buffer->yy_ch_buf )
                        *--dest = *--source;
  
                yy_cp += (int) (dest - source);
                yy_bp += (int) (dest - source);
                yy_current_buffer->yy_n_chars =
                        yy_n_chars = yy_current_buffer->yy_buf_size;
  
                if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
                        YY_FATAL_ERROR( "flex scanner push-back overflow" );
                }
  
        *--yy_cp = (char) c;
  
  
        yytext_ptr = yy_bp;
        yy_hold_char = *yy_cp;
        yy_c_buf_p = yy_cp;
        }
  #endif        /* ifndef YY_NO_UNPUT */
  
  
  #ifdef __cplusplus
  static int yyinput()
  #else
  static int input()
  #endif
        {
        int c;
  
        *yy_c_buf_p = yy_hold_char;
  
        if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
                {
                /* yy_c_buf_p now points to the character we want to return.
                 * If this occurs *before* the EOB characters, then it's a
                 * valid NUL; if not, then we've hit the end of the buffer.
                 */
                if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
                        /* This was really a NUL. */
                        *yy_c_buf_p = '\0';
  
                else
                        { /* need more input */
                        int offset = yy_c_buf_p - yytext_ptr;
                        ++yy_c_buf_p;
  
                        switch ( yy_get_next_buffer() )
                                {
                                case EOB_ACT_LAST_MATCH:
                                        /* This happens because yy_g_n_b()
                                         * sees that we've accumulated a
                                         * token and flags that we need to
                                         * try matching the token before
                                         * proceeding.  But for input(),
                                         * there's no matching to consider.
                                         * So convert the EOB_ACT_LAST_MATCH
                                         * to EOB_ACT_END_OF_FILE.
                                         */
  
                                        /* Reset buffer status. */
                                        yyrestart( yyin );
  
                                        /* fall through */
  
                                case EOB_ACT_END_OF_FILE:
                                        {
                                        if ( yywrap() )
                                                return EOF;
  
                                        if ( ! yy_did_buffer_switch_on_eof )
                                                YY_NEW_FILE;
  #ifdef __cplusplus
                                        return yyinput();
  #else
                                        return input();
  #endif
                                        }
  
                                case EOB_ACT_CONTINUE_SCAN:
                                        yy_c_buf_p = yytext_ptr + offset;
                                        break;
                                }
                        }
                }
  
        c = *(unsigned char *) yy_c_buf_p;      /* cast for 8-bit char's */
        *yy_c_buf_p = '\0';     /* preserve yytext */
        yy_hold_char = *++yy_c_buf_p;
  
  
        return c;
        }
  
  
  #ifdef YY_USE_PROTOS
  void yyrestart( FILE *input_file )
  #else
  void yyrestart( input_file )
  FILE *input_file;
  #endif
        {
        if ( ! yy_current_buffer )
                yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
  
        yy_init_buffer( yy_current_buffer, input_file );
        yy_load_buffer_state();
        }
  
  
  #ifdef YY_USE_PROTOS
  void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
  #else
  void yy_switch_to_buffer( new_buffer )
  YY_BUFFER_STATE new_buffer;
  #endif
        {
        if ( yy_current_buffer == new_buffer )
                return;
  
        if ( yy_current_buffer )
                {
                /* Flush out information for old buffer. */
                *yy_c_buf_p = yy_hold_char;
                yy_current_buffer->yy_buf_pos = yy_c_buf_p;
                yy_current_buffer->yy_n_chars = yy_n_chars;
                }
  
        yy_current_buffer = new_buffer;
        yy_load_buffer_state();
  
        /* We don't actually know whether we did this switch during
         * EOF (yywrap()) processing, but the only time this flag
         * is looked at is after yywrap() is called, so it's safe
         * to go ahead and always set it.
         */
        yy_did_buffer_switch_on_eof = 1;
        }
  
  
  #ifdef YY_USE_PROTOS
  void yy_load_buffer_state( void )
  #else
  void yy_load_buffer_state()
  #endif
        {
        yy_n_chars = yy_current_buffer->yy_n_chars;
        yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
        yyin = yy_current_buffer->yy_input_file;
        yy_hold_char = *yy_c_buf_p;
        }
  
  
  #ifdef YY_USE_PROTOS
  YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
  #else
  YY_BUFFER_STATE yy_create_buffer( file, size )
  FILE *file;
  int size;
  #endif
        {
        YY_BUFFER_STATE b;
  
        b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
        if ( ! b )
                YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
  
        b->yy_buf_size = size;
  
        /* yy_ch_buf has to be 2 characters longer than the size given because
         * we need to put in 2 end-of-buffer characters.
         */
        b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
        if ( ! b->yy_ch_buf )
                YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
  
        b->yy_is_our_buffer = 1;
  
        yy_init_buffer( b, file );
  
        return b;
        }
  
  
  #ifdef YY_USE_PROTOS
  void yy_delete_buffer( YY_BUFFER_STATE b )
  #else
  void yy_delete_buffer( b )
  YY_BUFFER_STATE b;
  #endif
        {
        if ( ! b )
                return;
  
        if ( b == yy_current_buffer )
                yy_current_buffer = (YY_BUFFER_STATE) 0;
  
        if ( b->yy_is_our_buffer )
                yy_flex_free( (void *) b->yy_ch_buf );
  
        yy_flex_free( (void *) b );
        }
  
  
  #ifndef YY_ALWAYS_INTERACTIVE
  #ifndef YY_NEVER_INTERACTIVE
  extern int isatty YY_PROTO(( int ));
  #endif
  #endif
  
  #ifdef YY_USE_PROTOS
  void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
  #else
  void yy_init_buffer( b, file )
  YY_BUFFER_STATE b;
  FILE *file;
  #endif
  
  
        {
        yy_flush_buffer( b );
  
        b->yy_input_file = file;
        b->yy_fill_buffer = 1;
  
  #if YY_ALWAYS_INTERACTIVE
        b->yy_is_interactive = 1;
  #else
  #if YY_NEVER_INTERACTIVE
        b->yy_is_interactive = 0;
  #else
        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
  #endif
  #endif
        }
  
  
  #ifdef YY_USE_PROTOS
  void yy_flush_buffer( YY_BUFFER_STATE b )
  #else
  void yy_flush_buffer( b )
  YY_BUFFER_STATE b;
  #endif
  
        {
        if ( ! b )
                return;
  
        b->yy_n_chars = 0;
  
        /* We always need two end-of-buffer characters.  The first causes
         * a transition to the end-of-buffer state.  The second causes
         * a jam in that state.
         */
        b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
        b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
  
        b->yy_buf_pos = &b->yy_ch_buf[0];
  
        b->yy_at_bol = 1;
        b->yy_buffer_status = YY_BUFFER_NEW;
  
        if ( b == yy_current_buffer )
                yy_load_buffer_state();
        }
  
  
  #ifndef YY_NO_SCAN_BUFFER
  #ifdef YY_USE_PROTOS
  YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
  #else
  YY_BUFFER_STATE yy_scan_buffer( base, size )
  char *base;
  yy_size_t size;
  #endif
        {
        YY_BUFFER_STATE b;
  
        if ( size < 2 ||
             base[size-2] != YY_END_OF_BUFFER_CHAR ||
             base[size-1] != YY_END_OF_BUFFER_CHAR )
                /* They forgot to leave room for the EOB's. */
                return 0;
  
        b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
        if ( ! b )
                YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
  
        b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
        b->yy_buf_pos = b->yy_ch_buf = base;
        b->yy_is_our_buffer = 0;
        b->yy_input_file = 0;
        b->yy_n_chars = b->yy_buf_size;
        b->yy_is_interactive = 0;
        b->yy_at_bol = 1;
        b->yy_fill_buffer = 0;
        b->yy_buffer_status = YY_BUFFER_NEW;
  
        yy_switch_to_buffer( b );
  
        return b;
        }
  #endif
  
  
  #ifndef YY_NO_SCAN_STRING
  #ifdef YY_USE_PROTOS
  YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
  #else
  YY_BUFFER_STATE yy_scan_string( yy_str )
  yyconst char *yy_str;
  #endif
        {
        int len;
        for ( len = 0; yy_str[len]; ++len )
                ;
  
        return yy_scan_bytes( yy_str, len );
        }
  #endif
  
  
  #ifndef YY_NO_SCAN_BYTES
  #ifdef YY_USE_PROTOS
  YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
  #else
  YY_BUFFER_STATE yy_scan_bytes( bytes, len )
  yyconst char *bytes;
  int len;
  #endif
        {
        YY_BUFFER_STATE b;
        char *buf;
        yy_size_t n;
        int i;
  
        /* Get memory for full buffer, including space for trailing EOB's. */
        n = len + 2;
        buf = (char *) yy_flex_alloc( n );
        if ( ! buf )
                YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
  
        for ( i = 0; i < len; ++i )
                buf[i] = bytes[i];
  
        buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
  
        b = yy_scan_buffer( buf, n );
        if ( ! b )
                YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
  
        /* It's okay to grow etc. this buffer, and we should throw it
         * away when we're done.
         */
        b->yy_is_our_buffer = 1;
  
        return b;
        }
  #endif
  
  
  #ifndef YY_NO_PUSH_STATE
  #ifdef YY_USE_PROTOS
  static void yy_push_state( int new_state )
  #else
  static void yy_push_state( new_state )
  int new_state;
  #endif
        {
        if ( yy_start_stack_ptr >= yy_start_stack_depth )
                {
                yy_size_t new_size;
  
                yy_start_stack_depth += YY_START_STACK_INCR;
                new_size = yy_start_stack_depth * sizeof( int );
  
                if ( ! yy_start_stack )
                        yy_start_stack = (int *) yy_flex_alloc( new_size );
  
                else
                        yy_start_stack = (int *) yy_flex_realloc(
                                        (void *) yy_start_stack, new_size );
  
                if ( ! yy_start_stack )
                        YY_FATAL_ERROR(
                        "out of memory expanding start-condition stack" );
                }
  
        yy_start_stack[yy_start_stack_ptr++] = YY_START;
  
        BEGIN(new_state);
        }
  #endif
  
  
  #ifndef YY_NO_POP_STATE
  static void yy_pop_state()
        {
        if ( --yy_start_stack_ptr < 0 )
                YY_FATAL_ERROR( "start-condition stack underflow" );
  
        BEGIN(yy_start_stack[yy_start_stack_ptr]);
        }
  #endif
  
  
  #ifndef YY_NO_TOP_STATE
  static int yy_top_state()
        {
        return yy_start_stack[yy_start_stack_ptr - 1];
        }
  #endif
  
  #ifndef YY_EXIT_FAILURE
  #define YY_EXIT_FAILURE 2
  #endif
  
  #ifdef YY_USE_PROTOS
  static void yy_fatal_error( yyconst char msg[] )
  #else
  static void yy_fatal_error( msg )
  char msg[];
  #endif
        {
        (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
        }
  
  
  
  /* Redefine yyless() so it works in section 3 code. */
  
  #undef yyless
  #define yyless(n) \
        do \
                { \
                /* Undo effects of setting up yytext. */ \
                yytext[yyleng] = yy_hold_char; \
                yy_c_buf_p = yytext + n; \
                yy_hold_char = *yy_c_buf_p; \
                *yy_c_buf_p = '\0'; \
                yyleng = n; \
                } \
        while ( 0 )
  
  
  /* Internal utility routines. */
  
  #ifndef yytext_ptr
  #ifdef YY_USE_PROTOS
  static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
  #else
  static void yy_flex_strncpy( s1, s2, n )
  char *s1;
  yyconst char *s2;
  int n;
  #endif
        {
        register int i;
        for ( i = 0; i < n; ++i )
                s1[i] = s2[i];
        }
  #endif
  
  #ifdef YY_NEED_STRLEN
  #ifdef YY_USE_PROTOS
  static int yy_flex_strlen( yyconst char *s )
  #else
  static int yy_flex_strlen( s )
  yyconst char *s;
  #endif
        {
        register int n;
        for ( n = 0; s[n]; ++n )
                ;
  
        return n;
        }
  #endif
  
  
  #ifdef YY_USE_PROTOS
  static void *yy_flex_alloc( yy_size_t size )
  #else
  static void *yy_flex_alloc( size )
  yy_size_t size;
  #endif
        {
        return (void *) malloc( size );
        }
  
  #ifdef YY_USE_PROTOS
  static void *yy_flex_realloc( void *ptr, yy_size_t size )
  #else
  static void *yy_flex_realloc( ptr, size )
  void *ptr;
  yy_size_t size;
  #endif
        {
        /* The cast to (char *) in the following accommodates both
         * implementations that use char* generic pointers, and those
         * that use void* generic pointers.  It works with the latter
         * because both ANSI C and C++ allow castless assignment from
         * any pointer type to void*, and deal with argument conversions
         * as though doing an assignment.
         */
        return (void *) realloc( (char *) ptr, size );
        }
  
  #ifdef YY_USE_PROTOS
  static void yy_flex_free( void *ptr )
  #else
  static void yy_flex_free( ptr )
  void *ptr;
  #endif
        {
        free( ptr );
        }
  
  #if YY_MAIN
  int main()
        {
        yylex();
        return 0;
        }
  #endif
  #line 128 "lexer.l"
  
  
  char *token_buffer;
  
  static int maxtoken;
  
  void
  init_lex(void)
  {
        maxtoken = 40;
        token_buffer = (char *)xmalloc(maxtoken + 1);
  }
  
  void
  done_lex(void)
  {
        free(token_buffer);
  }
  
  static char *
  extend_token_buffer(char *p)
  {
        int offset = p - token_buffer;
  
        maxtoken = maxtoken * 2 + 10;
  
        token_buffer = (char *)xrealloc(token_buffer, maxtoken + 2);
  
        return token_buffer + offset;
  }
  
  static void
  string(void)
  {
        char *p;
        int c;
  
        p = token_buffer;
        *p++ = '"';
        while ((c = input()) != EOF && c != '"') {
                if (p >= token_buffer + maxtoken)
                        p = extend_token_buffer(p);
                *p++ = c;
                if (c == '\\')
                        *p++ = input();
        }
        if (c == EOF)
                errx(1, "unexpected end of file in string");
        *p++ = '"';
        *p = '\0';
  }
  
  static void
  comment(void)
  {
        char *p;
        int c;
  
        p = token_buffer;
        *p++ = '/';
        *p++ = '*';
        while ((c = input()) != EOF) {
  resync:               if (p >= token_buffer + maxtoken)
                        p = extend_token_buffer(p);
                *p++ = c;
                if (c == '*')
                        if ((c = input()) == '/') {
                                *p++ = c;
                                *p = '\0';
                                return;
                        } else
                                goto resync;
        }
        *p = '\0';
  }
  
  static int
  directive(void)
  {
        char *p;
        int c;
  
        if (opt_directives)
                return '#';
  
        p = token_buffer;
        *p++ = '#';
  
        while ((c = input()) != EOF && c != '\n') {
                if (p >= token_buffer + maxtoken)
                        p = extend_token_buffer(p);
                *p++ = c;
                if (c == '\\')
                        *p++ = input();
        }
        *p++ = c;
        *p = '\0';
        return DIRECTIVE;
  }
  
  
  
  1.1                  apache-1.3/src/test/rename/csubst/lexer.l
  
  Index: lexer.l
  ===================================================================
  
  Digit         [0-9]
  Literal               [a-zA-Z_]
  Hex           [a-fA-F0-9]
  Exp           [Ee][+-]?{Digit}+
  FS            (f|F|l|L)
  IS            (u|U|l|L)+
  
  %{
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <err.h>
  
  #include "tokens.h"
  
  extern int opt_directives;
  
  static void string(void);
  static void comment(void);
  static int directive(void);
  
  static int yywrap(void) { return 1; }
  %}
  
  %%
  
  "/*"                                  { comment(); return COMMENT; }
  "#"                                   { return directive(); }
  
  "auto"                                        { return KEYWORD; }
  "break"                                       { return KEYWORD; }
  "case"                                        { return KEYWORD; }
  "char"                                        { return KEYWORD; }
  "const"                                       { return KEYWORD; }
  "continue"                            { return KEYWORD; }
  "default"                             { return KEYWORD; }
  "do"                                  { return KEYWORD; }
  "double"                              { return KEYWORD; }
  "else"                                        { return KEYWORD; }
  "enum"                                        { return KEYWORD; }
  "extern"                              { return KEYWORD; }
  "float"                                       { return KEYWORD; }
  "for"                                 { return KEYWORD; }
  "goto"                                        { return KEYWORD; }
  "if"                                  { return KEYWORD; }
  "int"                                 { return KEYWORD; }
  "long"                                        { return KEYWORD; }
  "register"                            { return KEYWORD; }
  "return"                              { return KEYWORD; }
  "short"                                       { return KEYWORD; }
  "signed"                              { return KEYWORD; }
  "sizeof"                              { return KEYWORD; }
  "static"                              { return KEYWORD; }
  "struct"                              { return KEYWORD; }
  "switch"                              { return KEYWORD; }
  "typedef"                             { return KEYWORD; }
  "union"                                       { return KEYWORD; }
  "unsigned"                            { return KEYWORD; }
  "void"                                        { return KEYWORD; }
  "volatile"                            { return KEYWORD; }
  "while"                                       { return KEYWORD; }
  
  {Literal}({Literal}|{Digit})*         { return IDENTIFIER; }
  
  0[xX]{Hex}+{IS}?                      { return CONSTANT; }
  0{Digit}+{IS}?                                { return CONSTANT; }
  {Digit}+{IS}                          { return CONSTANT; }
  {Digit}+                              { return CONSTANT; }
  '(\\.|[^\\'])+'                               { return CHARACTER; }
  
  {Digit}+{Exp}{FS}?                    { return CONSTANT; }
  {Digit}*"."{Digit}+({Exp})?{FS}?      { return CONSTANT; }
  {Digit}+"."{Digit}*({Exp})?{FS}?      { return CONSTANT; }
  
  "\""                                  { string(); return STRING; }
  
  ">>="                                 { return OPERATOR; }
  "<<="                                 { return OPERATOR; }
  "+="                                  { return OPERATOR; }
  "-="                                  { return OPERATOR; }
  "*="                                  { return OPERATOR; }
  "/="                                  { return OPERATOR; }
  "%="                                  { return OPERATOR; }
  "&="                                  { return OPERATOR; }
  "^="                                  { return OPERATOR; }
  "|="                                  { return OPERATOR; }
  ">>"                                  { return OPERATOR; }
  "<<"                                  { return OPERATOR; }
  "++"                                  { return OPERATOR; }
  "--"                                  { return OPERATOR; }
  "->"                                  { return OPERATOR; }
  "&&"                                  { return OPERATOR; }
  "||"                                  { return OPERATOR; }
  "<="                                  { return OPERATOR; }
  ">="                                  { return OPERATOR; }
  "=="                                  { return OPERATOR; }
  "!="                                  { return OPERATOR; }
  "..."                                 { return ELLIPSIS; }
  ";"                                   { return ';'; }
  "{"                                   { return '{'; }
  "}"                                   { return '}'; }
  ","                                   { return ','; }
  ":"                                   { return ':'; }
  "="                                   { return '='; }
  "("                                   { return '('; }
  ")"                                   { return ')'; }
  "["                                   { return '['; }
  "]"                                   { return ']'; }
  "."                                   { return '.'; }
  "&"                                   { return '&'; }
  "!"                                   { return '!'; }
  "~"                                   { return '~'; }
  "-"                                   { return '-'; }
  "+"                                   { return '+'; }
  "*"                                   { return '*'; }
  "/"                                   { return '/'; }
  "%"                                   { return '%'; }
  "<"                                   { return '<'; }
  ">"                                   { return '>'; }
  "^"                                   { return '^'; }
  "|"                                   { return '|'; }
  "?"                                   { return '?'; }
  
  [ \t\v\n\f]                           { return yytext[0]; }
  .                                     { return yytext[0]; }
  
  %%
  
  char *token_buffer;
  
  static int maxtoken;
  
  void
  init_lex(void)
  {
        maxtoken = 40;
        token_buffer = (char *)xmalloc(maxtoken + 1);
  }
  
  void
  done_lex(void)
  {
        free(token_buffer);
  }
  
  static char *
  extend_token_buffer(char *p)
  {
        int offset = p - token_buffer;
  
        maxtoken = maxtoken * 2 + 10;
  
        token_buffer = (char *)xrealloc(token_buffer, maxtoken + 2);
  
        return token_buffer + offset;
  }
  
  static void
  string(void)
  {
        char *p;
        int c;
  
        p = token_buffer;
        *p++ = '"';
        while ((c = input()) != EOF && c != '"') {
                if (p >= token_buffer + maxtoken)
                        p = extend_token_buffer(p);
                *p++ = c;
                if (c == '\\')
                        *p++ = input();
        }
        if (c == EOF)
                errx(1, "unexpected end of file in string");
        *p++ = '"';
        *p = '\0';
  }
  
  static void
  comment(void)
  {
        char *p;
        int c;
  
        p = token_buffer;
        *p++ = '/';
        *p++ = '*';
        while ((c = input()) != EOF) {
  resync:               if (p >= token_buffer + maxtoken)
                        p = extend_token_buffer(p);
                *p++ = c;
                if (c == '*')
                        if ((c = input()) == '/') {
                                *p++ = c;
                                *p = '\0';
                                return;
                        } else
                                goto resync;
        }
        *p = '\0';
  }
  
  static int
  directive(void)
  {
        char *p;
        int c;
  
        if (opt_directives)
                return '#';
  
        p = token_buffer;
        *p++ = '#';
  
        while ((c = input()) != EOF && c != '\n') {
                if (p >= token_buffer + maxtoken)
                        p = extend_token_buffer(p);
                *p++ = c;
                if (c == '\\')
                        *p++ = input();
        }
        *p++ = c;
        *p = '\0';
        return DIRECTIVE;
  }
  
  
  
  1.1                  apache-1.3/src/test/rename/csubst/tokens.h
  
  Index: tokens.h
  ===================================================================
  /*    $Id: tokens.h,v 1.1 1998/04/03 06:20:16 rse Exp $       */
  
  /*
   * Copyright (c) 1995, 1996, 1997
   *    Sandro Sigala, Brescia, Italy.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   *
   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
  
  enum {
        IDENTIFIER=256,
        CHARACTER,
        STRING,
        COMMENT,
        DIRECTIVE,
        CONSTANT,
        KEYWORD,
        OPERATOR,
        ELLIPSIS,
        ALL             /* Not a real token, put here for convenience. */
  };
  
  #define MAX_TOKENS    266
  
  
  
  1.1                  apache-1.3/src/test/rename/csubst/util.c
  
  Index: util.c
  ===================================================================
  
  #include <assert.h>
  #include <stdlib.h>
  #include <errno.h>
  #include <stdarg.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <err.h>
  
  /*
   * Return an allocated memory area.
   */
  void *
  xmalloc(size_t size)
  {
        void *ptr;
  
        assert(size > 0);
  
        if ((ptr = malloc(size)) == NULL)
                err(1, NULL);
  
        return ptr;
  }
  
  
  /*
   * Resize an allocated memory area.
   */
  void *
  xrealloc(void *ptr, size_t size)
  {
        void *newptr;
  
        assert(ptr != NULL);
        assert(size > 0);
  
        if ((newptr = realloc(ptr, size)) == NULL)
                err(1, NULL);
  
        return newptr;
  }
  
  /*
   * 4.4BSD err(), warn() functions reimplementation.
   */
  
  
  /* The name of the running program. */
  extern char *__progname;
  
  void
  err(int status, const char *fmt, ...)
  {
        va_list ap;
  
        va_start(ap, fmt);
        verr(status, fmt, ap);
        va_end(ap);
  }
  
  void
  verr(int status, const char *fmt, va_list ap)
  {
        int olderrno = errno;
  
        fprintf(stderr, "%s: ", __progname);
        if (fmt != NULL) {
                vfprintf(stderr, fmt, ap);
                fprintf(stderr, ": ");
        }
        fprintf(stderr, "%s\n", strerror(olderrno));
  
        exit(status);
  }
  
  void
  errx(int status, const char *fmt, ...)
  {
        va_list ap;
  
        va_start(ap, fmt);
        verrx(status, fmt, ap);
        va_end(ap);
  }
  
  void
  verrx(int status, const char *fmt, va_list ap)
  {
        fprintf(stderr, "%s: ", __progname);
        if (fmt != NULL)
                vfprintf(stderr, fmt, ap);
        fputc('\n', stderr);
  
        exit(status);
  }
  
  void
  warn(const char *fmt, ...)
  {
        va_list ap;
  
        va_start(ap, fmt);
        vwarn(fmt, ap);
        va_end(ap);
  }
  
  void
  vwarn(const char *fmt, va_list ap)
  {
        int olderrno = errno;
  
        fprintf(stderr, "%s: ", __progname);
        if (fmt != NULL) {
                vfprintf(stderr, fmt, ap);
                fprintf(stderr, ": ");
        }
        fprintf(stderr, "%s\n", strerror(olderrno));
  }
  
  void
  warnx(const char *fmt, ...)
  {
        va_list ap;
  
        va_start(ap, fmt);
        vwarnx(fmt, ap);
        va_end(ap);
  }
  
  void
  vwarnx(const char *fmt, va_list ap)
  {
        fprintf(stderr, "%s: ", __progname);
        if (fmt != NULL)
                vfprintf(stderr, fmt, ap);
        fputc('\n', stderr);
  }
  
  
  

Reply via email to