diff --git a/books/bookvol10.5.pamphlet b/books/bookvol10.5.pamphlet
index 35828c0..ee2146c 100644
--- a/books/bookvol10.5.pamphlet
+++ b/books/bookvol10.5.pamphlet
@@ -348,7 +348,7 @@ For complex symmetric matrices, TRANSx=H is not allowed.
 )set message auto off
 )clear all
 
---S 1 of 92
+--S 1 of 96
 t1:Complex DoubleFloat := complex(1.0,0)
 --R 
 --R
@@ -356,7 +356,7 @@ t1:Complex DoubleFloat := complex(1.0,0)
 --R                                                   Type: Complex(DoubleFloat)
 --E 1
 
---S 2 of 92
+--S 2 of 96
 dcabs1(t1)
 --R 
 --R
@@ -364,7 +364,7 @@ dcabs1(t1)
 --R                                                            Type: DoubleFloat
 --E 2
 
---S 3 of 92
+--S 3 of 96
 t2:Complex DoubleFloat := complex(1.0,1.0)
 --R 
 --R
@@ -372,7 +372,7 @@ t2:Complex DoubleFloat := complex(1.0,1.0)
 --R                                                   Type: Complex(DoubleFloat)
 --E 3
 
---S 4 of 92
+--S 4 of 96
 dcabs1(t2)
 --R 
 --R
@@ -380,7 +380,7 @@ dcabs1(t2)
 --R                                                            Type: DoubleFloat
 --E 4
 
---S 5 of 92
+--S 5 of 96
 t3:Complex DoubleFloat := complex(1.0,-1.0)
 --R 
 --R
@@ -388,7 +388,7 @@ t3:Complex DoubleFloat := complex(1.0,-1.0)
 --R                                                   Type: Complex(DoubleFloat)
 --E 5
 
---S 6 of 92
+--S 6 of 96
 dcabs1(t3)
 --R 
 --R
@@ -396,7 +396,7 @@ dcabs1(t3)
 --R                                                            Type: DoubleFloat
 --E 6
 
---S 7 of 92
+--S 7 of 96
 t4:Complex DoubleFloat := complex(-1.0,-1.0)
 --R 
 --R
@@ -404,7 +404,7 @@ t4:Complex DoubleFloat := complex(-1.0,-1.0)
 --R                                                   Type: Complex(DoubleFloat)
 --E 7
 
---S 8 of 92
+--S 8 of 96
 dcabs1(t4)
 --R 
 --R
@@ -412,7 +412,7 @@ dcabs1(t4)
 --R                                                            Type: DoubleFloat
 --E 8
 
---S 9 of 92
+--S 9 of 96
 t5:Complex DoubleFloat := complex(-2.0,-2.0)
 --R 
 --R
@@ -420,7 +420,7 @@ t5:Complex DoubleFloat := complex(-2.0,-2.0)
 --R                                                   Type: Complex(DoubleFloat)
 --E 9
 
---S 10 of 92
+--S 10 of 96
 dcabs1(t5)
 --R 
 --R
@@ -430,196 +430,196 @@ dcabs1(t5)
 
 )clear all
 
---S 11 of 92 
+--S 11 of 96 
 a:PRIMARR(DFLOAT):=[ [1.0,2.0,3.0,4,0,5,0,6,0] ]
 --R
 --R   (1)  [1.,2.,3.,4.,0.,5.,0.,6.,0.]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 11
 
---S 12 of 92 
+--S 12 of 96 
 dasum(3,a,-1) -- 0.0   neg incx
 --R
 --R   (2)  0.
 --R                                                            Type: DoubleFloat
 --E 12
 
---S 13 of 92 
+--S 13 of 96 
 dasum(3,a,0) --  0.0   zero incx
 --R
 --R   (3)  0.
 --R                                                            Type: DoubleFloat
 --E 13
 
---S 14 of 92 
+--S 14 of 96 
 dasum(-1,a,1) -- 0.0   neg elements
 --R
 --R   (4)  0.
 --R                                                            Type: DoubleFloat
 --E 14
 
---S 15 of 92 
+--S 15 of 96 
 dasum(0,a,1) --  0.0   no elements
 --R
 --R   (5)  0.
 --R                                                            Type: DoubleFloat
 --E 15
 
