diff --git a/books/bookvol10.5.pamphlet b/books/bookvol10.5.pamphlet
index 3ffba5b..6943118 100644
--- a/books/bookvol10.5.pamphlet
+++ b/books/bookvol10.5.pamphlet
@@ -506,11 +506,27 @@ BlasLevelOne() : Exports == Implementation where
       ++X dasum(6,dx,1)
       ++X dasum(3,dx,2)
 
+    daxpy: (SI, DF, DX, SI, DX,SI) -> DX 
+      ++ daxpy(n,da,dx,incx,dy,incy) computes a y = a*x + y
+      ++ for each of the chosen elements of the vectors x and y
+      ++ and a constant multiplier a
+      ++ Note that the vector b is modified with the results.
+      ++
+      ++X dx:PRIMARR(DFLOAT):=[[1.0,2.0,3.0,4.0,5.0,6.0]]
+      ++X dy:PRIMARR(DFLOAT):=[[1.0,2.0,3.0,4.0,5.0,6.0]]
+      ++X daxpy(6,2.0,dx,1,dy,1)
+      ++X dy
+      ++X dm:PRIMARR(DFLOAT):=[[1.0,2.0,3.0]]
+      ++X dn:PRIMARR(DFLOAT):=[[1.0,2.0,3.0,4.0,5.0,6.0]]
+      ++X daxpy(3,-2.0,dm,1,dn,2)
+      ++X dn
+
   Implementation  == add
 
       dcabs1(z:CDF):DF == DCABS1(z)$Lisp
       dasum(n:SI,dx:DX,incx:SI):DF == DASUM(n,dx,incx)$Lisp
-
+      daxpy(n:SI,da:DF,dx:DX,incx:SI,dy:DX,incy:SI):DX ==
+        DAXPY(n,da,dx,incx,dy,incy)$Lisp
 
 @
 <<BLAS1.dotabb>>=
@@ -730,10 +746,10 @@ function.
 )clear all
 
 --S 1 of 28
-a:PRIMARR(DFLOAT):=[[1.0,2.0,3.0,4,0,5,0,6,0]]
+a:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0]]
 --R 
 --R
---R   (1)  [1.,2.,3.,4.,0.,5.,0.,6.,0.]
+--R   (1)  [1.,2.,3.,4.,5.,6.]
 --R                                             Type: PrimitiveArray DoubleFloat
 --E 1
 
@@ -805,7 +821,7 @@ dasum(4,a,1) -- 10.0   1.0+2.0+3.0+4.0
 dasum(5,a,1) -- 15.0   1.0+2.0+3.0+4.0+5.0
 --R 
 --R
---R   (10)  10.
+--R   (10)  15.
 --R                                                            Type: DoubleFloat
 --E 10
 
@@ -813,7 +829,7 @@ dasum(5,a,1) -- 15.0   1.0+2.0+3.0+4.0+5.0
 dasum(6,a,1) -- 21.0   1.0+2.0+3.0+4.0+5.0+6.0
 --R 
 --R
---R   (11)  15.
+--R   (11)  21.
 --R                                                            Type: DoubleFloat
 --E 11
 
@@ -821,7 +837,7 @@ dasum(6,a,1) -- 21.0   1.0+2.0+3.0+4.0+5.0+6.0
 dasum(7,a,1) -- 21.0   1.0+2.0+3.0+4.0+5.0+6.0
 --R 
 --R
---R   (12)  15.
+--R   (12)  21.
 --R                                                            Type: DoubleFloat
 --E 12
 
@@ -845,7 +861,7 @@ dasum(2,a,2) --  4.0   1.0+3.0
 dasum(3,a,2) --  9.0   1.0+3.0+5.0
 --R 
 --R
---R   (15)  4.
+--R   (15)  9.
 --R                                                            Type: DoubleFloat
 --E 15
 
@@ -853,7 +869,7 @@ dasum(3,a,2) --  9.0   1.0+3.0+5.0
 dasum(4,a,2) --  9.0   1.0+3.0+5.0
 --R 
 --R
