diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index da31f0c..ecedeeb 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -18994,6 +18994,325 @@ Complex(R:CommutativeRing): ComplexCategory(R) with
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{domain CDFVEC ComplexDoubleFloatVector}
+<<ComplexDoubleFloatVector.input>>=
+)set break resume
+)sys rm -f ComplexDoubleFloatVector.output
+)spool ComplexDoubleFloatVector.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 6
+)show ComplexDoubleFloatVector
+--R ComplexDoubleFloatVector  is a domain constructor
+--R Abbreviation for ComplexDoubleFloatVector is CDFVEC 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.3.pamphlet to see algebra source code for CDFVEC 
+--R
+--R------------------------------- Operations --------------------------------
+--R concat : List % -> %                  concat : (%,%) -> %
+--R copy : % -> %                         delete : (%,Integer) -> %
+--R empty : () -> %                       empty? : % -> Boolean
+--R eq? : (%,%) -> Boolean                index? : (Integer,%) -> Boolean
+--R indices : % -> List Integer           insert : (%,%,Integer) -> %
+--R qnew : Integer -> %                   reverse : % -> %
+--R sample : () -> %                     
+--R #? : % -> NonNegativeInteger if $ has finiteAggregate
+--R ?*? : (%,Complex DoubleFloat) -> % if Complex DoubleFloat has MONOID
+--R ?*? : (Complex DoubleFloat,%) -> % if Complex DoubleFloat has MONOID
+--R ?*? : (Integer,%) -> % if Complex DoubleFloat has ABELGRP
+--R ?+? : (%,%) -> % if Complex DoubleFloat has ABELSG
+--R ?-? : (%,%) -> % if Complex DoubleFloat has ABELGRP
+--R -? : % -> % if Complex DoubleFloat has ABELGRP
+--R ?<? : (%,%) -> Boolean if Complex DoubleFloat has ORDSET
+--R ?<=? : (%,%) -> Boolean if Complex DoubleFloat has ORDSET
+--R ?=? : (%,%) -> Boolean if Complex DoubleFloat has SETCAT
+--R ?>? : (%,%) -> Boolean if Complex DoubleFloat has ORDSET
+--R ?>=? : (%,%) -> Boolean if Complex DoubleFloat has ORDSET
+--R any? : ((Complex DoubleFloat -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R coerce : % -> OutputForm if Complex DoubleFloat has SETCAT
+--R concat : (Complex DoubleFloat,%) -> %
+--R concat : (%,Complex DoubleFloat) -> %
+--R construct : List Complex DoubleFloat -> %
+--R convert : % -> InputForm if Complex DoubleFloat has KONVERT INFORM
+--R copyInto! : (%,%,Integer) -> % if $ has shallowlyMutable
+--R count : (Complex DoubleFloat,%) -> NonNegativeInteger if $ has finiteAggregate and Complex DoubleFloat has SETCAT
+--R count : ((Complex DoubleFloat -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate
+--R cross : (%,%) -> % if Complex DoubleFloat has RING
+--R delete : (%,UniversalSegment Integer) -> %
+--R dot : (%,%) -> Complex DoubleFloat if Complex DoubleFloat has RING
+--R ?.? : (%,UniversalSegment Integer) -> %
+--R ?.? : (%,Integer) -> Complex DoubleFloat
+--R elt : (%,Integer,Complex DoubleFloat) -> Complex DoubleFloat
+--R entries : % -> List Complex DoubleFloat
+--R entry? : (Complex DoubleFloat,%) -> Boolean if $ has finiteAggregate and Complex DoubleFloat has SETCAT
+--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 fill! : (%,Complex DoubleFloat) -> % if $ has shallowlyMutable
+--R find : ((Complex DoubleFloat -> Boolean),%) -> Union(Complex DoubleFloat,"failed")
+--R first : % -> Complex DoubleFloat if Integer has ORDSET
+--R hash : % -> SingleInteger if Complex DoubleFloat has SETCAT
+--R insert : (Complex DoubleFloat,%,Integer) -> %
+--R latex : % -> String if Complex DoubleFloat has SETCAT
+--R length : % -> Complex DoubleFloat if Complex DoubleFloat has RADCAT and Complex DoubleFloat has RING
+--R less? : (%,NonNegativeInteger) -> Boolean
+--R magnitude : % -> Complex DoubleFloat if Complex DoubleFloat has RADCAT and Complex DoubleFloat has RING
+--R map : (((Complex DoubleFloat,Complex DoubleFloat) -> Complex DoubleFloat),%,%) -> %
+--R map : ((Complex DoubleFloat -> Complex DoubleFloat),%) -> %
+--R map! : ((Complex DoubleFloat -> Complex DoubleFloat),%) -> % if $ has shallowlyMutable
+--R max : (%,%) -> % if Complex DoubleFloat has ORDSET
+--R maxIndex : % -> Integer if Integer has ORDSET
+--R member? : (Complex DoubleFloat,%) -> Boolean if $ has finiteAggregate and Complex DoubleFloat has SETCAT
+--R members : % -> List Complex DoubleFloat if $ has finiteAggregate
+--R merge : (%,%) -> % if Complex DoubleFloat has ORDSET
+--R merge : (((Complex DoubleFloat,Complex DoubleFloat) -> Boolean),%,%) -> %
+--R min : (%,%) -> % if Complex DoubleFloat has ORDSET
+--R minIndex : % -> Integer if Integer has ORDSET
+--R more? : (%,NonNegativeInteger) -> Boolean
+--R new : (NonNegativeInteger,Complex DoubleFloat) -> %
+--R outerProduct : (%,%) -> Matrix Complex DoubleFloat if Complex DoubleFloat has RING
+--R parts : % -> List Complex DoubleFloat if $ has finiteAggregate
+--R position : (Complex DoubleFloat,%,Integer) -> Integer if Complex DoubleFloat has SETCAT
+--R position : (Complex DoubleFloat,%) -> Integer if Complex DoubleFloat has SETCAT
+--R position : ((Complex DoubleFloat -> Boolean),%) -> Integer
+--R qelt : (%,Integer) -> Complex DoubleFloat
+--R qsetelt! : (%,Integer,Complex DoubleFloat) -> Complex DoubleFloat if $ has shallowlyMutable
+--R reduce : (((Complex DoubleFloat,Complex DoubleFloat) -> Complex DoubleFloat),%) -> Complex DoubleFloat if $ has finiteAggregate
+--R reduce : (((Complex DoubleFloat,Complex DoubleFloat) -> Complex DoubleFloat),%,Complex DoubleFloat) -> Complex DoubleFloat if $ has finiteAggregate
+--R reduce : (((Complex DoubleFloat,Complex DoubleFloat) -> Complex DoubleFloat),%,Complex DoubleFloat,Complex DoubleFloat) -> Complex DoubleFloat if $ has finiteAggregate and Complex DoubleFloat has SETCAT
+--R remove : ((Complex DoubleFloat -> Boolean),%) -> % if $ has finiteAggregate
+--R remove : (Complex DoubleFloat,%) -> % if $ has finiteAggregate and Complex DoubleFloat has SETCAT
+--R removeDuplicates : % -> % if $ has finiteAggregate and Complex DoubleFloat has SETCAT
+--R reverse! : % -> % if $ has shallowlyMutable
+--R select : ((Complex DoubleFloat -> Boolean),%) -> % if $ has finiteAggregate
+--R setelt : (%,UniversalSegment Integer,Complex DoubleFloat) -> Complex DoubleFloat if $ has shallowlyMutable
+--R setelt : (%,Integer,Complex DoubleFloat) -> Complex DoubleFloat if $ has shallowlyMutable
+--R size? : (%,NonNegativeInteger) -> Boolean
+--R sort : % -> % if Complex DoubleFloat has ORDSET
+--R sort : (((Complex DoubleFloat,Complex DoubleFloat) -> Boolean),%) -> %
+--R sort! : % -> % if $ has shallowlyMutable and Complex DoubleFloat has ORDSET
+--R sort! : (((Complex DoubleFloat,Complex DoubleFloat) -> Boolean),%) -> % if $ has shallowlyMutable
+--R sorted? : % -> Boolean if Complex DoubleFloat has ORDSET
+--R sorted? : (((Complex DoubleFloat,Complex DoubleFloat) -> Boolean),%) -> Boolean
+--R swap! : (%,Integer,Integer) -> Void if $ has shallowlyMutable
+--R vector : List Complex DoubleFloat -> %
+--R zero : NonNegativeInteger -> % if Complex DoubleFloat has ABELMON
+--R ?~=? : (%,%) -> Boolean if Complex DoubleFloat has SETCAT
+--R
+--E 1
+ 
+--S 2 of 6
+t1:CDFVEC:=qnew(5)
+--R
+--R   (1)  [0.,0.,0.,0.,0.]
+--R                                               Type: ComplexDoubleFloatVector
+--E 2
+
+-- NOTE: CDFVEC arrays are 0-based, normal Axiom arrays are 1-based
+--S 3 of 6
+t1.1:=1.0+2*%i
+--R
+--R   (2)  1. + 2. %i
+--R                                                    Type: Complex DoubleFloat
+--E 3
+
+--S 4 of 6
+t1
+--R
+--R   (3)  [0.,1. + 2. %i,0.,0.,0.]
+--R                                               Type: ComplexDoubleFloatVector
+--E 4
+
+--S 5 of 6
+t1.0:=3.0+4.0*%i
+--R
+--R   (4)  3. + 4. %i
+--R                                                    Type: Complex DoubleFloat
+--E 5
+
+--S 6 of 6
+t1
+--R
+--R   (5)  [3. + 4. %i,1. + 2. %i,0.,0.,0.]
+--R                                               Type: ComplexDoubleFloatVector
+--E 6
+
+)spool
+)lisp (bye)
+
+@
+
+<<ComplexDoubleFloatVector.help>>=
+====================================================================
+ComplexDoubleFloatVector examples
+====================================================================
+This domain creates a lisp simple array of machine complex doublefloats.
+It provides one new function called qnew which takes an integer
+that gives the array length.
+
+NOTE: Unlike normal Axiom arrays the ComplexDoubleFloatVector arrays
+are 0-based so the first element is 0. Axiom arrays normally
+start at 1.
+
+t1:CDFVEC:=qnew(5)
+     [0.,0.,0.,0.,0.]
+
+t1.1:=1.0+2*%i
+     1. + 2. %i
+
+t1
+     [0.,1. + 2. %i,0.,0.,0.]
+
+t1.0:=3.0+4.0*%i
+     3. + 4. %i
+
+t1
+
+     [3. + 4. %i,1. + 2. %i,0.,0.,0.]
+
+See Also:
+o )help Float
+o )help DoubleFloat
+o )show ComplexDoubleFloatVector
+
+@
+\pagehead{ComplexDoubleFloatVector}{CDFVEC}
+\pagepic{ps/v103complexdoublefloatvector.eps}{CDFVEC}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{CDFVEC}{\#?} &
+\cross{CDFVEC}{-?} &
+\cross{CDFVEC}{?*?} &
+\cross{CDFVEC}{?+?} \\
+\cross{CDFVEC}{?-?} &
+\cross{CDFVEC}{?.?} &
+\cross{CDFVEC}{?$<=$?} &
+\cross{CDFVEC}{?$<$?} \\
+\cross{CDFVEC}{?=?} &
+\cross{CDFVEC}{?$>=$?} &
+\cross{CDFVEC}{?$>$?} &
+\cross{CDFVEC}{?\~{}=?} \\
+\cross{CDFVEC}{any?} &
+\cross{CDFVEC}{coerce} &
+\cross{CDFVEC}{concat} &
+\cross{CDFVEC}{construct} \\
+\cross{CDFVEC}{convert} &
+\cross{CDFVEC}{copy} &
+\cross{CDFVEC}{copyInto!} &
+\cross{CDFVEC}{count} \\
+\cross{CDFVEC}{cross} &
+\cross{CDFVEC}{delete} &
+\cross{CDFVEC}{dot} &
+\cross{CDFVEC}{elt} \\
+\cross{CDFVEC}{empty} &
+\cross{CDFVEC}{empty?} &
+\cross{CDFVEC}{entries} &
+\cross{CDFVEC}{entry?} \\
+\cross{CDFVEC}{eq?} &
+\cross{CDFVEC}{eval} &
+\cross{CDFVEC}{every?} &
+\cross{CDFVEC}{fill!} \\
+\cross{CDFVEC}{find} &
+\cross{CDFVEC}{first} &
+\cross{CDFVEC}{hash} &
+\cross{CDFVEC}{index?} \\
+\cross{CDFVEC}{indices} &
+\cross{CDFVEC}{insert} &
+\cross{CDFVEC}{latex} &
+\cross{CDFVEC}{length} \\
+\cross{CDFVEC}{less?} &
+\cross{CDFVEC}{magnitude} &
+\cross{CDFVEC}{map} &
+\cross{CDFVEC}{map!} \\
+\cross{CDFVEC}{max} &
+\cross{CDFVEC}{maxIndex} &
+\cross{CDFVEC}{member?} &
+\cross{CDFVEC}{members} \\
+\cross{CDFVEC}{merge} &
+\cross{CDFVEC}{min} &
+\cross{CDFVEC}{minIndex} &
+\cross{CDFVEC}{more?} \\
+\cross{CDFVEC}{new} &
+\cross{CDFVEC}{outerProduct} &
+\cross{CDFVEC}{parts} &
+\cross{CDFVEC}{position} \\
+\cross{CDFVEC}{qelt} &
+\cross{CDFVEC}{qnew} &
+\cross{CDFVEC}{qsetelt!} &
+\cross{CDFVEC}{reduce} \\
+\cross{CDFVEC}{remove} &
+\cross{CDFVEC}{removeDuplicates} &
+\cross{CDFVEC}{reverse} &
+\cross{CDFVEC}{reverse!} \\
+\cross{CDFVEC}{sample} &
+\cross{CDFVEC}{select} &
+\cross{CDFVEC}{setelt} &
+\cross{CDFVEC}{size?} \\
+\cross{CDFVEC}{sort} &
+\cross{CDFVEC}{sort!} &
+\cross{CDFVEC}{sorted?} &
+\cross{CDFVEC}{swap!} \\
+\cross{CDFVEC}{vector} &
+\cross{CDFVEC}{zero} &&
+\end{tabular}
+
+<<domain CDFVEC ComplexDoubleFloatVector>>=
+)abbrev domain CDFVEC ComplexDoubleFloatVector
+++ Author: Waldek Hebisch
+++ Description: This is a low-level domain which implements vectors
+++ (one dimensional arrays) of complex double precision floating point
+++ numbers.  Indexing is 0 based, there is no bound checking (unless
+++ provided by lower level).
+ComplexDoubleFloatVector : VectorCategory Complex DoubleFloat with
+    qnew : Integer -> %
+      ++ qnew(n) creates a new uninitialized vector of length n.
+      ++
+      ++X t1:CDFVEC:=qnew 7
+    vector: List Complex DoubleFloat -> %
+      ++ vector(l) converts the list l to a vector.
+      ++
+      ++X t1:List(Complex(DoubleFloat)):=[1+2*%i,3+4*%i,-5-6*%i]
+      ++X t2:CDFVEC:=vector(t1)
+  == add
+    
+    Qelt1 ==> CDELT$Lisp
+    Qsetelt1 ==> CDSETELT$Lisp
+
+    qelt(x, i) == Qelt1(x, i)
+    qsetelt_!(x, i, s) == Qsetelt1(x, i, s)
+    Qsize ==> CDLEN$Lisp
+    Qnew ==> MAKE_-CDOUBLE_-VECTOR$Lisp
+
+    #x                          == Qsize x
+    minIndex x                  == 0
+    empty()                     == Qnew(0$Lisp)
+    qnew(n)                     == Qnew(n)
+    new(n, x)                   ==
+        res := Qnew(n)
+        fill_!(res, x)
+    qelt(x, i)                  == Qelt1(x, i)
+    elt(x:%, i:Integer)         == Qelt1(x, i)
+    qsetelt_!(x, i, s)          == Qsetelt1(x, i, s)
+    setelt(x : %, i : Integer, s : Complex DoubleFloat) ==
+        Qsetelt1(x, i, s)
+    fill_!(x, s)       ==
+        for i in 0..((Qsize(x)) - 1) repeat Qsetelt1(x, i, s)
+        x
+
+@
+<<CDFVEC.dotabb>>=
+"CDFVEC" [color="#88FF44",href="bookvol10.3.pdf#nameddest=CDFVEC",
+          shape=ellipse]
+"COMPCAT" [color=lightblue,href="bookvol10.2.pdf#nameddest=COMPCAT"];
+"CDFVEC" -> "COMPCAT"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{domain CONTFRAC ContinuedFraction}
 
 <<ContinuedFraction.input>>=
