: 'Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984, 1985.' echo "Configuration questions for the B system." : 'Determine if echo -n works' echo -n "bleep" >.bleep if grep n .bleep >/dev/null 2>&1 then n="" else n="-n" fi rm -f .bleep : 'What machine?' echo " " echo $n "Figuring out what machine you have " echo $n "..." cat >machine.c <<EOF #include <stdio.h> main() { #ifdef vax printf("vax\n"); #else #ifdef pdp printf("pdp\n"); #else #ifdef PDP printf("pdp\n"); #else printf("other\n"); #endif #endif #endif } EOF cc machine.c -o machine machine=`machine` rm -f machine* echo " " case $machine in vax) echo "This machine appears to be a VAX." echo $n "Is this true? " read ans case $ans in n*|N*|f*|F*) machine="other" ;; *) bint="bint" ;; esac ;; pdp) echo "This machine appears to be a PDP." echo $n "Is this true? " read ans case $ans in n*|N*|f*|F*) machine="other" ;; *) bint="bsmall" ;; esac ;; esac case $machine in other) echo "Your machine does not appear to be a VAX or PDP." echo $n "Is this a small machine (less than 190K code space)? " read ans case $ans in y*|Y*) bint="bsmall" ;; *) bint="bint" ;; esac echo " " echo "Since your machine may not be a VAX or PDP, you might have to edit" echo "the configuration file for the B interpreter '$bint'." echo "Check the remarks in b0con.h and README in ./src/$bint." ;; esac case $bint in "bsmall") echo " " echo "Since you have a small system, we can only use the old" echo "version of the B interpreter, named $bint." echo "See the file ./src/bsmall/README for details." echo " " echo "The B editor is too big in its full glory." echo "Therefore all kinds of features will be turned off in an" echo "attempt to make it fit." echo "See ./src/bed/feat.h for details." ;; esac : 'What unix?' echo " " echo $n "Finding out about your brand of unix " echo $n "..." cat >unix.c <<EOF #include <stdio.h> #include <signal.h> main() { #ifdef SIGCHLD #ifdef SIGVTALRM printf("BSD4_2\n"); #else printf("BSD\n"); #endif #else #ifdef SIGCLD printf("ATT\n"); #else printf("unknown\n"); /* Version 7 we hope ... */ #endif #endif } EOF cc unix.c -o unix unix=`unix` rm -f unix* echo " " case $unix in BSD4_2) echo "You appear to be running Berkeley's BSD unix, version 4.2 (or later)." echo $n "Is this true? " read ans case $ans in n*|N*|f*|F*) unix="unknown";; esac ;; BSD) echo "You appear to be running Berkeley's BSD unix." echo $n "Is this true? " read ans case $ans in n*|N*|f*|F*) unix="unknown";; esac ;; ATT) echo "You appear to be running ATT's System III or System V unix." echo $n "Is this true? " read ans case $ans in n*|N*|f*|F*) unix="unknown";; esac ;; esac case $machine in pdp|other) case $unix in unknown) echo $n "Are you running PWB Unix? " read ans case $ans in y*|Y*) unix="PWB";; esac ;; esac esac case $unix in unknown) echo " " echo "We cannot find out what type of unix you are running." echo "See ./src/bed/unix.h, ./src/bed/feat.h, /src/$bint/README" echo "and ./src/$bint/b0con.h in case of problems." ;; esac : 'Floating point arithmetic ok?' echo " " cat >float.c <<EOF #include <stdio.h> double dadd(a, b) double a, b; { return a+b; } main() { double a, b, c; double dadd(); a = 3.14; b = 2.7 * a; c = dadd(a, b); exit(0); } EOF cc -O float.c -o float >/dev/null 2>&1 if sh 2>/dev/null <<EOF if float then exit 0 else exit 1 fi EOF then echo "Your floating point seems to be alright." fflag="" else echo "Your C compiler seems to need a special flag for" echo "loading (probably software) floating point routines." echo $n "What flag is needed (default -f) " read fflag case $fflag in '') fflag="-f";; esac cc -O $fflag float.c -o float >/dev/null 2>&1 until sh 2>/dev/null <<EOF if float then exit 0 else exit 1 fi EOF do echo "This flag doesn't seem to work." echo "Try again (default -f) " read fflag case $fflag in '') fflag="-f";; esac cc -O $fflag float.c -o float >/dev/null 2>&1 done fi rm -f float* core : 'termio system?' if test -r /usr/include/termio.h then termio="yes" echo " " echo "Termio.h found." else termio="no" if test ! -r /usr/include/sgtty.h then echo " " echo "Neither termio.h nor sgtty.h found." echo "See ./src/bed/unix.h in case of problems." fi fi : 'termcap library for B editor' echo " " echo $n "Searching for your termcap-like library routines " echo $n "... " if test -r /lib/libtermcap.a -o -r /usr/lib/libtermcap.a then termlib="-ltermcap" echo "termcap library found." elif test -r /usr/local/lib/libtermcap.a then termlib="/usr/local/lib/libtermcap.a" echo "local termcap library found." elif test -r /lib/libtermlib.a -o -r /usr/lib/libtermlib.a then termlib="-ltermlib" echo "termlib library found." elif test -r /usr/local/lib/libtermlib.a then termlib="/usr/local/lib/libtermlib.a" echo "local termlib library found." elif test -r /lib/libcurses.a -o -r /usr/lib/libcurses.a then termlib="-lcurses" echo "terminfo library found." elif test -r /usr/local/lib/libcurses.a then termlib="/usr/local/lib/libcurses.a" echo "local terminfo library found." else : 'changed for 4.3 BSD release' termlib="ask_it" fi while test "$termlib" = "ask_it" -o "$termlib" = "try_again"; do case $termlib in ask_it) echo " " echo "Please specify where the termcap-like routines are kept" echo $n " (either full pathname or -lxxx option) " ;; try_again) echo $n "Please try again (full pathname or -lyyy option) " ;; esac read termlib case $termlib in -l*) echo "Hope $termlib will do the job." ;; /*) if test -r $termlib then echo "Ok, we will try that one." else echo "$termlib does not appear to exist." termlib="try_again" fi ;; *) echo "$termlib is not a valid library specification." termlib="try_again" ;; esac done : 'termcap database, commented out for 4.3 BSD' #echo " " #if test -r /etc/termcap #then # termcap="yes" # echo "Termcap database found." #else # termcap="no" # echo "No termcap database found; we will install our own, to be used" # echo "when your TERMCAP environment variable is not set." #fi : 'Shall we make B public?' public="no" echo " " echo $n "Will you want to make B publically available? " read ans case $ans in y*|Y*) public="yes" if test -r answers then . answers else bdef="/usr/new" libdef="/usr/new/lib/B" man1def="/usr/man/mann" man5def="/usr/man/mann" fi bdir='blurfl' while test ! -d "$bdir" ; do case $bdir in blurfl) echo " " echo "Please type the full pathname of a directory" echo "in which you have write permission," echo "and where you want the 'b' command file installed" echo $n " (default $bdef) " ;; *) echo "$bdir does not appear to exist." echo $n "Are you sure you typed the right name? " read ans case $ans in y*|Y*) echo "Don't forget to make $bdir before 'make install'." break ;; *) echo " " echo $n "Please try again (default $bdef) " ;; esac ;; esac read bdir case $bdir in "") bdir=$bdef;; esac done libdir='blurfl' while test ! -d "$libdir" ; do case $libdir in blurfl) echo " " echo "Please type the full pathname of the directory" echo "where you want to install the auxiliary binaries" echo "and datafiles needed by the B system" echo $n " (default $libdef) " ;; *) echo "$libdir does not appear to exist." echo $n "Are you sure you typed the right name? " read ans case $ans in *|Y*) echo "Don't forget to make $libdir before 'make install'." break ;; *) echo " " echo $n "Please try again (default $libdef) " ;; esac ;; esac read libdir case $libdir in "") libdir=$libdef;; esac done man1dir='blurfl' while test ! -d "$man1dir" ; do case $man1dir in blurfl) echo " " echo "Please type the full pathname of the directory" echo "where you want to install the 'b.1' manual page" echo $n " (default $man1def) " ;; *) echo "$man1dir does not appear to exist." echo $n "Are you sure you typed the right name? " read ans case $ans in y*|Y*) echo "Don't forget to make $man1dir before 'make install'." break ;; *) echo " " echo $n "Please try again (default $man1def) " ;; esac ;; esac read man1dir case $man1dir in "") man1dir=$man1def;; esac done man5dir='blurfl' while test ! -d "$man5dir" ; do case $man5dir in blurfl) echo " " echo "Please type the full pathname of the directory" echo "where you want to install the 'bterminal.5' manual page" echo $n " (default $man5def) " ;; *) echo "$man5dir does not appear to exist." echo $n "Are you sure you typed the right name? " read ans case $ans in y*|Y*) echo "Don't forget to make $man5dir before 'make install'." break ;; *) echo " " echo $n "Please try again (default $man5def) " ;; esac echo $n "Please try again " ;; esac read man5dir case $man5dir in "") man5dir=$man5def;; esac done cat >answers <<EOF bdef="$bdir" libdef="$libdir" man1def="$man1dir" man5def="$man5dir" EOF ;; esac echo " " echo "End of configuration questions for the B system." : 'Getting generic copies of makefiles and shellfiles.' : 'Since some tar_s leave the owner of the tape as the owner of the files' : 'this will make sure the edit scripts will not fail.' makefiles="./Makefile src/b/Makefile src/bed/Makefile src/bint/Makefile src/bsmall/Makefile" shellfiles="src/b/b.sh src/b/b_p.sh" editor="ed -" cat >mf.head <<EOF # This file was generated and edited by the Setup command. # To make lasting changes edit the file Makefile.gen and run Setup again. # EOF for f in $makefiles do cat mf.head $f.gen >$f chmod 644 $f done rm -f mf.head for f in $shellfiles do cp $f.gen $f chmod 755 $f done echo " " echo $n "Editing Appropriate files ... " case $machine in pdp) f=src/bed/Makefile $editor $f <<EOF /^LDFLAGS=/s?LDFLAGS=.*?LDFLAGS= -i? w q EOF f=src/bsmall/Makefile $editor $f <<EOF /^LDFLAGS=/s?LDFLAGS=.*?LDFLAGS= -i? w q EOF ;; esac : 'Not all CFLAGS are used by all sources.' : 'But for convenience and future use, we put them into all source Makefiles.' cflags="-O $fflag -DNDEBUG" for f in Makefile src/b/b.sh src/bed/Makefile do $editor $f <<EOF /^BINT=/s?BINT=.*?BINT=$bint? w q EOF done case $bint in bsmall) f=Makefile $editor $f <<EOF /examples$/s?make .*examples?make smallexamples? w q EOF cflags="$cflags -DSMALLSYS" ;; esac case $unix in BSD|BSD4_2|PWB) cflags="$cflags -D$unix" ;; ATT) cflags="$cflags -Dindex=strchr -Drindex=strrchr" ;; esac case $termio in yes) cflags="$cflags -DTERMIO" ;; esac for f in src/b/Makefile src/bed/Makefile src/$bint/Makefile do $editor $f <<EOF /^CFLAGS=/s?CFLAGS=.*?CFLAGS= $cflags? w q EOF done case $termlib in -l*|/*) f=src/bed/Makefile $editor $f <<EOF /^TERMLIB=/s?.*?TERMLIB= $termlib? /^OWNTLIB=/s?.*?OWNTLIB=? w q EOF ;; libtermcap.a) f=src/bed/Makefile $editor $f <<EOF /^TERMLIB=/s?.*?TERMLIB=? /^OWNTLIB=/s?.*?OWNTLIB= libtermcap.a? w q EOF ;; esac #case $termcap in #no) # f=src/b/Makefile # $editor $f <<"EOF" # /^install:/s?.*?install: all ldest termcap? # w # q #EOF # ;; #esac case $public in yes) f=Makefile $editor $f <<EOF /^BDIR=/s?BDIR=.*?BDIR=$bdir? /^MAN1DIR=/s?MAN1DIR=.*?MAN1DIR=$man1dir? /^MAN5DIR=/s?MAN5DIR=.*?MAN5DIR=$man5dir? /^LIBDIR=/s?LIBDIR=.*?LIBDIR=$libdir? w q EOF ;; esac echo "done." echo " " echo "This completes the setup of the B system." echo "You can now try 'make all'."