---R   (16)  4.
+--R   (16)  9.
 --R                                                            Type: DoubleFloat
 --E 16
 
@@ -893,7 +909,7 @@ dasum(1,a,4) --  1.0   1.0
 dasum(2,a,4) --  6.0   1.0+5.0
 --R 
 --R
---R   (21)  1.
+--R   (21)  6.
 --R                                                            Type: DoubleFloat
 --E 21
 
@@ -901,7 +917,7 @@ dasum(2,a,4) --  6.0   1.0+5.0
 dasum(3,a,4) --  6.0   1.0+5.0
 --R 
 --R
---R   (22)  1.
+--R   (22)  6.
 --R                                                            Type: DoubleFloat
 --E 22
 
@@ -917,7 +933,7 @@ dasum(1,a,5) --  1.0   1.0
 dasum(2,a,5) --  7.0   1.0+6.0
 --R 
 --R
---R   (24)  6.
+--R   (24)  7.
 --R                                                            Type: DoubleFloat
 --E 24
 
@@ -925,7 +941,7 @@ dasum(2,a,5) --  7.0   1.0+6.0
 dasum(3,a,5) --  7.0   1.0+6.0
 --R 
 --R
---R   (25)  6.
+--R   (25)  7.
 --R                                                            Type: DoubleFloat
 --E 25
 
@@ -961,6 +977,90 @@ dasum(1,a,7) --  1.0   1.0
 dasum examples
 ====================================================================
 
+a:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0]]
+    [1.,2.,3.,4.,5.,6.]
+
+dasum(3,a,-1) -- 0.0   neg incx
+    0.
+
+dasum(3,a,0) --  0.0   zero incx
+    0.
+
+dasum(-1,a,1) -- 0.0   neg elements
+    0.
+
+dasum(0,a,1) --  0.0   no elements
+    0.
+
+dasum(1,a,1) --  1.0   1.0
+    1.
+
+dasum(2,a,1) --  3.0   1.0+2.0
+    3.
+
+dasum(3,a,1) --  6.0   1.0+2.0+3.0
+    6.
+
+dasum(4,a,1) -- 10.0   1.0+2.0+3.0+4.0
+   10.
+
+dasum(5,a,1) -- 15.0   1.0+2.0+3.0+4.0+5.0
+   15.
+
+dasum(6,a,1) -- 21.0   1.0+2.0+3.0+4.0+5.0+6.0
+   21.
+
+dasum(7,a,1) -- 21.0   1.0+2.0+3.0+4.0+5.0+6.0
+   21.
+
+dasum(1,a,2) --  1.0   1.0
+    1.
+
+dasum(2,a,2) --  4.0   1.0+3.0
+    4.
+
+dasum(3,a,2) --  9.0   1.0+3.0+5.0
+    9.
+
+dasum(4,a,2) --  9.0   1.0+3.0+5.0
+    9.
+
+dasum(1,a,3) --  1.0   1.0
+    1.
+
+dasum(2,a,3) --  5.0   1.0+4.0
+    5.
+
+dasum(3,a,3) --  5.0   1.0+4.0
+    5.
+
+dasum(1,a,4) --  1.0   1.0
+    1.
+
+dasum(2,a,4) --  6.0   1.0+5.0
+    6.
+
+dasum(3,a,4) --  6.0   1.0+5.0
+    6.
+
+dasum(1,a,5) --  1.0   1.0
+    1.
+
+dasum(2,a,5) --  7.0   1.0+6.0
+    7.
+
+dasum(3,a,5) --  7.0   1.0+6.0
+    7.
+
+dasum(1,a,6) --  1.0   1.0
+    1.
+
+dasum(2,a,6) --  1.0   1.0
+    1.
+
+dasum(1,a,7) --  1.0   1.0
+    1.
+
 ====================================================================
 Man Page Details
 ====================================================================
