# from /usr/local/share/emacs/21.3/etc/PROBLEMS
--- calc-ext.el.~1~	Sun Apr  3 02:26:34 1994
+++ calc-ext.el	Wed Sep 18 17:35:01 1996
@@ -1354,6 +1354,25 @@
   (calc-fancy-prefix 'calc-inverse-flag "Inverse..." n)
 )
 
+(defconst calc-fancy-prefix-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [t] 'calc-fancy-prefix-other-key)
+    (define-key map (vector meta-prefix-char t) 'calc-fancy-prefix-other-key)
+    (define-key map [switch-frame] nil)
+    (define-key map [?\C-u] 'universal-argument)
+    (define-key map [?0] 'digit-argument)
+    (define-key map [?1] 'digit-argument)
+    (define-key map [?2] 'digit-argument)
+    (define-key map [?3] 'digit-argument)
+    (define-key map [?4] 'digit-argument)
+    (define-key map [?5] 'digit-argument)
+    (define-key map [?6] 'digit-argument)
+    (define-key map [?7] 'digit-argument)
+    (define-key map [?8] 'digit-argument)
+    (define-key map [?9] 'digit-argument)
+    map)
+  "Keymap used while processing calc-fancy-prefix.")
+
 (defun calc-fancy-prefix (flag msg n)
   (let (prefix)
     (calc-wrapper
@@ -1364,6 +1383,8 @@
      (message (if prefix msg "")))
     (and prefix
 	 (not calc-is-keypad-press)
+	 (if (boundp 'overriding-terminal-local-map)
+	     (setq overriding-terminal-local-map calc-fancy-prefix-map)
 	 (let ((event (calc-read-key t)))
 	   (if (eq (setq last-command-char (car event)) ?\C-u)
 	       (universal-argument)
@@ -1376,9 +1397,18 @@
 	     (if (or (not (integerp last-command-char))
 		     (eq last-command-char ?-))
 		 (calc-unread-command)
-	       (digit-argument n))))))
+	       (digit-argument n)))))))
 )
 (setq calc-is-keypad-press nil)
+
+(defun calc-fancy-prefix-other-key (arg)
+  (interactive "P")
+  (if (or (not (integerp last-command-char))
+	  (and (>= last-command-char 0) (< last-command-char ? )
+	       (not (eq last-command-char meta-prefix-char))))
+      (calc-wrapper))  ; clear flags if not a Calc command.
+  (calc-unread-command)
+  (setq overriding-terminal-local-map nil))
 
 (defun calc-invert-func ()
   (save-excursion

Index: Makefile
--- Makefile.~1~	Sun Dec 15 23:50:45 1996
+++ Makefile	Thu Nov 30 15:09:45 2000
@@ -41,7 +41,7 @@
 
 # Other macros.
 EFLAGS   = -batch
-MAINT	 = -l calc-maint.elc
+MAINT	 = -l calc-maint.el
 
 # Control whether intermediate files are kept.
 PURGE	 = -rm -f
@@ -154,10 +154,7 @@
 
 
 # All this because "-l calc-maint" doesn't work.
-maint: calc-maint.elc
-calc-maint.elc: calc-maint.el
-	cp calc-maint.el calc-maint.elc
-
+maint: calc-maint.el
 
 # Create an Emacs TAGS file
 tags: TAGS

Index: calc-aent.el
--- calc-aent.el.~1~	Sun Dec 15 23:50:36 1996
+++ calc-aent.el	Tue Nov 21 18:34:33 2000
@@ -385,7 +385,7 @@
 	  (calc-minibuffer-contains
 	   "\\`\\([^\"]*\"[^\"]*\"\\)*[^\"]*\"[^\"]*\\'"))
       (insert "`")
-    (setq alg-exp (buffer-string))
+    (setq alg-exp (field-string))
     (and (> (length alg-exp) 0) (setq calc-previous-alg-entry alg-exp))
     (exit-minibuffer))
 )
@@ -393,14 +393,14 @@
 
 (defun calcAlg-enter ()
   (interactive)
-  (let* ((str (buffer-string))
+  (let* ((str (field-string))
 	 (exp (and (> (length str) 0)
 		   (save-excursion
 		     (set-buffer calc-buffer)
 		     (math-read-exprs str)))))
     (if (eq (car-safe exp) 'error)
 	(progn
-	  (goto-char (point-min))
+	  (goto-char (field-beginning))
 	  (forward-char (nth 1 exp))
 	  (beep)
 	  (calc-temp-minibuffer-message
@@ -455,14 +455,14 @@
   (interactive)
   (if (calc-minibuffer-contains ".*[@oh] *[^'m ]+[^'m]*\\'")
       (calcDigit-key)
-    (setq calc-digit-value (buffer-string))
+    (setq calc-digit-value (field-string))
     (exit-minibuffer))
 )
 
 (defun calcDigit-edit ()
   (interactive)
   (calc-unread-command)
-  (setq calc-digit-value (buffer-string))
+  (setq calc-digit-value (field-string))
   (exit-minibuffer)
 )
 
Index: calc.el
--- calc.el.~1~	Sun Dec 15 23:50:47 1996
+++ calc.el	Wed Nov 22 13:08:49 2000
@@ -2051,11 +2051,11 @@
   ;; Exercise for the reader:  Figure out why this is a good precaution!
   (or (boundp 'calc-buffer)
       (use-local-map minibuffer-local-map))
-  (let ((str (buffer-string)))
+  (let ((str (field-string)))
     (setq calc-digit-value (save-excursion
 			     (set-buffer calc-buffer)
 			     (math-read-number str))))
-  (if (and (null calc-digit-value) (> (buffer-size) 0))
+  (if (and (null calc-digit-value) (> (field-end) (field-beginning)))
       (progn
 	(beep)
 	(calc-temp-minibuffer-message " [Bad format]"))
@@ -2071,7 +2071,7 @@
 
 (defun calc-minibuffer-contains (rex)
   (save-excursion
-    (goto-char (point-min))
+    (goto-char (field-end (point-min)))
     (looking-at rex))
 )
 
@@ -2158,10 +2158,8 @@
 					  (upcase last-command-char))))
 				(and dig
 				     (< dig radix)))))))
-	      (save-excursion
-		(goto-char (point-min))
-         	(looking-at
-		 "[-+]?\\(.*\\+/- *\\|.*mod *\\)?\\([0-9]+\\.?0*[@oh] *\\)?\\([0-9]+\\.?0*['m] *\\)?[0-9]*\\(\\.?[0-9]*\\(e[-+]?[0-3]?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?\\)?\\|[0-9]:\\([0-9]+:\\)?[0-9]*\\)?[\"s]?\\'")))
+	      (calc-minibuffer-contains
+		 "[-+]?\\(.*\\+/- *\\|.*mod *\\)?\\([0-9]+\\.?0*[@oh] *\\)?\\([0-9]+\\.?0*['m] *\\)?[0-9]*\\(\\.?[0-9]*\\(e[-+]?[0-3]?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?\\)?\\|[0-9]:\\([0-9]+:\\)?[0-9]*\\)?[\"s]?\\'"))
 	  (if (and (memq last-command-char '(?@ ?o ?h ?\' ?m))
 		   (string-match " " calc-hms-format))
 	      (insert " "))
@@ -2190,7 +2188,7 @@
 	((eq last-command 'calcDigit-start)
 	 (erase-buffer))
 	(t (backward-delete-char 1)))
-  (if (= (buffer-size) 0)
+  (if (= (field-beginning) (field-end))
       (progn
 	(setq last-command-char 13)
 	(calcDigit-nondigit)))

* TeX'ing the Calc manual fails.

The following patches allow to build the Calc manual using texinfo.tex
from Emacs 19.34 distribution:

*** calc-maint.e~0	Mon Dec 16 07:11:26 1996
--- calc-maint.el	Sun Dec 10 14:32:38 2000
***************
*** 308,314 ****
      (insert "@tex\n"
  	    "\\global\\advance\\appendixno2\n"
  	    "\\gdef\\xref#1.{See ``#1.''}\n")
!     (setq midpos (point))
      (insert "@end tex\n")
      (insert-buffer-substring srcbuf sumpos endpos)
      (insert "@bye\n")
--- 308,314 ----
      (insert "@tex\n"
  	    "\\global\\advance\\appendixno2\n"
  	    "\\gdef\\xref#1.{See ``#1.''}\n")
!     (setq midpos (point-marker))
      (insert "@end tex\n")
      (insert-buffer-substring srcbuf sumpos endpos)
      (insert "@bye\n")
*** Makefile.~0	Mon Dec 16 07:11:24 1996
--- Makefile	Sun Dec 10 14:44:00 2000
***************
*** 98,106 ****
  # Format the Calc manual as one printable volume using TeX.
  tex:
  	$(REMOVE) calc.aux
! 	$(TEX) calc.texinfo
  	$(TEXINDEX) calc.[cfkptv]?
! 	$(TEX) calc.texinfo
  	$(PURGE) calc.cp calc.fn calc.pg calc.tp calc.vr
  	$(PURGE) calc.cps calc.fns calc.kys calc.pgs calc.tps calc.vrs
  	$(PURGE) calc.toc
--- 98,106 ----
  # Format the Calc manual as one printable volume using TeX.
  tex:
  	$(REMOVE) calc.aux
! 	-$(TEX) calc.texinfo
  	$(TEXINDEX) calc.[cfkptv]?
! 	-$(TEX) calc.texinfo
  	$(PURGE) calc.cp calc.fn calc.pg calc.tp calc.vr
  	$(PURGE) calc.cps calc.fns calc.kys calc.pgs calc.tps calc.vrs
  	$(PURGE) calc.toc
*** calc.texinfo.~1~	Thu Oct 10 18:18:56 1996
--- calc.texinfo	Mon Dec 11 08:25:00 2000
***************
*** 12,17 ****
--- 12,19 ----
  % Because makeinfo.c exists, we can't just define new commands.
  % So instead, we take over little-used existing commands.
  %
+ % Suggested by Karl Berry <karl@@freefriends.org>
+ \gdef\!{\mskip-\thinmuskip}
  % Redefine @cite{text} to act like $text$ in regular TeX.
  % Info will typeset this same as @samp{text}.
  \gdef\goodtex{\tex \let\rm\goodrm \let\t\ttfont \turnoffactive}
***************
*** 23686,23692 ****
  a vector of the actual parameter values, written as equations:
  @cite{[a = 3, b = 2]}, in case you'd rather read them in a list
  than pick them out of the formula.  (You can type @kbd{t y}
! to move this vector to the stack; @pxref{Trail Commands}.)
  
  Specifying a different independent variable name will affect the
  resulting formula: @kbd{a F 1 k RET} produces @kbd{3 + 2 k}.
--- 23689,23695 ----
  a vector of the actual parameter values, written as equations:
  @cite{[a = 3, b = 2]}, in case you'd rather read them in a list
  than pick them out of the formula.  (You can type @kbd{t y}
! to move this vector to the stack; see @ref{Trail Commands}.)
  
  Specifying a different independent variable name will affect the
  resulting formula: @kbd{a F 1 k RET} produces @kbd{3 + 2 k}.