INSTALLATION ------------ a) Make sure you have a working vsprintf and vfprintf in your library. (If your system does not have them in your library, you can get a copy of the BSD4.3-tahoe stdio that is freely copyable. It is available from uunet.uu.net. For Minix systems, a vsprintf.c is included.) b) EDIT the Makefile for the correct definitions. Read the comments in the the Makefile and make the changes needed. (A "full" explanation of all the C defines are given at the end of this file.) If your are on a MINIX machine, make sure the correct definitions for $O, $CFLAGS, and $LDFLAGS are uncommented in the makefile. NOTE: "configure" is a shell scritp that is automatically run by make to configure the bc source to your operating system. You should still look at the Makefile. d) "make derived" (If you need it.) The distribution contains the files bc.c.dist y.tab.h.dist and scan.c.dist. These are provided so that you do not need a working yacc and flex (lex). This program was designed to work with the free programs byacc (berkeley yacc) and flex. It should work with other versions of yacc and lex, but it is not guaranteed to work. If you do not have yacc or flex, give the command to get the *.dist files to their proper place. This insures that make will not try to make these derived files from their original source. Use the "make derived" before trying to compile bc. e) "make" compiles bc f) "make install" installs bc and libmath.b (if needed) in their directories. g) Use bc! DEFINES ------- The following the are some defines that are automatically generated by the configure script. In most cases, you do not need to deal with them. The configure script is automatically run by make. BC_MATH_FILE=$(LIBFILE) This defines the location of the math library file. If you use this definition, the math library is read from LIBFILE. If you do not define this, bc will include a "compiled" form of the math library with the executable and will not need to read any external file if the -l flag is given. VARARGS The variable args mechanism is assumed to be ANSI stdarg. Use -DVARARGS for Ultrix, SUN-OS, BSD, and other UNIX versions that use traditional varargs, For MINIX and ANSI compilers (gcc et al) do NOT use -DVARARGS. NO_LIMITS Use this for systems without the /usr/include/limits.h file. (BSD4.3 is one.) You should check the values of INT_MAX and LONG_MAX in the file const.h if you use -DNO_LIMITS. NO_UNISTD Use this for systems without /usr/include/unistd.h. -DNO_STDLIB Use this for systems without /usr/include/stdlib.h. STRINGS_H Include the file instead of . The following defines may need to be added by hand to the Makefile if you want them. They are not generated by the configure script. -DOLD_EQ_OP Causes bc to recognize = as the same as =. The = is the old style. It makes "a =- 1" ambiguous. With OLD_EQ_OP defined it is equivalent to "a -= 1" and with OLD_EQ_OP undefined it is equivalent to "a = -1". -DSMALL_BUF Use this IF you are using flex AND you have a systems with limited memory space. If you use this, you should also use -DBC_MATH_FILE. This is "standard" for MINIX systems running on the IBM_PC. -DSHORTNAMES If your compiler keeps a limited number of characters from names, you should include this define. It is needed for the K&R compiler on MINIX and is automatically added for MINIX on the IBM_PC. -DDEBUG=n Compile the debugging code. The higher the number, the more debugging code. The degugging code is not very good. POSSIBLE PROBLEMS ----------------- There might be some possible problems compiling due to different versions of the header files. scan.c may require to edit out some definitions of malloc and free. Others should compile with the correct set of defines.