@@ -1090,6 +1190,182 @@ NOTES:
 )set message auto off
 )clear all
 
+--S 1 of 22
+a:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+--R 
+--R
+--R   (1)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 1
+
+--S 2 of 22
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+--R 
+--R
+--R   (2)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 2
+
+--S 3 of 22
+daxpy(3,2.0,a,1,b,1)
+--R 
+--R
+--R   (3)  [3.,6.,9.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 3
+
+--S 4 of 22
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+--R 
+--R
+--R   (4)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 4
+
+--S 5 of 22
+daxpy(7,2.0,a,1,b,1)
+--R 
+--R
+--R   (5)  [3.,6.,9.,12.,15.,18.,21.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 5
+
+--S 6 of 22
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+--R 
+--R
+--R   (6)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 6
+
+--S 7 of 22
+daxpy(8,2.0,a,1,b,1)
+--R 
+--R
+--R   (7)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 7
+
+--S 8 of 22
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+--R 
+--R
+--R   (8)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 8
+
+--S 9 of 22
+daxpy(3,2.0,a,3,b,3)
+--R 
+--R
+--R   (9)  [3.,2.,3.,12.,5.,6.,21.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 9
+
+--S 10 of 22
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+--R 
+--R
+--R   (10)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 10
+
+--S 11 of 22
+daxpy(4,2.0,a,2,b,2)
+--R 
+--R
+--R   (11)  [3.,2.,9.,4.,15.,6.,21.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 11
+
+--S 12 of 22
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+--R 
+--R
+--R   (12)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 12
+
+--S 13 of 22
+daxpy(5,2.0,a,2,b,2)
+--R 
+--R
+--R   (13)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 13
+
+--S 14 of 22
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+--R 
+--R
+--R   (14)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 14
+
+--S 15 of 22
+daxpy(3,2.0,a,2,b,2)
+--R 
+--R
+--R   (15)  [3.,2.,9.,4.,15.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 15
+
+--S 16 of 22
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+--R 
+--R
+--R   (16)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 16
+
+--S 17 of 22
+daxpy(3,-2.0,a,2,b,2)
+--R 
+--R
+--R   (17)  [- 1.,2.,- 3.,4.,- 5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 17
+
+--S 18 of 22
+a:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0]]
+--R 
+--R
+--R   (18)  [1.,2.,3.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 18
+
+--S 19 of 22
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0]]
+--R 
+--R
+--R   (19)  [1.,2.,3.,4.,5.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 19
+
+--S 20 of 22
+daxpy(3,-2.0,a,1,b,2)
+--R 
+--R
+--R   (20)  [- 1.,2.,- 1.,4.,- 1.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 20
+
+--S 21 of 22
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+--R 
+--R
+--R   (21)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 21
+
+--S 22 of 22
+daxpy(3,0.0,a,1,b,2)
+--R 
+--R
+--R   (22)  [1.,2.,3.,4.,5.,6.,7.]
+--R                                             Type: PrimitiveArray DoubleFloat
+--E 22
+
 )spool
 )lisp (bye)
 @
@@ -1098,6 +1374,96 @@ NOTES:
 daxpy examples
 ====================================================================
 
+For each of the following examples we assume that we have preset
+the variables to the following values. Note that the daxpy function
+will modify the second array. Each example assumes we have reset
+the variables to these values.
+
+a:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]
+
+then we compute the sum of the first 3 elements of each vector
+and we show the steps of the computation with trailing comments.
+The comments show which elements are changed and what the computation is.
+
+daxpy(3,2.0,a,1,b,1) ==> [3.,6.,9.,4.,5.,6.,7.]
+  dy(0)[3.0] = dy(0)[1.0] + ( da[2.0] * dx(0)[1.0] )
+  dy(1)[6.0] = dy(1)[2.0] + ( da[2.0] * dx(1)[2.0] )
+  dy(2)[9.0] = dy(2)[3.0] + ( da[2.0] * dx(2)[3.0] )
+
+or we compute the first 7 elements of each vector
+
+daxpy(7,2.0,a,1,b,1) ==> [3.,6.,9.,12.,15.,18.,21.]
+  dy(0) [3.0] = dy(0)[1.0] + ( da[2.0] * dx(0)[1.0] )
+  dy(1) [6.0] = dy(1)[2.0] + ( da[2.0] * dx(1)[2.0] )
+  dy(2) [9.0] = dy(2)[3.0] + ( da[2.0] * dx(2)[3.0] )
+  dy(3)[12.0] = dy(3)[4.0] + ( da[2.0] * dx(3)[4.0] )
+  dy(4)[15.0] = dy(4)[5.0] + ( da[2.0] * dx(4)[5.0] )
+  dy(5)[18.0] = dy(5)[6.0] + ( da[2.0] * dx(5)[6.0] )
+  dy(6)[21.0] = dy(6)[7.0] + ( da[2.0] * dx(6)[7.0] )
+
+or we compute the first 8 elements, which fails due to the fact that
+the vectors are not long enough.
+
+daxpy(8,2.0,a,1,b,1) ==> [1.,2.,3.,4.,5.,6.,7.]
+
+or we compute the 3 elements, taking every 3rd element, giving the
+index of 0, 3, 6
+
+daxpy(3,2.0,a,3,b,3) ==> [3.,2.,3.,12.,5.,6.,21.]
+  dy(0) [3.0] = dy(0)[1.0] + ( da[2.0] * dx(0)[1.0] )
+  dy(3)[12.0] = dy(3)[4.0] + ( da[2.0] * dx(3)[4.0] )
+  dy(6)[21.0] = dy(6)[7.0] + ( da[2.0] * dx(6)[7.0] )
+
+or we compute 4 elements, taking every 2nd element, giving the
+index of 0, 2, 4, 6
+
+daxpy(4,2.0,a,2,b,2) ==> [3.,2.,9.,4.,15.,6.,21.]
+  dy(0) [3.0] = dy(0)[1.0] + ( da[2.0] * dx(0)[1.0] )
+  dy(2) [9.0] = dy(2)[3.0] + ( da[2.0] * dx(2)[3.0] )
+  dy(4)[15.0] = dy(4)[5.0] + ( da[2.0] * dx(4)[5.0] )
+  dy(6)[21.0] = dy(6)[7.0] + ( da[2.0] * dx(6)[7.0] )
+
+or we compute 5 elements, taking every 2nd element, which fails
+due to vector length
+
+daxpy(5,2.0,a,2,b,2) ==> [1.,2.,3.,4.,5.,6.,7.]
+
+or we compute 3 elements, taking every 2nd value, giving the 
+index of 0, 2, 4
+
+daxpy(3,2.0,a,2,b,2) ==> [3.,2.,9.,4.,15.,6.,7.]
+  dy(0) [3.0] = dy(0)[1.0] + ( da[2.0] * dx(0)[1.0] )
+  dy(2) [9.0] = dy(2)[3.0] + ( da[2.0] * dx(2)[3.0] )
+  dy(4)[15.0] = dy(4)[5.0] + ( da[2.0] * dx(4)[5.0] )
+
+or we compute 3 elements, taking every 2nd value, giving the
+index of 0, 2, 4 but with a negative multiplier
+
+daxpy(3,-2.0,a,2,b,2) ==> [- 1.,2.,- 3.,4.,- 5.,6.,7.]
+  dy(0)[-1.0] = dy(0)[1.0] + ( da[-2.0] * dx(0)[1.0] )
+  dy(2)[-3.0] = dy(2)[3.0] + ( da[-2.0] * dx(2)[3.0] )
+  dy(4)[-5.0] = dy(4)[5.0] + ( da[-2.0] * dx(4)[5.0] )
+
+or we change the lengths of the input vectors, making them unequal.
+So for the next two examples we assume the arrays look like:
+
+a:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0]]
+b:PRIMARR(DFLOAT):=[[ 1.0, 2.0, 3.0, 4.0, 5.0]]
+
+We compute 3 elements, with a negative multiplier, and different increments
+using an index for the 'a' array having values 0, 1, 2
+using an index for the 'b' array having values 0, 2, 3
+
+daxpy(3,-2.0,a,1,b,2) ==> [- 1.,2.,- 1.,4.,- 1.]
+  dy(0)[-1.0] = dy(0)[1.0] + ( da[-2.0] * dx(0)[1.0] )
+  dy(2)[-1.0] = dy(2)[3.0] + ( da[-2.0] * dx(1)[2.0] )
+  dy(4)[-1.0] = dy(4)[5.0] + ( da[-2.0] * dx(2)[3.0] )
+
+or we compute 3 elements with a multiplier of 0.0 which fails
+
+daxpy(3,0.0,a,1,b,2) ==> [1.,2.,3.,4.,5.,6.,7.]
+
 ====================================================================
 Man Page Details
 ====================================================================
