diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index 5497719..d80c974 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -18994,6 +18994,322 @@ Complex(R:CommutativeRing): ComplexCategory(R) with
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{domain CDFMAT ComplexDoubleFloatMatrix}
+<<ComplexDoubleFloatMatrix.input>>=
+)set break resume
+)sys rm -f ComplexDoubleFloatMatrix.output
+)spool ComplexDoubleFloatMatrix.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 6
+)show ComplexDoubleFloatMatrix
+--R ComplexDoubleFloatMatrix  is a domain constructor
+--R Abbreviation for ComplexDoubleFloatMatrix is CDFMAT 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.3.pamphlet to see algebra source code for CDFMAT 
+--R
+--R------------------------------- Operations --------------------------------
+--R ?*? : (Integer,%) -> %                ?*? : (%,%) -> %
+--R ?+? : (%,%) -> %                      -? : % -> %
+--R ?-? : (%,%) -> %                      antisymmetric? : % -> Boolean
+--R copy : % -> %                         diagonal? : % -> Boolean
+--R diagonalMatrix : List % -> %          empty : () -> %
+--R empty? : % -> Boolean                 eq? : (%,%) -> Boolean
+--R horizConcat : (%,%) -> %              maxColIndex : % -> Integer
+--R maxRowIndex : % -> Integer            minColIndex : % -> Integer
+--R minRowIndex : % -> Integer            ncols : % -> NonNegativeInteger
+--R nrows : % -> NonNegativeInteger       qnew : (Integer,Integer) -> %
+--R sample : () -> %                      square? : % -> Boolean
+--R squareTop : % -> %                    symmetric? : % -> Boolean
+--R transpose : % -> %                    vertConcat : (%,%) -> %
+--R #? : % -> NonNegativeInteger if $ has finiteAggregate
+--R ?*? : (ComplexDoubleFloatVector,%) -> ComplexDoubleFloatVector
+--R ?*? : (%,ComplexDoubleFloatVector) -> ComplexDoubleFloatVector
+--R ?*? : (%,Complex DoubleFloat) -> %
+--R ?*? : (Complex DoubleFloat,%) -> %
+--R ?**? : (%,Integer) -> % if Complex DoubleFloat has FIELD
+--R ?**? : (%,NonNegativeInteger) -> %
+--R ?/? : (%,Complex DoubleFloat) -> % if Complex DoubleFloat has FIELD
+--R ?=? : (%,%) -> Boolean if Complex DoubleFloat has SETCAT
+--R any? : ((Complex DoubleFloat -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R coerce : ComplexDoubleFloatVector -> %
+--R coerce : % -> OutputForm if Complex DoubleFloat has SETCAT
+--R column : (%,Integer) -> ComplexDoubleFloatVector
+--R columnSpace : % -> List ComplexDoubleFloatVector if Complex DoubleFloat has EUCDOM
+--R count : (Complex DoubleFloat,%) -> NonNegativeInteger if $ has finiteAggregate and Complex DoubleFloat has SETCAT
+--R count : ((Complex DoubleFloat -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate
+--R determinant : % -> Complex DoubleFloat if Complex DoubleFloat has commutative *
+--R diagonalMatrix : List Complex DoubleFloat -> %
+--R elt : (%,List Integer,List Integer) -> %
+--R elt : (%,Integer,Integer,Complex DoubleFloat) -> Complex DoubleFloat
+--R elt : (%,Integer,Integer) -> Complex DoubleFloat
+--R eval : (%,List Complex DoubleFloat,List Complex DoubleFloat) -> % if Complex DoubleFloat has EVALAB COMPLEX DFLOAT and Complex DoubleFloat has SETCAT
+--R eval : (%,Complex DoubleFloat,Complex DoubleFloat) -> % if Complex DoubleFloat has EVALAB COMPLEX DFLOAT and Complex DoubleFloat has SETCAT
+--R eval : (%,Equation Complex DoubleFloat) -> % if Complex DoubleFloat has EVALAB COMPLEX DFLOAT and Complex DoubleFloat has SETCAT
+--R eval : (%,List Equation Complex DoubleFloat) -> % if Complex DoubleFloat has EVALAB COMPLEX DFLOAT and Complex DoubleFloat has SETCAT
+--R every? : ((Complex DoubleFloat -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R exquo : (%,Complex DoubleFloat) -> Union(%,"failed") if Complex DoubleFloat has INTDOM
+--R fill! : (%,Complex DoubleFloat) -> %
+--R hash : % -> SingleInteger if Complex DoubleFloat has SETCAT
+--R inverse : % -> Union(%,"failed") if Complex DoubleFloat has FIELD
+--R latex : % -> String if Complex DoubleFloat has SETCAT
+--R less? : (%,NonNegativeInteger) -> Boolean
+--R listOfLists : % -> List List Complex DoubleFloat
+--R map : (((Complex DoubleFloat,Complex DoubleFloat) -> Complex DoubleFloat),%,%,Complex DoubleFloat) -> %
+--R map : (((Complex DoubleFloat,Complex DoubleFloat) -> Complex DoubleFloat),%,%) -> %
+--R map : ((Complex DoubleFloat -> Complex DoubleFloat),%) -> %
+--R map! : ((Complex DoubleFloat -> Complex DoubleFloat),%) -> %
+--R matrix : List List Complex DoubleFloat -> %
+--R member? : (Complex DoubleFloat,%) -> Boolean if $ has finiteAggregate and Complex DoubleFloat has SETCAT
+--R members : % -> List Complex DoubleFloat if $ has finiteAggregate
+--R minordet : % -> Complex DoubleFloat if Complex DoubleFloat has commutative *
+--R more? : (%,NonNegativeInteger) -> Boolean
+--R new : (NonNegativeInteger,NonNegativeInteger,Complex DoubleFloat) -> %
+--R nullSpace : % -> List ComplexDoubleFloatVector if Complex DoubleFloat has INTDOM
+--R nullity : % -> NonNegativeInteger if Complex DoubleFloat has INTDOM
+--R parts : % -> List Complex DoubleFloat
+--R pfaffian : % -> Complex DoubleFloat if Complex DoubleFloat has COMRING
+--R qelt : (%,Integer,Integer) -> Complex DoubleFloat
+--R qsetelt! : (%,Integer,Integer,Complex DoubleFloat) -> Complex DoubleFloat
+--R rank : % -> NonNegativeInteger if Complex DoubleFloat has INTDOM
+--R row : (%,Integer) -> ComplexDoubleFloatVector
+--R rowEchelon : % -> % if Complex DoubleFloat has EUCDOM
+--R scalarMatrix : (NonNegativeInteger,Complex DoubleFloat) -> %
+--R setColumn! : (%,Integer,ComplexDoubleFloatVector) -> %
+--R setRow! : (%,Integer,ComplexDoubleFloatVector) -> %
+--R setelt : (%,List Integer,List Integer,%) -> %
+--R setelt : (%,Integer,Integer,Complex DoubleFloat) -> Complex DoubleFloat
+--R setsubMatrix! : (%,Integer,Integer,%) -> %
+--R size? : (%,NonNegativeInteger) -> Boolean
+--R subMatrix : (%,Integer,Integer,Integer,Integer) -> %
+--R swapColumns! : (%,Integer,Integer) -> %
+--R swapRows! : (%,Integer,Integer) -> %
+--R transpose : ComplexDoubleFloatVector -> %
+--R zero : (NonNegativeInteger,NonNegativeInteger) -> %
+--R ?~=? : (%,%) -> Boolean if Complex DoubleFloat has SETCAT
+--R
+--E 1
+ 
+--S 2 of 6
+a:CDFMAT:=qnew(2,3)
+--R
+--R        +0.  0.  0.+
+--R   (1)  |          |
+--R        +0.  0.  0.+
+--R                                               Type: ComplexDoubleFloatMatrix
+--E 2
+
+--S 3 of 6
+qsetelt!(a,1,1,1.0+2*%i)
+--R
+--R   (2)  1. + 2. %i
+--R                                                    Type: Complex DoubleFloat
+--E 3
+
+--S 4 of 6
+a
+--R
+--R        +0.      0.      0.+
+--R   (3)  |                  |
+--R        +0.  1. + 2. %i  0.+
+--R                                               Type: ComplexDoubleFloatMatrix
+--E 4
+
+--S 5 of 6
+qsetelt!(a,0,0,2.0+4*%i)
+--R
+--R   (4)  2. + 4. %i
+--R                                                    Type: Complex DoubleFloat
+--E 5
+
+--S 6 of 6
+a
+--R
+--R        +2. + 4. %i      0.      0.+
+--R   (5)  |                          |
+--R        +    0.      1. + 2. %i  0.+
+--R                                               Type: ComplexDoubleFloatMatrix
+--E 6
+
+)spool
+)lisp (bye)
+
+@
+
+<<ComplexDoubleFloatMatrix.help>>=
+====================================================================
+ComplexDoubleFloatMatrix examples
+====================================================================
+This domain creates a lisp simple array of machine doublefloats.
+It provides one new function called qnew which takes an integer
+that gives the array length.
+
+NOTE: Unlike normal Axiom arrays the ComplexDoubleFloatMatrix arrays
+are 0-based so the first element is 0. Axiom arrays normally
+start at 1.
+
+a:CDFMAT:=qnew(2,3)
+        +0.  0.  0.+
+        |          |
+        +0.  0.  0.+
+
+qsetelt!(a,1,1,1.0+2*%i)
+        1. + 2. %i
+
+a
+        +0.      0.      0.+
+        |                  |
+        +0.  1. + 2. %i  0.+
+
+qsetelt!(a,0,0,2.0+4*%i)
+        2. + 4. %i
+
+a
+        +2. + 4. %i      0.      0.+
+        |                          |
+        +    0.      1. + 2. %i  0.+
+
+See Also:
+o )help Float
+o )help DoubleFloat
+o )show ComplexDoubleFloatMatrix
+
+@
+\pagehead{ComplexDoubleFloatMatrix}{CDFMAT}
+\pagepic{ps/v103complexdoublefloatmatrix.eps}{CDFMAT}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{CDFMAT}{\#?} &
+\cross{CDFMAT}{-?} &
+\cross{CDFMAT}{?**?} &
+\cross{CDFMAT}{?*?} \\
+\cross{CDFMAT}{?+?} &
+\cross{CDFMAT}{?-?} &
+\cross{CDFMAT}{?/?} &
+\cross{CDFMAT}{?=?} \\
+\cross{CDFMAT}{?\~{}=?} &
+\cross{CDFMAT}{antisymmetric?} &
+\cross{CDFMAT}{any?} &
+\cross{CDFMAT}{coerce} \\
+\cross{CDFMAT}{column} &
+\cross{CDFMAT}{columnSpace} &
+\cross{CDFMAT}{copy} &
+\cross{CDFMAT}{count} \\
+\cross{CDFMAT}{determinant} &
+\cross{CDFMAT}{diagonal?} &
+\cross{CDFMAT}{diagonalMatrix} &
+\cross{CDFMAT}{elt} \\
+\cross{CDFMAT}{empty} &
+\cross{CDFMAT}{empty?} &
+\cross{CDFMAT}{eq?} &
+\cross{CDFMAT}{eval} \\
+\cross{CDFMAT}{every?} &
+\cross{CDFMAT}{exquo} &
+\cross{CDFMAT}{fill!} &
+\cross{CDFMAT}{hash} \\
+\cross{CDFMAT}{horizConcat} &
+\cross{CDFMAT}{inverse} &
+\cross{CDFMAT}{latex} &
+\cross{CDFMAT}{less?} \\
+\cross{CDFMAT}{listOfLists} &
+\cross{CDFMAT}{map} &
+\cross{CDFMAT}{map!} &
+\cross{CDFMAT}{matrix} \\
+\cross{CDFMAT}{maxColIndex} &
+\cross{CDFMAT}{maxRowIndex} &
+\cross{CDFMAT}{member?} &
+\cross{CDFMAT}{members} \\
+\cross{CDFMAT}{minColIndex} &
+\cross{CDFMAT}{minRowIndex} &
+\cross{CDFMAT}{minordet} &
+\cross{CDFMAT}{more?} \\
+\cross{CDFMAT}{ncols} &
+\cross{CDFMAT}{new} &
+\cross{CDFMAT}{nrows} &
+\cross{CDFMAT}{nullSpace} \\
+\cross{CDFMAT}{nullity} &
+\cross{CDFMAT}{parts} &
+\cross{CDFMAT}{pfaffian} &
+\cross{CDFMAT}{qelt} \\
+\cross{CDFMAT}{qnew} &
+\cross{CDFMAT}{qsetelt!} &
+\cross{CDFMAT}{rank} &
+\cross{CDFMAT}{row} \\
+\cross{CDFMAT}{rowEchelon} &
+\cross{CDFMAT}{sample} &
+\cross{CDFMAT}{scalarMatrix} &
+\cross{CDFMAT}{setColumn!} \\
+\cross{CDFMAT}{setRow!} &
+\cross{CDFMAT}{setelt} &
+\cross{CDFMAT}{setsubMatrix!} &
+\cross{CDFMAT}{size?} \\
+\cross{CDFMAT}{square?} &
+\cross{CDFMAT}{squareTop} &
+\cross{CDFMAT}{subMatrix} &
+\cross{CDFMAT}{swapColumns!} \\
+\cross{CDFMAT}{swapRows!} &
+\cross{CDFMAT}{symmetric?} &
+\cross{CDFMAT}{transpose} &
+\cross{CDFMAT}{vertConcat} \\
+\cross{CDFMAT}{zero} &&&
+\end{tabular}
+
+<<domain CDFMAT ComplexDoubleFloatMatrix>>=
+)abbrev domain CDFMAT ComplexDoubleFloatMatrix
+++ Author: Waldek Hebisch
+++ Description: This is a low-level domain which implements matrices
+++ (two dimensional arrays) of complex double precision floating point
+++ numbers.  Indexing is 0 based, there is no bound checking (unless
+++ provided by lower level).
+
+ComplexDoubleFloatMatrix : MatrixCategory(Complex DoubleFloat,
+                         ComplexDoubleFloatVector,
+                         ComplexDoubleFloatVector) with
+    qnew : (Integer, Integer) -> %
+      ++ qnew(n, m) creates a new uninitialized n by m matrix.
+      ++
+      ++X t1:CDFMAT:=qnew(3,4)
+
+  == add
+
+    NNI ==> Integer
+    Qelt2 ==> CDAREF2$Lisp
+    Qsetelt2 ==> CDSETAREF2$Lisp
+    Qnrows ==> CDANROWS$Lisp
+    Qncols ==> CDANCOLS$Lisp
+    Qnew ==> MAKE_-CDOUBLE_-MATRIX$Lisp
+    
+    minRowIndex x == 0
+    minColIndex x == 0
+    nrows x == Qnrows(x)
+    ncols x == Qncols(x)
+    maxRowIndex x == Qnrows(x) - 1
+    maxColIndex x == Qncols(x) - 1
+
+    qelt(m, i, j) == Qelt2(m, i, j)
+    qsetelt_!(m, i, j, r) == Qsetelt2(m, i, j, r)
+
+    empty() == Qnew(0$Integer, 0$Integer)
+    qnew(rows, cols) == Qnew(rows, cols)
+    new(rows, cols, a) ==
+        res := Qnew(rows, cols)
+        for i in 0..(rows - 1) repeat
+            for j in 0..(cols - 1) repeat
+                Qsetelt2(res, i, j, a)
+        res
+
+@
+<<CDFMAT.dotabb>>=
+"CDFMAT" [color="#88FF44",href="bookvol10.3.pdf#nameddest=CDFMAT",
+          shape=ellipse]
+"COMPCAT" [color=lightblue,href="bookvol10.2.pdf#nameddest=COMPCAT"];
+"CDFMAT" -> "COMPCAT"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{domain CDFVEC ComplexDoubleFloatVector}
 <<ComplexDoubleFloatVector.input>>=
 )set break resume