---S 16 of 92 
+--S 16 of 96 
 dasum(1,a,1) --  1.0   1.0
 --R
 --R   (6)  1.
 --R                                                            Type: DoubleFloat
 --E 16
 
---S 17 of 92 
+--S 17 of 96 
 dasum(2,a,1) --  3.0   1.0+2.0
 --R
 --R   (7)  3.
 --R                                                            Type: DoubleFloat
 --E 17
 
---S 18 of 92 
+--S 18 of 96 
 dasum(3,a,1) --  6.0   1.0+2.0+3.0
 --R
 --R   (8)  6.
 --R                                                            Type: DoubleFloat
 --E 18
 
---S 19 of 92 
+--S 19 of 96 
 dasum(4,a,1) -- 10.0   1.0+2.0+3.0+4.0
 --R
 --R   (9)  10.
 --R                                                            Type: DoubleFloat
 --E 19
 
---S 20 of 92 
+--S 20 of 96 
 dasum(5,a,1) -- 15.0   1.0+2.0+3.0+4.0+5.0
 --R
 --R   (10)  10.
 --R                                                            Type: DoubleFloat
 --E 20
 
---S 21 of 92 
+--S 21 of 96 
 dasum(6,a,1) -- 21.0   1.0+2.0+3.0+4.0+5.0+6.0
 --R
 --R   (11)  15.
 --R                                                            Type: DoubleFloat
 --E 21
 
---S 22 of 92 
+--S 22 of 96 
 dasum(7,a,1) -- 21.0   1.0+2.0+3.0+4.0+5.0+6.0
 --R
 --R   (12)  15.
 --R                                                            Type: DoubleFloat
 --E 22
 
---S 23 of 92 
+--S 23 of 96 
 dasum(1,a,2) --  1.0   1.0
 --R
 --R   (13)  1.
 --R                                                            Type: DoubleFloat
 --E 23
 
---S 24 of 92 
+--S 24 of 96 
 dasum(2,a,2) --  4.0   1.0+3.0
 --R
 --R   (14)  4.
 --R                                                            Type: DoubleFloat
 --E 24
 
---S 25 of 92 
+--S 25 of 96 
 dasum(3,a,2) --  9.0   1.0+3.0+5.0
 --R
 --R   (15)  4.
 --R                                                            Type: DoubleFloat
 --E 25
 
---S 26 of 92 
+--S 26 of 96 
 dasum(4,a,2) --  9.0   1.0+3.0+5.0
 --R
 --R   (16)  4.
 --R                                                            Type: DoubleFloat
 --E 26
 
---S 27 of 92 
+--S 27 of 96 
 dasum(1,a,3) --  1.0   1.0
 --R
 --R   (17)  1.
 --R                                                            Type: DoubleFloat
 --E 27
 
---S 28 of 92 
+--S 28 of 96 
 dasum(2,a,3) --  5.0   1.0+4.0
 --R
 --R   (18)  5.
 --R                                                            Type: DoubleFloat
 --E 28
 
---S 29 of 92 
+--S 29 of 96 
 dasum(3,a,3) --  5.0   1.0+4.0
 --R
 --R   (19)  5.
 --R                                                            Type: DoubleFloat
 --E 29
 
---S 30 of 92 
+--S 30 of 96 
 dasum(1,a,4) --  1.0   1.0
 --R
 --R   (20)  1.
 --R                                                            Type: DoubleFloat
 --E 30
 
---S 31 of 92 
+--S 31 of 96 
 dasum(2,a,4) --  6.0   1.0+5.0
 --R
 --R   (21)  1.
 --R                                                            Type: DoubleFloat
 --E 31
 
---S 32 of 92 
+--S 32 of 96 
 dasum(3,a,4) --  6.0   1.0+5.0
 --R
 --R   (22)  1.
 --R                                                            Type: DoubleFloat
 --E 32
 
---S 33 of 92 
+--S 33 of 96 
 dasum(1,a,5) --  1.0   1.0
 --R
 --R   (23)  1.
 --R                                                            Type: DoubleFloat
 --E 33
 
---S 34 of 92 
+--S 34 of 96 
 dasum(2,a,5) --  7.0   1.0+6.0
 --R
 --R   (24)  6.
 --R                                                            Type: DoubleFloat
 --E 34
 