@@ -1152,113 +1518,50 @@ ARGUMENTS
                Increment between elements of y.
                If incy = 0, the results will be unpredictable.
 
-NOTES
-       This  routine  is  Level  1  Basic  Linear Algebra Subprograms (Level 1
-       BLAS).
-
-       When working backward (incx < 0 or incy < 0), each  routine  starts  at
-       the end of the vector and moves backward, as follows:
-
-            x(1-incx * (n-1)), x(1-incx * (n-2)), ..., x(1)
-
-            y(1-incy * (n-1)), y(1-incy * (n-2)), ..., y(1)
-
 RETURN VALUES
        When  n <= 0, double precision alpha = 0., this routine returns immedi-
        ately with no change in its arguments.
 
 @
 
-Computes doublefloat $y \leftarrow \alpha{}x + y$
-
-Arguments are:
-\begin{itemize}
-\item n - fixnum
-\item da - doublefloat
-\item dx - array doublefloat
-\item incx - fixnum
-\item dy - array doublefloat
-\item incy - fixnum
-\end{itemize}
-
-Return values are:
-\begin{itemize}
-\item 1 nil
-\item 2 nil
-\item 3 nil
-\item 4 nil
-\item 5 nil
-\item 6 nil
-\end{itemize}
-
 <<BLAS 1 daxpy>>=
 (defun daxpy (n da dx incx dy incy)
  (declare (type (array double-float (*)) dy dx)
-          (type (double-float) da)
-          (type fixnum incy incx n))
- (f2cl-lib:with-multi-array-data
-   ((dx double-float dx-%data% dx-%offset%)
-    (dy double-float dy-%data% dy-%offset%))
-   (prog ((i 0) (ix 0) (iy 0) (m 0) (mp1 0))
-    (declare (type fixnum mp1 m iy ix i))
-     (if (<= n 0) (go end_label))
-     (if (= da 0.0) (go end_label))
-     (if (and (= incx 1) (= incy 1)) (go label20))
-     (setf ix 1)
-     (setf iy 1)
-     (if (< incx 0)
-      (setf ix
-       (f2cl-lib:int-add (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incx) 1)))
-     (if (< incy 0)
-      (setf iy
-       (f2cl-lib:int-add (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incy) 1)))
-     (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1))
-                   ((> i n) nil)
-      (tagbody
-        (setf (f2cl-lib:fref dy-%data% (iy) ((1 *)) dy-%offset%)
-         (+ (f2cl-lib:fref dy-%data% (iy) ((1 *)) dy-%offset%)
-          (* da (f2cl-lib:fref dx-%data% (ix) ((1 *)) dx-%offset%))))
-        (setf ix (f2cl-lib:int-add ix incx))
-        (setf iy (f2cl-lib:int-add iy incy))))
-     (go end_label)
- label20
-     (setf m (mod n 4))
-     (if (= m 0) (go label40))
-     (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1))
-                   ((> i m) nil)
-      (tagbody
-       (setf (f2cl-lib:fref dy-%data% (i) ((1 *)) dy-%offset%)
-        (+ (f2cl-lib:fref dy-%data% (i) ((1 *)) dy-%offset%)
-         (* da (f2cl-lib:fref dx-%data% (i) ((1 *)) dx-%offset%))))))
-     (if (< n 4) (go end_label))
- label40
-     (setf mp1 (f2cl-lib:int-add m 1))
-     (f2cl-lib:fdo (i mp1 (f2cl-lib:int-add i 4))
-                   ((> i n) nil)
-       (tagbody
-        (setf (f2cl-lib:fref dy-%data% (i) ((1 *)) dy-%offset%)
-         (+ (f2cl-lib:fref dy-%data% (i) ((1 *)) dy-%offset%)
-          (* da (f2cl-lib:fref dx-%data% (i) ((1 *)) dx-%offset%))))
-        (setf 
-         (f2cl-lib:fref dy-%data% ((f2cl-lib:int-add i 1)) ((1 *)) dy-%offset%)
-         (+ (f2cl-lib:fref 
-              dy-%data% ((f2cl-lib:int-add i 1)) ((1 *)) dy-%offset%)
-          (* da (f2cl-lib:fref
-                  dx-%data% ((f2cl-lib:int-add i 1)) ((1 *)) dx-%offset%))))
-        (setf 
-         (f2cl-lib:fref dy-%data% ((f2cl-lib:int-add i 2)) ((1 *)) dy-%offset%)
-         (+ (f2cl-lib:fref 
-              dy-%data% ((f2cl-lib:int-add i 2)) ((1 *)) dy-%offset%)
-          (* da (f2cl-lib:fref
-                  dx-%data% ((f2cl-lib:int-add i 2)) ((1 *)) dx-%offset%))))
-        (setf 
-         (f2cl-lib:fref dy-%data% ((f2cl-lib:int-add i 3)) ((1 *)) dy-%offset%)
-         (+ (f2cl-lib:fref
-              dy-%data% ((f2cl-lib:int-add i 3)) ((1 *)) dy-%offset%)
-          (* da (f2cl-lib:fref 
-                  dx-%data% ((f2cl-lib:int-add i 3)) ((1 *)) dx-%offset%))))))
- end_label
-   (return (values nil nil nil nil nil nil)))))
+          (type (double-float) da) (type fixnum incy incx n))
+  (let ((maxx (length dx)) (maxy (length dy)))
+   (declare (type fixnum maxx maxy))
+  (when (and (> n 0) (/= da 0.0) 
+             (> incx 0) (< (* (1- n) incx) maxx)
+             (> incy 0) (< (* (1- n) incy) maxy))
+   (if (and (= incx 1) (= incy 1))
+    ; unit increments
+    (dotimes (i n)
+      (declare (type fixnum i))
+        ; (format t "dy(~s)[~s] = dy(~s)[~s] + ( da[~s] * dx(~s)[~s] )~%"
+        ;  i (+ (svref dy i) (* da (svref dx i)))
+        ;  i (svref dy i) 
+        ;  da i (svref dx i))
+      (setf (the double-float (svref dy i))
+       (+ (the double-float (svref dy i))
+          (* (the double-float da)
+             (the double-float (svref dx i))))))
+    ; non-unit increments
+    (let ((ix 0) (iy 0))
+     (declare (type fixnum i ix iy))
+     (when (< incx 0) (setq ix (* (1+ (- n)) incx)))
+     (when (< incy 0) (setq ix (* (1+ (- n)) incy)))
+     (dotimes (i n)
+         ; (format t "dy(~s)[~s] = dy(~s)[~s] + ( da[~s] * dx(~s)[~s] )~%"
+         ;  iy (+ (svref dy iy) (* da (svref dx ix)))
+         ;  iy (svref dy iy) 
+         ;  da ix (svref dx ix))
+       (setf (the double-float (svref dy iy))
+        (+ (the double-float (svref dy iy))
+           (* (the double-float da)
+              (the double-float (svref dx ix)))))
+       (setq ix (+ ix incx))
+       (setq iy (+ iy incy)))))))
+  dy)
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -75388,12 +75691,12 @@ ARGUMENTS
 
 <<BLAS dcabs1>>
 <<BLAS 1 dasum>>