@@ -149051,6 +149367,7 @@ Note that this code is not included in the generated catdef.spad file.
 <<domain COLOR Color>>
 <<domain COMM Commutator>>
 <<domain COMPLEX Complex>>
+<<domain CDFMAT ComplexDoubleFloatMatrix>>
 <<domain CDFVEC ComplexDoubleFloatVector>>
 <<domain CONTFRAC ContinuedFraction>>
 
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 06adeb0..954e3af 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -23889,6 +23889,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|CommonDenominator| . CDEN)
    (|Commutator| . COMM)
    (|Complex| . COMPLEX)
+   (|ComplexDoubleFloatMatrix| . CDFMAT)
    (|ComplexDoubleFloatVector| . CDFVEC)
    (|ComplexFactorization| . COMPFACT)
    (|ComplexFunctions2| . COMPLEX2)
@@ -38084,6 +38085,67 @@ occupies two positions in the real array.
 
 @
 
+\section{ComplexDoubleFloatMatrix}
+
+\defmacro{make-cdouble-matrix}{ComplexDoubleFloatMatrix function support}
+<<defmacro make-cdouble-matrix>>=
+(defmacro make-cdouble-matrix (n m)
+   `(make-array (list ,n (* 2 ,m)) :element-type 'double-float))
+
+@
+
+\defmacro{cdaref2}{ComplexDoubleFloatMatrix function support}
+<<defmacro cdaref2>>=
+(defmacro cdaref2 (ov oi oj)
+   (let ((v (gensym))
+         (i (gensym))
+         (j (gensym)))
+   `(let ((,v ,ov)
+          (,i ,oi)
+          (,j ,oj))
+        (cons
+            (aref (the (simple-array double-float (* *)) ,v) ,i (* 2 ,j))
+            (aref (the (simple-array double-float (* *)) ,v)
+                  ,i (+ (* 2 ,j) 1))))))
+
+@
+
+\defmacro{cdsetaref2}{ComplexDoubleFloatMatrix function support}
+<<defmacro cdsetaref2>>=
+(defmacro cdsetaref2 (ov oi oj os)
+   (let ((v (gensym))
+         (i (gensym))
+         (j (gensym))
+         (s (gensym)))
+   `(let ((,v ,ov)
+          (,i ,oi)
+          (,j ,oj)
+          (,s ,os))
+         (setf (aref (the (simple-array double-float (* *)) ,v) ,i (* 2 ,j))
+               (car ,s))
+         (setf (aref (the (simple-array double-float (* *)) ,v)
+                     ,i (+ (* 2 ,j) 1))
+               (cdr ,s))
+         ,s)))
+
+@
+
+\defmacro{cdanrows}{ComplexDoubleFloatMatrix function support}
+<<defmacro cdanrows>>=
+(defmacro cdanrows (v)
+    `(array-dimension (the (simple-array double-float (* *)) ,v) 0))
+
+@
+
+\defmacro{cdancols}{ComplexDoubleFloatMatrix function support}
+<<defmacro cdancols>>=
+(defmacro cdancols (v)
+    `(truncate 
+         (array-dimension (the (simple-array double-float (* *)) ,v) 1) 2))
+
+@
+
+
 \section{Integer}
 \defun{divide2}{Integer divide function support}
 Note that this is defined as a SPADReplace function in Integer
@@ -39735,8 +39797,12 @@ This needs to work off the internal exposure list, not the file.
 <<defmacro bvec-elt>>
 <<defmacro bvec-setelt>>
 <<defmacro bvec-size>>
+<<defmacro cdaref2>>
 <<defmacro cdelt>>
 <<defmacro cdlen>>
+<<defmacro cdancols>>
+<<defmacro cdanrows>>
+<<defmacro cdsetaref2>>
 <<defmacro cdsetelt>>
 <<defmacro danrows>>
 <<defmacro dancols>>
@@ -39781,6 +39847,7 @@ This needs to work off the internal exposure list, not the file.
 <<defmacro hget>>
 <<defmacro idChar?>>
 <<defmacro identp>>
+<<defmacro make-cdouble-matrix>>
 <<defmacro make-cdouble-vector>>
 <<defmacro make-double-matrix>>
 <<defmacro make-double-matrix1>>
diff --git a/books/ps/v103complexdoublefloatmatrix.eps b/books/ps/v103complexdoublefloatmatrix.eps
new file mode 100644
index 0000000..2281fa9
--- /dev/null
+++ b/books/ps/v103complexdoublefloatmatrix.eps
@@ -0,0 +1,258 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Graphviz version 2.20.2 (Mon Mar 30 10:09:11 UTC 2009)
+%%For: (root) root
+%%Title: pic
+%%Pages: 1
+%%BoundingBox: 36 36 148 152
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 148 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 112 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% CDFMAT
+gsave
+[ /Rect [ 0 72 104 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=CDFMAT) >>
+  /Subtype /Link
+/ANN pdfmark
+0.273 0.733 1.000 nodecolor
+52 90 52.12 18 ellipse_path fill
+1 setlinewidth
+filled
+0.273 0.733 1.000 nodecolor
+52 90 52.12 18 ellipse_path stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+22.5 85.9 moveto 59 (CDFMAT) alignedtext
+grestore
+% COMPCAT
+gsave
+[ /Rect [ 9 0 95 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=COMPCAT) >>
+  /Subtype /Link
+/ANN pdfmark
+0.537 0.247 0.902 nodecolor
+newpath 95 36 moveto
+9 36 lineto
+9 0 lineto
+95 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 95 36 moveto
+9 36 lineto
+9 0 lineto
+95 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+17 13.9 moveto 70 (COMPCAT) alignedtext
+grestore
+% CDFMAT->COMPCAT
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 52 72 moveto
+52 64 52 55 52 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 55.5 46 moveto
+52 36 lineto
+48.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 55.5 46 moveto
+52 36 lineto
+48.5 46 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 48c5f2e..5c5221a 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100705 wxh src/axiom-website/patches.html 20100705.01.wxh.patch
+20100705 wxh src/algebra/Makefile test and help ComplexDoubleFloatMatrix 
+20100705 wxh books/bookvol5 expose ComplexDoubleFloatMatrix, add macros
+20100705 wxh books/bookvol10.3 add ComplexDoubleFloatMatrix 
+20100705 wxh books/ps/v103complexdoublefloatmatrix.eps added
 20100704 wxh src/axiom-website/patches.html 20100704.01.wxh.patch
 20100704 wxh src/algebra/Makefile test and help files for DFMAT
 20100704 wxh books/bookvol5 expose DoubleFloatMatrix and add macros
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 5a16d5c..3269146 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -12384,7 +12384,7 @@ LAYER17=\
   ${OUT}/ALGSC.o    ${OUT}/AN.o       ${OUT}/APPRULE.o  ${OUT}/ASP19.o    \
   ${OUT}/ASP20.o    ${OUT}/ASP31.o    ${OUT}/ASP35.o    ${OUT}/ASP41.o    \
   ${OUT}/ASP42.o    ${OUT}/ASP74.o    ${OUT}/ASP77.o    ${OUT}/ASP80.o    \
-  ${OUT}/CDFVEC.o   \
+  ${OUT}/CDFMAT.o   ${OUT}/CDFVEC.o   \
   ${OUT}/CINTSLPE.o ${OUT}/COMBF.o    ${OUT}/COMPFACT.o ${OUT}/COMPLEX.o  \
   ${OUT}/COMPLPAT.o ${OUT}/CMPLXRT.o  ${OUT}/CPMATCH.o  ${OUT}/CRFP.o     \
   ${OUT}/CTRIGMNP.o ${OUT}/D01WGTS.o  ${OUT}/D02AGNT.o  ${OUT}/D03EEFA.o  \
@@ -12800,6 +12800,23 @@ LAYER17=\
 "ASP80" -> "FS"
 /*"ASP80" -> "GROUP"*/
 
+"CDFMAT" [color="#88FF44",href="bookvol10.3.pdf#nameddest=CDFMAT"]
+"CDFMAT" -> "COMPCAT"
+/*"CDFMAT" -> {"MATCAT"; "ARR2CAT"; "HOAGG"; "AGG"; "TYPE"; "SETCAT"}*/
+/*"CDFMAT" -> {"BASTYPE"; "KOERCE"; "EVALAB"; "IEVALAB"; "FPS"; "RNS"}*/
+/*"CDFMAT" -> {"FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"}*/
+/*"CDFMAT" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"}*/
+/*"CDFMAT" -> {"SGROUP"; "MONOID"; "LMODULE"; "BMODULE"; "RMODULE"}*/
+/*"CDFMAT" -> {"ALGEBRA"; "MODULE"; "ENTIRER"; "UFD"; "DIVRING"; "ORDRING"}*/
+/*"CDFMAT" -> {"OAGROUP"; "OCAMON"; "OAMON"; "OASGP"; "ORDSET"; "REAL"}*/
+/*"CDFMAT" -> {"KONVERT"; "RETRACT"; "RADCAT"; "PATMAB"; "CHARZ"; "MONOGEN"}*/
+/*"CDFMAT" -> {"FRAMALG"; "FINRALG"; "CHARNZ"; "FRETRCT"; "FLINEXP"}*/
+/*"CDFMAT" -> {"LINEXP"; "FINITE"; "DIFEXT"; "DIFRING"; "PDRING"; "FFIELDC"}*/
+/*"CDFMAT" -> {"FPC"; "STEP"; "FEVALAB"; "ELTAB"; "FPATMAB"; "PATAB"}*/
+/*"CDFMAT" -> {"TRANFUN"; "TRIGCAT"; "ATRIG"; "HYPCAT"; "AHYP"; "ELEMFUN"}*/
+/*"CDFMAT" -> {"PFECAT"; "VECTCAT"; "A1AGG"; "FLAGG"; "LNAGG"; "IXAGG"}*/
+/*"CDFMAT" -> {"ELTAGG"; "CLAGG"; "INT"; "SINT"; "NNI"; "OM"; "SPFCAT"}*/
+
 "CDFVEC" [color="#88FF44",href="bookvol10.3.pdf#nameddest=CDFVEC"]
 "CDFVEC" -> "COMPCAT"
 /*"CDFVEC" -> {"VECTCAT"; "A1AGG"; "FLAGG"; "LNAGG"; "IXAGG"; "HOAGG"}*/
@@ -17343,6 +17360,7 @@ SPADHELP=\
  ${HELP}/Commutator.help \
  ${HELP}/Complex.help \
  ${HELP}/ComplexCategory.help \
+ ${HELP}/ComplexDoubleFloatMatrix.help \
  ${HELP}/ComplexDoubleFloatVector.help \
  ${HELP}/ContinuedFraction.help \
  ${HELP}/ConvertibleTo.help \
@@ -18033,6 +18051,7 @@ REGRESS= \
  Commutator.regress \
  Complex.regress \
  ComplexCategory.regress \
+ ComplexDoubleFloatMatrix.regress \
  ComplexDoubleFloatVector.regress \
  ContinuedFraction.regress \
  ConvertibleTo.regress \
@@ -19835,6 +19854,18 @@ ${HELP}/ContinuedFraction.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/ContinuedFraction.input
 	@echo "ContinuedFraction (CONTFRAC)" >>${HELPFILE}
 
+${HELP}/ComplexDoubleFloatMatrix.help: ${BOOKS}/bookvol10.3.pamphlet
+	@echo 7150 create ComplexDoubleFloatMatrix.help from \
+            ${BOOKS}/bookvol10.3.pamphlet
+	@${TANGLE} -R"ComplexDoubleFloatMatrix.help" \
+            ${BOOKS}/bookvol10.3.pamphlet \
+            >${HELP}/ComplexDoubleFloatMatrix.help
+	@cp ${HELP}/ComplexDoubleFloatMatrix.help ${HELP}/CDFMAT.help
+	@${TANGLE} -R"ComplexDoubleFloatMatrix.input" \
+            ${BOOKS}/bookvol10.3.pamphlet \
+            >${INPUT}/ComplexDoubleFloatMatrix.input
+	@echo "ComplexDoubleFloatMatrix (CDFMAT)" >>${HELPFILE}
+
 ${HELP}/ComplexDoubleFloatVector.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7150 create ComplexDoubleFloatVector.help from \
             ${BOOKS}/bookvol10.3.pamphlet
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 03ed1be..370e5e3 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2980,5 +2980,7 @@ books/bookvol10.3 fix DoubleFloatVector unit test, help file<br/>
 src/input/Makefile add TESTSET=notests<br/>
 <a href="patches/20100704.01.wxh.patch">20100704.01.wxh.patch</a>
 books/bookvol10.3 add DoubleFloatMatrix<br/>
+<a href="patches/20100705.01.wxh.patch">20100705.01.wxh.patch</a>
+books/bookvol10.3 add ComplexDoubleFloatMatrix<br/>
  </body>
 </html>