---S 35 of 92 
+--S 35 of 96 
 dasum(3,a,5) --  7.0   1.0+6.0
 --R
 --R   (25)  6.
 --R                                                            Type: DoubleFloat
 --E 35
 
---S 36 of 92 
+--S 36 of 96 
 dasum(1,a,6) --  1.0   1.0
 --R
 --R   (26)  1.
 --R                                                            Type: DoubleFloat
 --E 36
 
---S 37 of 92 
+--S 37 of 96 
 dasum(2,a,6) --  1.0   1.0
 --R
 --R   (27)  1.
 --R                                                            Type: DoubleFloat
 --E 37
 
---S 38 of 92 
+--S 38 of 96 
 dasum(1,a,7) --  1.0   1.0
 --R
 --R   (28)  1.
@@ -628,7 +628,7 @@ dasum(1,a,7) --  1.0   1.0
 
 )clear all
 
---S 39 of 92
+--S 39 of 96
 a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -636,7 +636,7 @@ a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 39
 
---S 40 of 92
+--S 40 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -644,7 +644,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 40
 
---S 41 of 92
+--S 41 of 96
 daxpy(3,2.0,a,1,b,1)
 --R 
 --R
@@ -652,7 +652,7 @@ daxpy(3,2.0,a,1,b,1)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 41
 
---S 42 of 92
+--S 42 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -660,7 +660,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 42
 
---S 43 of 92
+--S 43 of 96
 daxpy(7,2.0,a,1,b,1)
 --R 
 --R
@@ -668,7 +668,7 @@ daxpy(7,2.0,a,1,b,1)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 43
 
---S 44 of 92
+--S 44 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -681,7 +681,7 @@ Note that Axiom properly handles array indexes that are out of bounds.
 The BLAS daxpy routine cannot check this condition.
 \begin{chunk}{BlasLevelOne.input}
 
---S 45 of 92
+--S 45 of 96
 daxpy(8,2.0,a,1,b,1)
 --R 
 --R
@@ -689,7 +689,7 @@ daxpy(8,2.0,a,1,b,1)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 45
 
---S 46 of 92
+--S 46 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -697,7 +697,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 46
 
---S 47 of 92
+--S 47 of 96
 daxpy(3,2.0,a,3,b,3)
 --R 
 --R
@@ -705,7 +705,7 @@ daxpy(3,2.0,a,3,b,3)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 47
 
---S 48 of 92
+--S 48 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -713,7 +713,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 48
 
---S 49 of 92
+--S 49 of 96
 daxpy(4,2.0,a,2,b,2)
 --R 
 --R
@@ -721,7 +721,7 @@ daxpy(4,2.0,a,2,b,2)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 49
 
---S 50 of 92
+--S 50 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -729,7 +729,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 50
 
---S 51 of 92
+--S 51 of 96
 daxpy(5,2.0,a,2,b,2)
 --R 
 --R
@@ -737,7 +737,7 @@ daxpy(5,2.0,a,2,b,2)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 51
 
---S 52 of 92
+--S 52 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -745,7 +745,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 52
 
---S 53 of 92
+--S 53 of 96
 daxpy(3,2.0,a,2,b,2)
 --R 
 --R
@@ -753,7 +753,7 @@ daxpy(3,2.0,a,2,b,2)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 53
 
---S 54 of 92
+--S 54 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -761,7 +761,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 54
 
---S 55 of 92
+--S 55 of 96
 daxpy(3,-2.0,a,2,b,2)
 --R 
 --R
@@ -769,7 +769,7 @@ daxpy(3,-2.0,a,2,b,2)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 55
 
---S 56 of 92
+--S 56 of 96
 a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0] ]
 --R 
 --R
@@ -777,7 +777,7 @@ a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 56
 
---S 57 of 92
+--S 57 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0] ]
 --R 
 --R
@@ -785,7 +785,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 57
 
---S 58 of 92
+--S 58 of 96
 daxpy(3,-2.0,a,1,b,2)
 --R 
 --R
@@ -793,7 +793,7 @@ daxpy(3,-2.0,a,1,b,2)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 58
 
---S 59 of 92
+--S 59 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -801,7 +801,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 59
 
---S 60 of 92
+--S 60 of 96
 daxpy(3,0.0,a,1,b,2)
 --R 
 --R