@@ -148409,6 +148728,7 @@ Note that this code is not included in the generated catdef.spad file.
 <<domain COLOR Color>>
 <<domain COMM Commutator>>
 <<domain COMPLEX Complex>>
+<<domain CDFVEC ComplexDoubleFloatVector>>
 <<domain CONTFRAC ContinuedFraction>>
 
 <<domain DHMATRIX DenavitHartenbergMatrix>>
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 2d14288..db0feee 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)
+   (|ComplexDoubleFloatVector| . CDFVEC)
    (|ComplexFactorization| . COMPFACT)
    (|ComplexFunctions2| . COMPLEX2)
    (|ComplexRootPackage| . CMPLXRT)
@@ -37948,7 +37949,8 @@ an AssociationList representation
 
 \section{DoubleFloatVector}
 Double Float Vectors are simple arrays of lisp double-floats
-made available at the Spad language level.
+made available at the Spad language level. Note that these vectors
+are 0 based whereas other Spad language vectors are 1-based.
 
 \defmacro{dlen}{DoubleFloatVector Qsize function support}
 <<defmacro dlen>>=
@@ -37985,6 +37987,58 @@ made available at the Spad language level.
 
 @
 
+\section{ComplexDoubleFloatVector}
+Complex Double Float Vectors are simple arrays of lisp double-floats
+made available at the Spad language level. Note that these vectors
+are 0 based whereas other Spad language vectors are 1-based.
+Complex array is implemented as an array of doubles. Each complex number
+occupies two positions in the real array.
+
+\defmacro{make-cdouble-vector}{ComplexDoubleFloatVector Qnew function support}
+<<defmacro make-cdouble-vector>>=
+(defmacro make-cdouble-vector (n)
+   `(make-array (list (* 2 ,n)) :element-type 'double-float))
+
+@
+
+\defmacro{cdelt}{ComplexDoubleFloatVector Qelt1 function support}
+<<defmacro cdelt>>=
+(defmacro CDELT(ov oi)
+   (let ((v (gensym))
+         (i (gensym)))
+   `(let ((,v ,ov)
+          (,i ,oi))
+      (cons
+          (aref (the (simple-array double-float (*)) ,v) (* 2 ,i))
+          (aref (the (simple-array double-float (*)) ,v) (+ (* 2 ,i) 1))))))
+
+@
+
+\defmacro{cdsetelt}{ComplexDoubleFloatVector Qsetelt1 function support}
+<<defmacro cdsetelt>>=
+(defmacro cdsetelt(ov oi os)
+   (let ((v (gensym))
+         (i (gensym))
+         (s (gensym)))
+   `(let ((,v ,ov)
+          (,i ,oi)
+          (,s ,os))
+        (setf (aref (the (simple-array double-float (*)) ,v) (* 2 ,i))
+           (car ,s))
+        (setf (aref (the (simple-array double-float (*)) ,v) (+ (* 2 ,i) 1))
+           (cdr ,s))
+        ,s)))
+
+@
+
+\defmacro{cdlen}{ComplexDoubleFloatVector Qsize function support}
+<<defmacro cdlen>>=
+(defmacro cdlen(v)
+    `(truncate (length (the (simple-array double-float (*)) ,v)) 2))
+
+@
+
+
 \section{Integer}
 \defun{divide2}{Integer divide function support}
 Note that this is defined as a SPADReplace function in Integer
@@ -39636,6 +39690,9 @@ This needs to work off the internal exposure list, not the file.
 <<defmacro bvec-elt>>
 <<defmacro bvec-setelt>>
 <<defmacro bvec-size>>
+<<defmacro cdelt>>
+<<defmacro cdlen>>
+<<defmacro cdsetelt>>
 <<defmacro DFAdd>>
 <<defmacro DFAcos>>
 <<defmacro DFAcosh>>
@@ -39675,6 +39732,7 @@ This needs to work off the internal exposure list, not the file.
 <<defmacro hget>>
 <<defmacro idChar?>>
 <<defmacro identp>>
+<<defmacro make-cdouble-vector>>
 <<defmacro make-double-vector>>
 <<defmacro make-double-vector1>>
 <<defmacro memq>>
diff --git a/books/ps/v103complexdoublefloatvector.eps b/books/ps/v103complexdoublefloatvector.eps
new file mode 100644
index 0000000..190494d
--- /dev/null
+++ b/books/ps/v103complexdoublefloatvector.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 146 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 146 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 110 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% CDFVEC
+gsave
+[ /Rect [ 0 72 102 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=CDFVEC) >>
+  /Subtype /Link
+/ANN pdfmark
+0.273 0.733 1.000 nodecolor
+51 90 50.92 18 ellipse_path fill
+1 setlinewidth
+filled
+0.273 0.733 1.000 nodecolor
+51 90 50.92 18 ellipse_path stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+22 85.9 moveto 58 (CDFVEC) alignedtext
+grestore
+% COMPCAT
+gsave
+[ /Rect [ 8 0 94 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 94 36 moveto
+8 36 lineto
+8 0 lineto
+94 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 94 36 moveto
+8 36 lineto
+8 0 lineto
+94 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+16 13.9 moveto 70 (COMPCAT) alignedtext
+grestore
+% CDFVEC->COMPCAT
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 51 72 moveto
+51 64 51 55 51 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 54.5 46 moveto
+51 36 lineto
+47.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 54.5 46 moveto
+51 36 lineto
+47.5 46 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index c80ef8d..8b66a39 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100703 wxh src/axiom-website/patches.html 20100703.03.wxh.patch
+20100703 wxh src/algebra/Makefile help and test for ComplexDoubleFloatVector
+20100703 wxh books/bookvol5 expose ComplexDoubleFloatVector, add macros
+20100703 wxh books/bookvol10.3 add ComplexDoubleFloatVector
+20100703 wxh books/ps/v103complexdoublefloatvector.eps added
 20100703 wxh src/axiom-website/patches.html 20100703.02.wxh.patch
 20100703 wxh src/algebra/Makefile help and test files for DoubleFloatVector
 20100703 wxh books/bookvol5 expose DFVEC, add support macros
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 2aac71f..2a34097 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -12369,6 +12369,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}/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  \
@@ -12784,6 +12785,23 @@ LAYER17=\
 "ASP80" -> "FS"
 /*"ASP80" -> "GROUP"*/
 
+"CDFVEC" [color="#88FF44",href="bookvol10.3.pdf#nameddest=CDFVEC"]
+"CDFVEC" -> "COMPCAT"
+/*"CDFVEC" -> {"VECTCAT"; "A1AGG"; "FLAGG"; "LNAGG"; "IXAGG"; "HOAGG"}*/
+/*"CDFVEC" -> {"AGG"; "TYPE"; "SETCAT"; "BASTYPE"; "KOERCE"; "EVALAB"*/
+/*"CDFVEC" -> {"IEVALAB"; "ELTAGG"; "ELTAB"; "CLAGG"; "KONVERT"; "ORDSET"}*/
+/*"CDFVEC" -> {"FPS"; "RNS"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"}*/
+/*"CDFVEC" -> {"COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"}*/
+/*"CDFVEC" -> {"ABELSG"; "SGROUP"; "MONOID"; "LMODULE"; "BMODULE"; "RMODULE"}*/
+/*"CDFVEC" -> {"ALGEBRA"; "MODULE"; "ENTIRER"; "UFD"; "DIVRING"; "ORDRING"}*/
+/*"CDFVEC" -> {"OAGROUP"; "OCAMON"; "OAMON"; "OASGP"; "REAL"; "RETRACT"}*/
+/*"CDFVEC" -> {"RADCAT"; "PATMAB"; "CHARZ"; "INT"; "SINT"; "NNI"; "MONOGEN"}*/
+/*"CDFVEC" -> {"FRAMALG"; "FINRALG"; "CHARNZ"; "FRETRCT"; "FLINEXP"}*/
+/*"CDFVEC" -> {"LINEXP"; "FINITE"; "DIFEXT"; "DIFRING"; "PDRING"; "FFIELDC"}*/
+/*"CDFVEC" -> {"FPC"; "STEP"; "FEVALAB"; "FPATMAB"; "PATAB"; "TRANFUN"}*/
+/*"CDFVEC" -> {"TRIGCAT"; "ATRIG"; "HYPCAT"; "AHYP"; "ELEMFUN"; "PFECAT"}*/
+/*"CDFVEC" -> {"OM"; "SPFCAT"; "INS"; "OINTDOM"; "CFCAT"}*/
+
 "CINTSLPE" [color="#FF4488",href="bookvol10.4.pdf#nameddest=CINTSLPE"]
 /*"CINTSLPE" -> {"INS"; "UFD"; "GCDDOM"; "INTDOM"; "COMRING"; "RING"}*/
 /*"CINTSLPE" -> {"RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"; "SETCAT"}*/
@@ -17310,6 +17328,7 @@ SPADHELP=\
  ${HELP}/Commutator.help \
  ${HELP}/Complex.help \
  ${HELP}/ComplexCategory.help \
+ ${HELP}/ComplexDoubleFloatVector.help \
  ${HELP}/ContinuedFraction.help \
  ${HELP}/ConvertibleTo.help \
  ${HELP}/CycleIndicators.help \
@@ -17998,6 +18017,7 @@ REGRESS= \
  Commutator.regress \
  Complex.regress \
  ComplexCategory.regress \
+ ComplexDoubleFloatVector.regress \
  ContinuedFraction.regress \
  ConvertibleTo.regress \
  CycleIndicators.regress \
@@ -19798,6 +19818,18 @@ ${HELP}/ContinuedFraction.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/ContinuedFraction.input
 	@echo "ContinuedFraction (CONTFRAC)" >>${HELPFILE}
 
+${HELP}/ComplexDoubleFloatVector.help: ${BOOKS}/bookvol10.3.pamphlet
+	@echo 7150 create ComplexDoubleFloatVector.help from \
+            ${BOOKS}/bookvol10.3.pamphlet
+	@${TANGLE} -R"ComplexDoubleFloatVector.help" \
+            ${BOOKS}/bookvol10.3.pamphlet \
+            >${HELP}/ComplexDoubleFloatVector.help
+	@cp ${HELP}/ComplexDoubleFloatVector.help ${HELP}/CDFVEC.help
+	@${TANGLE} -R"ComplexDoubleFloatVector.input" \
+            ${BOOKS}/bookvol10.3.pamphlet \
+            >${INPUT}/ComplexDoubleFloatVector.input
+	@echo "ComplexDoubleFloatVector (CDFVEC)" >>${HELPFILE}
+
 ${HELP}/ConvertibleTo.help: ${BOOKS}/bookvol10.2.pamphlet
 	@echo 5000 create ConvertibleTo.help from \
            ${BOOKS}/bookvol10.2.pamphlet
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index b50e256..fd6f6cc 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2970,5 +2970,7 @@ src/input/Makefile segment test set choice from command line<br/>
 books/bookvol6 fix deleted variable from axiom script<br/>
 <a href="patches/20100703.02.wxh.patch">20100703.02.wxh.patch</a>
 books/bookvol10.3 add DoubleFloatVector<br/>
+<a href="patches/20100703.03.wxh.patch">20100703.03.wxh.patch</a>
+books/bookvol10.3 add ComplexDoubleFloatVector<br/>
  </body>
 </html>
