Submission for Unix-PC

Tanya Katz x430 tanya at srctwr
Tue Nov 28 02:06:26 AEST 1989


In an article Originally-From: lj at spdcc.COM (Len Jacobs) 

Len writes:

>I am searching for the cource to a 3B1 program that was posted several
>months ago.  It was an interactive calculator that apparently was an
>intelligent front end to bc.

>If you have a copy or know where it could be extracted, please post
>or send mail.

>Thanks.

I'm not sure if this is what you are referring to, but I use kc.
It originally appeared in Unix World as the Ksh Tool of the Month.

Any way, it is short, so here it is...

-Tanya
...uunet!ncrlnk!adds!tanya                 
tanya.katz at adds.newyork.ncr.com            

#                o /             o /             o /             o /   
#--Cut-here-------X---------------X---------------X---------------X----
#                o \             o \             o \             o \   
# This is a shell archive.  Remove anything above this line!
# Save the results in a file.
# To unpack "sh file".
# To unpack & overwrite existing files, "sh file -c".
#
PATH=/bin:/usr/bin:/usr/ucb ; export PATH

if test -f kc -a "$1" != "-c" 
   then echo file kc exists. \"sh $0 -c\" forces overwrite!
   else echo kc 1>&2
	cat >kc << 'END_OF_kc'
# ------------------------------------------------------------------------
#sccs	"@(#)	KC 	 Version 1.0"
#
# 	BC front-end originally "ksh tool of the month,"
# 	UnixWorld Magazine, April, 1988
#
# ------------------------------------------------------------------------

if [ $# -gt 0 ]
    then
#	exec bc directly with command line arg
	echo "$*" | bc 
	exit 0
    fi
#	force letters to upper case
typeset -u BCIN
M=0
menu() {
echo "
Kc memory functions:

  m+\tAdd to memory\t\t\tm-    Subtract from memory
  mi\tMemory in (direct)\t\tmr    Memory recall
  mc\tMemory clear\t\t\t=     Print current totals
  +-/*\tMath op using current total\tac    Clear accumulator & memory
"
}
#	put bc in background and set up pipe
    bc -l |&
    print -p "obase=10; ibase=10; scale=2"
    print -p "m=0"
    PROMPT="> "
    echo "Welcome to KC: the k-shell calculator.
Type ? for the help menu.  To quit: q <RETURN>
"
    while :
    do
	if  echo "$PROMPT\c"
	    KBD=`line`
	then
	    case "$KBD" in
	    	help |\?)
			menu
			;;

		q|Q|quit|QUIT)
			exit ;;

		!)	ksh ;;
		!*)	eval "${KBD##!}" ;; #strip off leading !

		m+)	print -p "m = m + ${ANS:=0}; m"
			read -p M
			if [ ! "${M}" = "0" ]
			then
				print - "\tm= $M"
				PROMPT="m> "
			else
				PROMPT="> "
			fi
			;;
		
		m-)	print -p - "m = m - ${ANS:=0}; m"
			read -p M
			if [ ! "${M}" = "0" ]
			then
				print - "\tm= $M"
				PROMPT="m> "
			else
				PROMPT="> "
			fi
			;;

		mi)	print -p - "m = ${ANS:=0}; m"
			read -p M
			if [ ! "${M}" = "0" ]
			then
				print - "\tm= $M"
				PROMPT="m> "
			else
				PROMPT="> "
			fi
			;;
		
		mr)	print -p - "m"
			read -p ANS
			print - "\t$ANS"
			;;

		mc)	print -p "m = 0"
			PROMPT="> "
			;;

		scale)  print -p "scale"
			read -p ANS
			print - "\t$ANS"
			;;
			
		scale*)  print -p "$KBD"
			;;
		
		obase)  print -p "obase"
			read -p ANS
			print - "\t$ANS"
			;;
			
		obase*)  print -p "$KBD"
			;;

		ibase)  print -p "ibase"
			read -p ANS
			print - "\t$ANS"
			;;
			
		ibase*)  print -p "$KBD"
			;;

		/0)	print "divide by 0\007" 
			;;

		/ | \* | + | -) 
			;;

		+* | -* | /* | \**) BCIN="$KBD"
			print -p - "${ANS:=0}${BCIN}"
  			if [ $? -ne 0 ]
			then echo "kc: ${ANS:=0}${BCIN}"
				exit 1
			fi
			read -p ANS
 			print - "\t$ANS"
			;;

		=)	print - "\t${ANS:=0}"
			if [ $M -ne 0 ]
			then print - "\tm= $M"
			fi
			;;

		ac)	print -p "m = 0"
			print -p "0"
			read -p ANS
			print - "\t$ANS"
			PROMPT="> "
			;;

	 	[!G-Zg-z]*)	#matches 0-9 and a-f input
			if [ ! "$KBD" ]
			then continue
			fi
			BCIN="$KBD"
		   	print -p "$BCIN"
			read -p ANS
		   	print - "\t$ANS"
			;;
		esac
	else
		exit
	fi
done
END_OF_kc
if test 2650 -ne `wc -c <kc`
   then echo sh: "kc" unpacked with wrong size!
   fi
fi
# ----- End of kc shell code ----- #
#  End of sh archive.
exit 0



More information about the Unix-pc.general mailing list