@@ -811,7 +811,7 @@ daxpy(3,0.0,a,1,b,2)
 
 )clear all
 
---S 61 of 92
+--S 61 of 96
 a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R 
 --R
@@ -819,7 +819,7 @@ a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 61
 
---S 62 of 92
+--S 62 of 96
 b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R 
 --R
@@ -827,7 +827,7 @@ b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 62
 
---S 63 of 92
+--S 63 of 96
 dcopy(3,a,1,b,1)
 --R 
 --R
@@ -835,7 +835,7 @@ dcopy(3,a,1,b,1)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 63
 
---S 64 of 92
+--S 64 of 96
 b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R 
 --R
@@ -843,7 +843,7 @@ b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 64
 
---S 65 of 92
+--S 65 of 96
 dcopy(7,a,1,b,1)
 --R 
 --R
@@ -851,7 +851,7 @@ dcopy(7,a,1,b,1)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 65
 
---S 66 of 92
+--S 66 of 96
 b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R 
 --R
@@ -859,7 +859,7 @@ b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 66
 
---S 67 of 92
+--S 67 of 96
 dcopy(8,a,1,b,1)
 --R 
 --R
@@ -867,7 +867,7 @@ dcopy(8,a,1,b,1)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 67
 
---S 68 of 92
+--S 68 of 96
 b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R 
 --R
@@ -875,7 +875,7 @@ b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 68
 
---S 69 of 92
+--S 69 of 96
 dcopy(3,a,3,b,3)
 --R 
 --R
@@ -883,7 +883,7 @@ dcopy(3,a,3,b,3)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 69
 
---S 70 of 92
+--S 70 of 96
 b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R 
 --R
@@ -891,7 +891,7 @@ b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 70
 
---S 71 of 92
+--S 71 of 96
 dcopy(4,a,2,b,2)
 --R 
 --R
@@ -899,7 +899,7 @@ dcopy(4,a,2,b,2)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 71
 
---S 72 of 92
+--S 72 of 96
 b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R 
 --R
@@ -907,7 +907,7 @@ b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 72
 
---S 73 of 92
+--S 73 of 96
 dcopy(5,a,2,b,2)
 --R 
 --R
@@ -915,7 +915,7 @@ dcopy(5,a,2,b,2)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 73
 
---S 74 of 92
+--S 74 of 96
 b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R 
 --R
@@ -923,7 +923,7 @@ b:PRIMARR(DFLOAT):=[ [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 74
 
---S 75 of 92
+--S 75 of 96
 dcopy(3,a,2,b,2)
 --R 
 --R
@@ -931,7 +931,7 @@ dcopy(3,a,2,b,2)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 75
 
---S 76 of 92
+--S 76 of 96
 a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0] ]
 --R 
 --R
@@ -939,7 +939,7 @@ a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 76
 
---S 77 of 92
+--S 77 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0] ]
 --R 
 --R
@@ -947,7 +947,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 77
 
---S 78 of 92
+--S 78 of 96
 dcopy(3,a,1,b,1)
 --R 
 --R
@@ -955,7 +955,7 @@ dcopy(3,a,1,b,1)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 78
 
---S 79 of 92
+--S 79 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0] ]
 --R 
 --R
@@ -963,7 +963,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 79
 
---S 80 of 92
+--S 80 of 96
 dcopy(3,a,1,b,2)
 --R 
 --R
@@ -971,7 +971,7 @@ dcopy(3,a,1,b,2)
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 80
 
---S 81 of 92
+--S 81 of 96
 a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0] ]
 --R 
 --R
@@ -979,7 +979,7 @@ a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 81
 
---S 82 of 92
+--S 82 of 96
 b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0] ]
 --R 
 --R
@@ -987,7 +987,7 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0] ]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 82
 
---S 83 of 92
+--S 83 of 96
 dcopy(5,a,1,b,1)
 --R 
 --R
@@ -997,69 +997,99 @@ dcopy(5,a,1,b,1)
 
 )clear all
 
---S 84 of 92
+--S 84 of 96
 a:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0] ]
 --R
 --R   (1)  [1.,2.,3.,4.,5.]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 84
 
