|
Packit |
70b277 |
/* This file is part of GNU bc.
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
Copyright (C) 1991-1994, 1997, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
This program is free software; you can redistribute it and/or modify
|
|
Packit |
70b277 |
it under the terms of the GNU General Public License as published by
|
|
Packit |
70b277 |
the Free Software Foundation; either version 3 of the License , or
|
|
Packit |
70b277 |
(at your option) any later version.
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
This program is distributed in the hope that it will be useful,
|
|
Packit |
70b277 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
70b277 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
70b277 |
GNU General Public License for more details.
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
You should have received a copy of the GNU General Public License
|
|
Packit |
70b277 |
along with this program; see the file COPYING. If not, see
|
|
Packit |
70b277 |
<http://www.gnu.org/licenses>.
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
You may contact the author by:
|
|
Packit |
70b277 |
e-mail: philnelson@acm.org
|
|
Packit |
70b277 |
us-mail: Philip A. Nelson
|
|
Packit |
70b277 |
Computer Science Department, 9062
|
|
Packit |
70b277 |
Western Washington University
|
|
Packit |
70b277 |
Bellingham, WA 98226-9062
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
*************************************************************************/
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
/* proto.h: Prototype function definitions for "external" functions. */
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
/* For the pc version using k&r ACK. (minix1.5 and earlier.) */
|
|
Packit |
70b277 |
#ifdef SHORTNAMES
|
|
Packit |
70b277 |
#define init_numbers i_numbers
|
|
Packit |
70b277 |
#define push_constant push__constant
|
|
Packit |
70b277 |
#define load_const in_load_const
|
|
Packit |
70b277 |
#define yy_get_next_buffer yyget_next_buffer
|
|
Packit |
70b277 |
#define yy_init_buffer yyinit_buffer
|
|
Packit |
70b277 |
#define yy_last_accepting_state yylast_accepting_state
|
|
Packit |
70b277 |
#define arglist1 arg1list
|
|
Packit |
70b277 |
#endif
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
/* Include the standard library header files. */
|
|
Packit |
70b277 |
#ifdef HAVE_UNISTD_H
|
|
Packit |
70b277 |
#include <unistd.h>
|
|
Packit |
70b277 |
#endif
|
|
Packit |
70b277 |
#ifdef HAVE_STDLIB_H
|
|
Packit |
70b277 |
#include <stdlib.h>
|
|
Packit |
70b277 |
#endif
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
/* From execute.c */
|
|
Packit |
70b277 |
void stop_execution (int);
|
|
Packit |
70b277 |
unsigned char byte (program_counter *pc_);
|
|
Packit |
70b277 |
void execute (void);
|
|
Packit |
70b277 |
int prog_char (void);
|
|
Packit |
70b277 |
int input_char (void);
|
|
Packit |
70b277 |
void push_constant (int (*in_char)(void), int conv_base);
|
|
Packit |
70b277 |
void push_b10_const (program_counter *pc_);
|
|
Packit |
70b277 |
void assign (char code);
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
/* From util.c */
|
|
Packit |
70b277 |
char *strcopyof (const char *str);
|
|
Packit |
70b277 |
arg_list *nextarg (arg_list *args, int val, int is_var);
|
|
Packit |
70b277 |
char *arg_str (arg_list *args);
|
|
Packit |
70b277 |
char *call_str (arg_list *args);
|
|
Packit |
70b277 |
void free_args (arg_list *args);
|
|
Packit |
70b277 |
void check_params (arg_list *params, arg_list *autos);
|
|
Packit |
70b277 |
void set_genstr_size (int);
|
|
Packit |
70b277 |
void init_gen (void);
|
|
Packit |
70b277 |
void generate (const char *str);
|
|
Packit |
70b277 |
void run_code (void);
|
|
Packit |
70b277 |
void out_char (int ch);
|
|
Packit |
70b277 |
void out_schar (int ch);
|
|
Packit |
70b277 |
id_rec *find_id (id_rec *tree, const char *id);
|
|
Packit |
70b277 |
int insert_id_rec (id_rec **root, id_rec *new_id);
|
|
Packit |
70b277 |
void init_tree (void);
|
|
Packit |
70b277 |
int lookup (char *name, int namekind);
|
|
Packit |
70b277 |
void *bc_malloc (size_t);
|
|
Packit |
70b277 |
void out_of_memory (void);
|
|
Packit |
70b277 |
void welcome (void);
|
|
Packit |
70b277 |
void warranty (const char *);
|
|
Packit |
70b277 |
void show_bc_version (void);
|
|
Packit |
70b277 |
void limits (void);
|
|
Packit |
70b277 |
void yyerror (const char *str ,...);
|
|
Packit |
70b277 |
void ct_warn (const char *mesg ,...);
|
|
Packit |
70b277 |
void rt_error (const char *mesg ,...);
|
|
Packit |
70b277 |
void rt_warn (const char *mesg ,...);
|
|
Packit |
70b277 |
void bc_exit (int);
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
/* From load.c */
|
|
Packit |
70b277 |
void init_load (void);
|
|
Packit |
70b277 |
void addbyte (unsigned char thebyte);
|
|
Packit |
70b277 |
void def_label (unsigned long lab);
|
|
Packit |
70b277 |
long long_val (const char **str);
|
|
Packit |
70b277 |
void load_code (const char *code);
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
/* From main.c */
|
|
Packit |
70b277 |
int open_new_file (void);
|
|
Packit |
70b277 |
void new_yy_file (FILE *file);
|
|
Packit |
70b277 |
void use_quit (int);
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
/* From storage.c */
|
|
Packit |
70b277 |
void init_storage (void);
|
|
Packit |
70b277 |
void more_functions (void);
|
|
Packit |
70b277 |
void more_variables (void);
|
|
Packit |
70b277 |
void more_arrays (void);
|
|
Packit |
70b277 |
void clear_func (int func);
|
|
Packit |
70b277 |
int fpop (void);
|
|
Packit |
70b277 |
void fpush (int val);
|
|
Packit |
70b277 |
void pop (void);
|
|
Packit |
70b277 |
void push_copy (bc_num num);
|
|
Packit |
70b277 |
void push_num (bc_num num);
|
|
Packit |
70b277 |
char check_stack (int depth);
|
|
Packit |
70b277 |
bc_var *get_var (int var_name);
|
|
Packit |
70b277 |
bc_num *get_array_num (int var_index, unsigned long _index_);
|
|
Packit |
70b277 |
void store_var (int var_name);
|
|
Packit |
70b277 |
void store_array (int var_name);
|
|
Packit |
70b277 |
void load_var (int var_name);
|
|
Packit |
70b277 |
void load_array (int var_name);
|
|
Packit |
70b277 |
void decr_var (int var_name);
|
|
Packit |
70b277 |
void decr_array (int var_name);
|
|
Packit |
70b277 |
void incr_var (int var_name);
|
|
Packit |
70b277 |
void incr_array (int var_name);
|
|
Packit |
70b277 |
void auto_var (int name);
|
|
Packit |
70b277 |
void free_a_tree (bc_array_node *root, int depth);
|
|
Packit |
70b277 |
void pop_vars (arg_list *list);
|
|
Packit |
70b277 |
void process_params (program_counter *_pc_, int func);
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
/* For the scanner and parser.... */
|
|
Packit |
70b277 |
int yyparse (void);
|
|
Packit |
70b277 |
int yylex (void);
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
#if defined(LIBEDIT)
|
|
Packit |
70b277 |
/* The *?*&^ prompt function */
|
|
Packit |
70b277 |
char *null_prompt (EditLine *);
|
|
Packit |
70b277 |
#endif
|
|
Packit |
70b277 |
|
|
Packit |
70b277 |
/* Other things... */
|
|
Packit |
70b277 |
#ifndef HAVE_UNISTD_H
|
|
Packit |
70b277 |
(int getopt (int, char *[], CONST char *);
|
|
Packit |
70b277 |
#endif
|