+<<BLAS 1 daxpy>>
 @
 <<untested>>=
 <<BLAS lsame>>
 <<BLAS xerbla>>
 
-<<BLAS 1 daxpy>>
 <<BLAS 1 dcopy>>
 <<BLAS 1 ddot>>
 <<BLAS 1 dnrm2>>
diff --git a/changelog b/changelog
index 0b90fb4..b010f81 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20100417 tpd src/axiom-website/patches.html 20100417.01.tpd.patch
+20100417 tpd src/algebra/Makefile add BLAS daxpy help and regression test
+20100417 tpd books/bookvol10.5 add BLAS daxpy
 20100407 tpd src/axiom-website/patches.html 20100407.01.tpd.patch
 20100407 tpd src/algebra/Makefile add dasum regression and help files
 20100407 tpd books/bookvol10.5 add BLAS1 dasum function
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index e95d65a..557b1dd 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -16560,7 +16560,8 @@ SPADHELP=\
  ${HELP}/XPolynomialRing.help \
  ${HELP}/ZeroDimensionalSolvePackage.help \
  ${HELP}/dcabs1.help \
- ${HELP}/dasum.help
+ ${HELP}/dasum.help \
+ ${HELP}/daxpy.help
 
 @
 The algebra files contain input chunks in regress format.