---S 85 of 92
+--S 85 of 96
 b:PRIMARR(DFLOAT):=[ [ 5.0, 6.0, 7.0, 8.0, 9.0] ]
 --R
 --R   (2)  [5.,6.,7.,8.,9.]
 --R                                            Type: PrimitiveArray(DoubleFloat)
 --E 85
 
---S 86 of 92
+--S 86 of 96
 ddot(0,a,1,b,1)
 --R
 --R   (3)  0.
 --R                                                            Type: DoubleFloat
 --E 86
 
---S 87 of 92
+--S 87 of 96
 ddot(3,a,1,b,1)
 --R
 --R   (4)  38.
 --R                                                            Type: DoubleFloat
 --E 87
 
---S 88 of 92
+--S 88 of 96
 ddot(3,a,1,b,2)
 --R
 --R   (5)  46.
 --R                                                            Type: DoubleFloat
 --E 88
 
---S 89 of 92
+--S 89 of 96
 ddot(3,a,2,b,1)
 --R
 --R   (6)  58.
 --R                                                            Type: DoubleFloat
 --E 89
 
---S 90 of 92
+--S 90 of 96
 ddot(3,a,1,b,-2)
 --R
 --R   (7)  38.
 --R                                                            Type: DoubleFloat
 --E 90
 
---S 91 of 92
+--S 91 of 96
 ddot(3,a,-2,b,1)
 --R
 --R   (8)  50.
 --R                                                            Type: DoubleFloat
 --E 91
 
---S 92 of 92
+--S 92 of 96
 ddot(3,a,-2,b,-2)
 --R
 --R   (9)  71.
 --R                                                            Type: DoubleFloat
 --E 92
 
+)clear all
+
+--S 93 of 96
+a:PRIMARR(DFLOAT):=[ [ 3.0, -4.0, 5.0, -7.0, 9.0] ]
+--R
+--R   (1)  [3.,- 4.,5.,- 7.,9.]
+--R                                            Type: PrimitiveArray(DoubleFloat)
+--E 93
+
+--S 94 of 96
+dnrm2(3,a,1)
+--R
+--R   (2)  7.0710678118654755
+--R                                                            Type: DoubleFloat
+--E 94
+
+--S 95 of 96
+dnrm2(5,a,1)
+--R
+--R   (3)  13.416407864998739
+--R                                                            Type: DoubleFloat
+--E 95
+
+--S 96 of 96
+dnrm2(3,a,2)
+--R
+--R   (4)  10.72380529476361
+--R                                                            Type: DoubleFloat
+--E 96
+
 )spool
 )lisp (bye)
 \end{chunk}
@@ -1183,6 +1213,14 @@ BlasLevelOne() : Exports == Implementation where
       ++X ddot(2,a,-2,b,1) -- increment = -2 in a (5,3,1) * (5,6,7) ==> 50.0
       ++X ddot(3,a,-2,b,-2) -- (5,3,1) * (9,7,5) ==> 71.0
 
+    dnrm2: (SI, DX, SI) -> DF
+      ++ dnrm2 takes the norm of the vector, ||x||
+      ++
+      ++X a:PRIMARR(DFLOAT):=[ [3.0, -4.0, 5.0, -7.0, 9.0] ]
+      ++X dnrm2(3,a,1) -- 7.0710678118654755 = sqrt(3.0^2 + -4.0^2 + 5.0^2)
+      ++X dnrm2(5,a,1) -- 13.416407864998739 = sqrt(180.0)
+      ++X dnrm2(3,a,2) -- 10.72380529476361  = sqrt(115.0)
+
   Implementation  == add
 
       dcabs1(z:CDF):DF == 
@@ -1195,6 +1233,8 @@ BlasLevelOne() : Exports == Implementation where
         DCOPY(n,dx,incx,dy,incy)$Lisp
       ddot(n:SI,dx:DX,incx:SI,dy:DX,incy:SI):DF ==
         DDOT(n,dx,incx,dy,incy)$Lisp
+      dnrm2(n:SI,dx:DX,incx:SI):DF ==
+        DNRM2(n,dx,incx)$Lisp
 
 \end{chunk}
 \begin{chunk}{BLAS1.dotabb}
@@ -1402,7 +1442,9 @@ c NEW
 \end{chunk}
 
 \begin{chunk}{BLAS 1 dcabs1}
+(declaim (ftype (function (cons) double-float) dcabs1))
 (defun dcabs1 (z)
+ ; Tim Daly April 23, 2012
  "Complex(DoubleFloat) z is a pair where (realpart . imaginarypart).
   The result is a DoubleFloat (+ (abs (realpart z)) (abs (imagpart z)))"
  (the double-float
@@ -2155,7 +2197,10 @@ c
 \end{chunk}
 
 \begin{chunk}{BLAS 1 dasum}
+(declaim (ftype (function (fixnum (simple-array double-float (*)) fixnum)
+                          double-float) dasum))
 (defun dasum (n dx incx)
+ ; Tim Daly April 24, 2012
  (declare (type (simple-array double-float (*)) dx) (type fixnum incx n))
  (let ((dasum 0.0) (maxlen (length dx)))
   (declare (type (double-float) dasum) (type fixnum maxlen))
@@ -2653,7 +2698,12 @@ gcc -o daxpyEx daxpyEX.f -lgfortran daxpy.o
 \end{chunk}
 
 \begin{chunk}{BLAS 1 daxpy}
+(declaim (ftype (function (fixnum double-float
+                                  (simple-array double-float (*)) fixnum
+                                  (simple-array double-float (*)) fixnum)
+                 (simple-array double-float (*))) daxpy))
 (defun daxpy (n da dx incx dy incy)
+ ; Tim Daly April 24, 2012
  (declare (type (simple-array double-float) dx dy)
           (type double-float da) (type fixnum incy incx n))
   (let ((maxx (length dx)) (maxy (length dy)))
@@ -3137,7 +3187,11 @@ gcc -o dcopyEx dcopyEX.f -lgfortran dcopy.o
 \end{chunk}
 
 \begin{chunk}{BLAS 1 dcopy}
+(declaim (ftype (function (fixnum (simple-array double-float (*)) fixnum
+                                  (simple-array double-float (*)) fixnum)
+                 (simple-array double-float (*))) dcopy))
 (defun dcopy (n dx incx dy incy)
+ ; Tim Daly April 27, 2012
  (declare (type (simple-array double-float) dy dx)
           (type fixnum incy incx n))
   (let ((maxx (length dx)) (maxy (length dy)))
@@ -3406,7 +3460,7 @@ gcc -o ddotEx ddotEX.f -lgfortran ddot.o
        b = (/ 5.0D0, 6.0D0, 7.0D0, 8.0D0, 9.0D0 /)
        write(6,100)a(1),a(2),a(3),a(4),a(5)
  100   format("a=(/",f6.3," ",f6.3," ",f6.3," ",f6.3," ",f6.3,"/)")
-       write(6,100)b(1),b(2),b(3),b(4),b(5)
+       write(6,101)b(1),b(2),b(3),b(4),b(5)
  101   format("b=(/",f6.3," ",f6.3," ",f6.3," ",f6.3," ",f6.3,"/)")
 
 * handle 0 elements
@@ -3453,6 +3507,7 @@ gcc -o ddotEx ddotEX.f -lgfortran ddot.o
                                   (simple-array double-float (*)) fixnum)
                  double-float) ddot))
 (defun ddot (n dx incx dy incy)
+ ; Tim Daly April 27, 2012
  (declare (optimize (speed 3) (safety 0))
           (type (simple-array double-float (*)) dx dy)
           (type fixnum incy incx n))
@@ -3500,6 +3555,34 @@ gcc -o ddotEx ddotEX.f -lgfortran ddot.o
 )set message auto off
 )clear all
 
+--S 1 of 4
+a:PRIMARR(DFLOAT):=[ [ 3.0, -4.0, 5.0, -7.0, 9.0] ]
+--R
+--R   (1)  [3.,- 4.,5.,- 7.,9.]
+--R                                            Type: PrimitiveArray(DoubleFloat)
+--E 1
+
+--S 2 of 4
+dnrm2(3,a,1)
+--R
+--R   (2)  7.0710678118654755
+--R                                                            Type: DoubleFloat
+--E 2
+
+--S 3 of 4
+dnrm2(5,a,1)
+--R
+--R   (3)  13.416407864998739
+--R                                                            Type: DoubleFloat
+--E 3
+
+--S 4 of 4
+dnrm2(3,a,2)
+--R
+--R   (4)  10.72380529476361
+--R                                                            Type: DoubleFloat
+--E 4
+
 )spool
 )lisp (bye)
 \end{chunk}
@@ -3508,6 +3591,25 @@ gcc -o ddotEx ddotEX.f -lgfortran ddot.o
 dnrm2 examples
 ====================================================================
 
+DNRM2 is a BLAS level one which computes the Euclidean norm of a vector.
+
+Given the vector [ 3.0, -4.0, 5.0, -7.0, 9.0 ]
+
+dnrm2(3,a,1)
+   = sqrt(3.0^2 + -4.0^2 + 5.0^2) 
+   = sqrt(50.0)
+   = 7.0710678118654755
+
+dnrm2(5,a,1) 
+   = sqrt(3.0^2 + -4.0^2 + 5.0^2 + -7.0^2 + 9.0^2) 
+   = sqrt(180.0)
+   = 13.416407864998739
+
+dnrm2(3,a,2)
+   = sqrt(3.0^2 + 5.0^2 + 9.0^2) 
+   = sqrt(115.0)
+   = 10.72380529476361
+
 ====================================================================
 Man Page Details
 ====================================================================
@@ -3620,49 +3722,89 @@ NOTES
 
 \end{chunk}
 
-\begin{chunk}{BLAS 1 dnrm2}
-(let* ((one 1.0) (zero 0.0))
-  (declare (type (double-float 1.0 1.0) one)
-           (type (double-float 0.0 0.0) zero))
-  (defun dnrm2 (n x incx)
-    (declare (type (simple-array double-float (*)) x)
-             (type fixnum incx n))
-    (f2cl-lib:with-multi-array-data
-        ((x double-float x-%data% x-%offset%))
-      (prog ((absxi 0.0) (norm 0.0) (scale 0.0) (ssq 0.0) (ix 0) (dnrm2 0.0))
-        (declare (type fixnum ix)
-                 (type (double-float) absxi norm scale ssq dnrm2))
-        (cond
-          ((or (< n 1) (< incx 1))
-           (setf norm zero))
-          ((= n 1)
-           (setf norm (abs (f2cl-lib:fref x-%data% (1) ((1 *)) x-%offset%))))
-          (t
-           (setf scale zero)
-           (setf ssq one)
-           (f2cl-lib:fdo (ix 1 (f2cl-lib:int-add ix incx))
-                         ((> ix
-                             (f2cl-lib:int-add 1
-                                               (f2cl-lib:int-mul
-                                                (the fixnum (1- n)) incx)))
-                          nil)
-             (tagbody
-               (cond
-                 ((/= (f2cl-lib:fref x (ix) ((1 *))) zero)
-                  (setf absxi
-                          (abs
-                           (f2cl-lib:fref x-%data% (ix) ((1 *)) x-%offset%)))
-                  (cond
-                    ((< scale absxi)
-                     (setf ssq (+ one (* ssq (expt (/ scale absxi) 2))))
-                     (setf scale absxi))
-                    (t
-                     (setf ssq (+ ssq (expt (/ absxi scale) 2)))))))))
-           (setf norm (* scale (f2cl-lib:fsqrt ssq)))))
-        (setf dnrm2 norm)
- end_label
-        (return (values dnrm2 nil nil nil))))))
+Compile with
+\begin{verbatim}
+gcc -c dnrm2.f
+gcc -o dnrm2Ex dnrm2EX.f -lgfortran dnrm2.o
+\end{verbatim}
+
+\begin{chunk}{dnrm2 example}
+       program dnrm2EX
+*      Tim Daly April 28, 2012
+*      unit tests for BLAS dnrm2
+       double precision a(5)
+       double precision c
+       a = (/ 3.0D0, -4.0D0, 5.0D0, -7.0D0, 9.0D0/)
+       write(6,100)a(1),a(2),a(3)
+ 100   format("a=(/",f6.3," ",f6.3," ",f6.3"/)")
+
+       c=dnrm2(3,a,1)
+       write(6,200)c
+ 200   format(/,"t200 is sqrt(50.0)=7.071",/,"c=",f6.3)
+
+       c=dnrm2(5,a,1)
+       write(6,201)c
+ 201   format(/,"t201 is sqrt(180.0)=13.416",/,"c=",f6.3)
 
+       c=dnrm2(3,a,2)
+       write(6,202)c
+ 202   format(/,"t202 is sqrt(115.0)=10.724",/,"c=",f9.3)
+
+       stop
+       end 
+\end{chunk}
+
+\begin{chunk}{BLAS 1 dnrm2}
+(declaim (ftype (function (fixnum (simple-array double-float (*)) fixnum)
+                 double-float) dnrm2))
+(defun dnrm2 (n x incx)
+ ; Tim Daly April 28, 2012
+ (declare (type (simple-array double-float (*)) x) (type fixnum incx n))
+ (let ((absxi 0.0d0) (norm 0.0d0) (scale 0.0d0) (ssq 0.0d0)
+       (limit 0) (t1 0.0D0))
+  (declare (type fixnum limit) (type double-float absxi norm scale ssq t1))
+  (cond
+   ((or (< n 1) (< incx 1)) (setf norm 0.0d0))
+   ((= n 1)                 (setf norm (abs (aref x 0))))
+   (t
+    (setf limit (min (* (- n 1) incx) (1- (length x))))
+    (do ((ix 0 (+ ix incx)))
+        ((> ix limit) nil)
+      (unless (= 0.0d0 (the double-float (aref x ix)))
+       (setf absxi (the double-float (abs (the double-float (aref x ix)))))
+       (cond
+         ((< scale absxi)
+           (setf t1 (the double-float
+                     (/ (the double-float scale) (the double-float absxi))))
+           (setf ssq 
+            (the double-float 
+             (+ 1.0d0 
+              (the double-float
+               (* (the double-float ssq) 
+                  (the double-float 
+                   (* (the double-float t1) (the double-float t1))))))))
+           (setf scale absxi))
+         (t
+           (setf t1 (the double-float
+                     (/ (the double-float absxi) (the double-float scale))))
+           (setf ssq 
+            (the double-float 
+             (+ (the double-float ssq)
+                (the double-float 
+                 (* (the double-float t1) (the double-float t1))))))))))
+     (setf norm (the double-float (* scale (the double-float (sqrt ssq)))))))
+    norm))
+
+\end{chunk}
+
+\begin{chunk}{BLAS 1 dnrm2 lisp test}
+(setq a (vector 3.0D0 -4.0D0 5.0D0 -7.0D0 9.0D0))
+; sqrt(50.0)  = 7.0710678118654755
+(dnrm2 3 a 1)
+; sqrt(180.0) = 13.416407864998739
+(dnrm2 5 a 1)
+; sqrt(115.0) = 10.72380529476361
+(dnrm2 3 a 2)
 \end{chunk}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{drotg BLAS}
@@ -136628,12 +136770,12 @@ Warning:  Types of argument 1 in call to ZLARFB do not match.
 \getchunk{BLAS 1 daxpy}
 \getchunk{BLAS 1 dcopy}
 \getchunk{BLAS 1 ddot}
+\getchunk{BLAS 1 dnrm2}
 \end{chunk}
 \begin{chunk}{untested}
 \getchunk{BLAS lsame}
 \getchunk{BLAS xerbla}
 
-\getchunk{BLAS 1 dnrm2}
 \getchunk{BLAS 1 drotg}
 \getchunk{BLAS 1 drot}
 \getchunk{BLAS 1 dscal}
diff --git a/changelog b/changelog
index 6082cc8..94a7379 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20120429 tpd src/axiom-website/patches.html 20120429.01.tpd.patch
+20120429 tpd books/bookvol10.5 BLAS1 dnrm2
 20120428 tpd src/axiom-website/patches.html 20120428.01.tpd.patch
 20120428 tpd books/bookvolbib fix typo
 20120428 tpd books/bookvol10.5 BLAS1 ddot 
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index ce8178b..ef8a85c 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3894,5 +3894,7 @@ books/bookvol10.5 BLAS1 daxpy test cases<br/>
 books/bookvol10.5 BLAS1 dcopy test cases<br/>
 <a href="patches/20120428.01.tpd.patch">20120428.01.tpd.patch</a>
 books/bookvol10.5 BLAS1 ddot <br/>
+<a href="patches/20120429.01.tpd.patch">20120429.01.tpd.patch</a>
+books/bookvol10.5 BLAS1 dnrm2<br/>
  </body>
 </html>