@@ -16696,7 +16697,8 @@ REGRESS= \
  XPolynomialRing.regress \
  ZeroDimensionalSolvePackage.regress \
  dcabs1.regress \
- dasum.regress
+ dasum.regress \
+ daxpy.regress
 # these requires graphics
 # TwoDimensionalViewport
 
@@ -18162,13 +18164,21 @@ ${HELP}/dcabs1.help: ${BOOKS}/bookvol10.5.pamphlet
 	@echo "dcabs1" >>${HELPFILE}
 
 ${HELP}/dasum.help: ${BOOKS}/bookvol10.5.pamphlet
-	@echo 9101 create dasum.help from ${BOOKS}/bookvol10.5.pamphlet
+	@echo 9110 create dasum.help from ${BOOKS}/bookvol10.5.pamphlet
 	@${TANGLE} -R"dasum.help" ${BOOKS}/bookvol10.5.pamphlet \
            >${HELP}/dasum.help
 	@${TANGLE} -R"dasum.input" ${BOOKS}/bookvol10.5.pamphlet \
             >${INPUT}/dasum.input
 	@echo "dasum" >>${HELPFILE}
 
+${HELP}/daxpy.help: ${BOOKS}/bookvol10.5.pamphlet
+	@echo 9120 create daxpy.help from ${BOOKS}/bookvol10.5.pamphlet
+	@${TANGLE} -R"daxpy.help" ${BOOKS}/bookvol10.5.pamphlet \
+           >${HELP}/daxpy.help
+	@${TANGLE} -R"daxpy.input" ${BOOKS}/bookvol10.5.pamphlet \
+            >${INPUT}/daxpy.input
+	@echo "daxpy" >>${HELPFILE}
+
 @
 
 \section{The Makefile}
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index c7f07bc..a29ef4c 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2625,5 +2625,7 @@ src/axiom-website/documentation.html literate programming quotes<br/>
 src/axiom-website/documentation.html fix typo<br/>
 <a href="patches/20100407.01.tpd.patch">20100407.01.tpd.patch</a>
 books/bookvol10.5 add BLAS1 dasum function<br/>
+<a href="patches/20100417.01.tpd.patch">20100417.01.tpd.patch</a>
+books/bookvol10.5 add BLAS daxpy<br/>
  </body>
 </html>
