diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index 8f25bf9..afee333 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -142518,6 +142518,244 @@ U16Vector() : OneDimensionalArrayAggregate Integer == add
\end{chunk}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{domain U8MAT U8Matrix}
+
+\begin{chunk}{U8Matrix.input}
+)set break resume
+)sys rm -f U8Matrix.output
+)spool U8Matrix.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show U8Matrix
+--R U8Matrix is a domain constructor
+--R Abbreviation for U8Matrix is U8MAT
+--R This constructor is exposed in this frame.
+--R Issue )edit /tmp/ta.spad to see algebra source code for U8MAT
+--R
+--R------------------------------- Operations --------------------------------
+--R ?*? : (U8Vector,%) -> U8Vector ?*? : (%,U8Vector) -> U8Vector
+--R ?*? : (Integer,%) -> % ?*? : (%,Integer) -> %
+--R ?*? : (Integer,%) -> % ?*? : (%,%) -> %
+--R ?+? : (%,%) -> % -? : % -> %
+--R ?-? : (%,%) -> % antisymmetric? : % -> Boolean
+--R coerce : U8Vector -> % column : (%,Integer) -> U8Vector
+--R copy : % -> % diagonal? : % -> Boolean
+--R diagonalMatrix : List(%) -> % empty : () -> %
+--R empty? : % -> Boolean eq? : (%,%) -> Boolean
+--R fill! : (%,Integer) -> % horizConcat : (%,%) -> %
+--R matrix : List(List(Integer)) -> % maxColIndex : % -> Integer
+--R maxRowIndex : % -> Integer minColIndex : % -> Integer
+--R minRowIndex : % -> Integer ncols : % -> NonNegativeInteger
+--R nrows : % -> NonNegativeInteger parts : % -> List(Integer)
+--R qnew : (Integer,Integer) -> % row : (%,Integer) -> U8Vector
+--R sample : () -> % square? : % -> Boolean
+--R squareTop : % -> % symmetric? : % -> Boolean
+--R transpose : % -> % transpose : U8Vector -> %
+--R vertConcat : (%,%) -> %
+--R #? : % -> NonNegativeInteger if $ has finiteAggregate
+--R ?**? : (%,Integer) -> % if Integer has FIELD
+--R ?**? : (%,NonNegativeInteger) -> %
+--R ?/? : (%,Integer) -> % if Integer has FIELD
+--R ?=? : (%,%) -> Boolean if Integer has SETCAT
+--R any? : ((Integer -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R coerce : % -> OutputForm if Integer has SETCAT
+--R columnSpace : % -> List(U8Vector) if Integer has EUCDOM
+--R count : (Integer,%) -> NonNegativeInteger if $ has finiteAggregate and Integer has SETCAT
+--R count : ((Integer -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate
+--R determinant : % -> Integer if Integer has commutative(*)
+--R diagonalMatrix : List(Integer) -> %
+--R elt : (%,List(Integer),List(Integer)) -> %
+--R elt : (%,Integer,Integer,Integer) -> Integer
+--R elt : (%,Integer,Integer) -> Integer
+--R eval : (%,List(Integer),List(Integer)) -> % if Integer has EVALAB(INT) and Integer has SETCAT
+--R eval : (%,Integer,Integer) -> % if Integer has EVALAB(INT) and Integer has SETCAT
+--R eval : (%,Equation(Integer)) -> % if Integer has EVALAB(INT) and Integer has SETCAT
+--R eval : (%,List(Equation(Integer))) -> % if Integer has EVALAB(INT) and Integer has SETCAT
+--R every? : ((Integer -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R exquo : (%,Integer) -> Union(%,"failed") if Integer has INTDOM
+--R hash : % -> SingleInteger if Integer has SETCAT
+--R inverse : % -> Union(%,"failed") if Integer has FIELD
+--R latex : % -> String if Integer has SETCAT
+--R less? : (%,NonNegativeInteger) -> Boolean
+--R listOfLists : % -> List(List(Integer))
+--R map : (((Integer,Integer) -> Integer),%,%,Integer) -> %
+--R map : (((Integer,Integer) -> Integer),%,%) -> %
+--R map : ((Integer -> Integer),%) -> %
+--R map! : ((Integer -> Integer),%) -> %
+--R matrix : (NonNegativeInteger,NonNegativeInteger,((Integer,Integer) -> Integer)) -> %
+--R member? : (Integer,%) -> Boolean if $ has finiteAggregate and Integer has SETCAT
+--R members : % -> List(Integer) if $ has finiteAggregate
+--R minordet : % -> Integer if Integer has commutative(*)
+--R more? : (%,NonNegativeInteger) -> Boolean
+--R new : (NonNegativeInteger,NonNegativeInteger,Integer) -> %
+--R nullSpace : % -> List(U8Vector) if Integer has INTDOM
+--R nullity : % -> NonNegativeInteger if Integer has INTDOM
+--R pfaffian : % -> Integer if Integer has COMRING
+--R qelt : (%,Integer,Integer) -> Integer
+--R qsetelt! : (%,Integer,Integer,Integer) -> Integer
+--R rank : % -> NonNegativeInteger if Integer has INTDOM
+--R rowEchelon : % -> % if Integer has EUCDOM
+--R scalarMatrix : (NonNegativeInteger,Integer) -> %
+--R setColumn! : (%,Integer,U8Vector) -> %
+--R setRow! : (%,Integer,U8Vector) -> %
+--R setelt : (%,List(Integer),List(Integer),%) -> %
+--R setelt : (%,Integer,Integer,Integer) -> Integer
+--R setsubMatrix! : (%,Integer,Integer,%) -> %
+--R size? : (%,NonNegativeInteger) -> Boolean
+--R subMatrix : (%,Integer,Integer,Integer,Integer) -> %
+--R swapColumns! : (%,Integer,Integer) -> %
+--R swapRows! : (%,Integer,Integer) -> %
+--R zero : (NonNegativeInteger,NonNegativeInteger) -> %
+--R ?~=? : (%,%) -> Boolean if Integer has SETCAT
+--R
+--E 1
+
+)spool
+)lisp (bye)
+\end{chunk}
+\begin{chunk}{U8Matrix.help}
+====================================================================
+U8Matrix examples
+====================================================================
+
+See Also:
+o )show U8Matrix
+o )show U16Matrix
+o )show U32Matrix
+
+\end{chunk}
+\pagehead{U8Matrix}{U8MAT}
+\pagepic{ps/v103u8matrix.eps}{U8MAT}{1.00}
+{\bf See}\\
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{U8MAT}{\#{}?} &
+\cross{U8MAT}{-?} &
+\cross{U8MAT}{?**?} &
+\cross{U8MAT}{?*?} \\
+\cross{U8MAT}{?+?} &
+\cross{U8MAT}{?-?} &
+\cross{U8MAT}{?/?} &
+\cross{U8MAT}{?=?} \\
+\cross{U8MAT}{?\~{}=?} &
+\cross{U8MAT}{antisymmetric?} &
+\cross{U8MAT}{any?} &
+\cross{U8MAT}{coerce} \\
+\cross{U8MAT}{column} &
+\cross{U8MAT}{columnSpace} &
+\cross{U8MAT}{copy} &
+\cross{U8MAT}{count} \\
+\cross{U8MAT}{determinant} &
+\cross{U8MAT}{diagonal?} &
+\cross{U8MAT}{diagonalMatrix} &
+\cross{U8MAT}{elt} \\
+\cross{U8MAT}{empty} &
+\cross{U8MAT}{empty?} &
+\cross{U8MAT}{eq?} &
+\cross{U8MAT}{eval} \\
+\cross{U8MAT}{every?} &
+\cross{U8MAT}{exquo} &
+\cross{U8MAT}{fill!} &
+\cross{U8MAT}{hash} \\
+\cross{U8MAT}{horizConcat} &
+\cross{U8MAT}{inverse} &
+\cross{U8MAT}{latex} &
+\cross{U8MAT}{less?} \\
+\cross{U8MAT}{listOfLists} &
+\cross{U8MAT}{map} &
+\cross{U8MAT}{map!} &
+\cross{U8MAT}{matrix} \\
+\cross{U8MAT}{maxColIndex} &
+\cross{U8MAT}{maxRowIndex} &
+\cross{U8MAT}{member?} &
+\cross{U8MAT}{members} \\
+\cross{U8MAT}{minColIndex} &
+\cross{U8MAT}{minRowIndex} &
+\cross{U8MAT}{minordet} &
+\cross{U8MAT}{more?} \\
+\cross{U8MAT}{ncols} &
+\cross{U8MAT}{new} &
+\cross{U8MAT}{nrows} &
+\cross{U8MAT}{nullSpace} \\
+\cross{U8MAT}{nullity} &
+\cross{U8MAT}{parts} &
+\cross{U8MAT}{pfaffian} &
+\cross{U8MAT}{qelt} \\
+\cross{U8MAT}{qnew} &
+\cross{U8MAT}{qsetelt!} &
+\cross{U8MAT}{rank} &
+\cross{U8MAT}{row} \\
+\cross{U8MAT}{rowEchelon} &
+\cross{U8MAT}{sample} &
+\cross{U8MAT}{scalarMatrix} &
+\cross{U8MAT}{setColumn!} \\
+\cross{U8MAT}{setRow!} &
+\cross{U8MAT}{setelt} &
+\cross{U8MAT}{setsubMatrix!} &
+\cross{U8MAT}{size?} \\
+\cross{U8MAT}{square?} &
+\cross{U8MAT}{squareTop} &
+\cross{U8MAT}{subMatrix} &
+\cross{U8MAT}{swapColumns!} \\
+\cross{U8MAT}{swapRows!} &
+\cross{U8MAT}{symmetric?} &
+\cross{U8MAT}{transpose} &
+\cross{U8MAT}{vertConcat} \\
+\cross{U8MAT}{zero} &
+\end{tabular}
+
+\begin{chunk}{domain U8MAT U8Matrix}
+)abbrev domain U8MAT U8Matrix
+++ Description: This is a low-level domain which implements matrices
+++ (two dimensional arrays) of 8-bit integers.
+++ Indexing is 0 based, there is no bound checking (unless
+++ provided by lower level).
+U8Matrix : MatrixCategory(Integer,
+ U8Vector,
+ U8Vector) with
+ qnew : (Integer, Integer) -> %
+ ++ qnew(n, m) creates a new n by m matrix of zeros.
+ ++
+ ++X qnew(3,4)$U8Matrix()
+ == add
+
+ R ==> Integer
+
+ Qelt2 ==> AREF2U8$Lisp
+ Qsetelt2 ==> SETAREF2U8$Lisp
+ Qnrows ==> ANROWSU8$Lisp
+ Qncols ==> ANCOLSU8$Lisp
+ Qnew ==> MAKEMATRIXU8$Lisp
+ Qnew1 ==> MAKEMATRIX1U8$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)
+ elt(m : %, i : Integer, j : Integer) : R == Qelt2(m, i, j)
+ qsetelt!(m, i, j, r) == Qsetelt2(m, i, j, r)
+ setelt(m : %, i : Integer, j : Integer, r : R) == Qsetelt2(m, i, j, r)
+
+ empty() == Qnew(0$Integer, 0$Integer)
+ qnew(rows, cols) == Qnew(rows, cols)
+ new(rows, cols, a) == Qnew1(rows, cols, a)
+
+\end{chunk}
+\begin{chunk}{U8MAT.dotabb}
+"U8MAT" [color="#88FF44",href="bookvol10.3.pdf#nameddest=U8MAT"]
+"MATCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=MATCAT"]
+"U8MAT" -> "MATCAT"
+
+\end{chunk}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{domain U16MAT U16Matrix}
\begin{chunk}{U16Matrix.input}
@@ -142622,6 +142860,7 @@ U16Matrix examples
====================================================================
See Also:
+o )show U8Matrix
o )show U16Matrix
o )show U32Matrix
@@ -142859,6 +143098,7 @@ U32Matrix examples
====================================================================
See Also:
+o )show U8Matrix
o )show U16Matrix
o )show U32Matrix
@@ -154317,6 +154557,7 @@ Note that this code is not included in the generated catdef.spad file.
\getchunk{domain UTSZ UnivariateTaylorSeriesCZero}
\getchunk{domain UNISEG UniversalSegment}
+\getchunk{domain U8MAT U8Matrix}
\getchunk{domain U16MAT U16Matrix}
\getchunk{domain U32MAT U32Matrix}
\getchunk{domain U8VEC U8Vector}
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index b9ef07f..b2c79c2 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24644,6 +24644,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
(|UniversalSegment| . UNISEG)
(|UniversalSegmentFunctions2| . UNISEG2)
(|UserDefinedVariableOrdering| . UDVO)
+ (|U8Matrix| . U8MAT)
(|U16Matrix| . U16MAT)
(|U32Matrix| . U32MAT)
(|U8Vector| . U8VEC)
@@ -39363,48 +39364,48 @@ Given a form, $u$, we try to recover the input line that created it.
(make-array n :initial-element x :element-type '(unsigned-byte 32)))
\end{chunk}
-\section{U32Matrix}
+\section{U8Matrix}
-\defmacro{aref2U32}
-\begin{chunk}{defmacro aref2U32}
-(defmacro aref2U32 (v i j)
- `(aref (the (simple-array (unsigned-byte 32) (* *)) ,v) ,i ,j))
+\defmacro{aref2U8}
+\begin{chunk}{defmacro aref2U8}
+(defmacro aref2U8 (v i j)
+ `(aref (the (simple-array (unsigned-byte 8) (* *)) ,v) ,i ,j))
\end{chunk}
-\defmacro{setAref2U32}
-\begin{chunk}{defmacro setAref2U32}
-(defmacro setAref2U32 (v i j s)
- `(setf (aref (the (simple-array (unsigned-byte 32) (* *)) ,v) ,i ,j), s))
+\defmacro{setAref2U8}
+\begin{chunk}{defmacro setAref2U8}
+(defmacro setAref2U8 (v i j s)
+ `(setf (aref (the (simple-array (unsigned-byte 8) (* *)) ,v) ,i ,j), s))
\end{chunk}
-\defmacro{anrowsU32}
-\begin{chunk}{defmacro anrowsU32}
-(defmacro anrowsU32 (v)
- `(array-dimension (the (simple-array (unsigned-byte 32) (* *)) ,v) 0))
+\defmacro{anrowsU8}
+\begin{chunk}{defmacro anrowsU8}
+(defmacro anrowsU8 (v)
+ `(array-dimension (the (simple-array (unsigned-byte 8) (* *)) ,v) 0))
\end{chunk}
-\defmacro{ancolsU32}
-\begin{chunk}{defmacro ancolsU32}
-(defmacro ancolsU32 (v)
- `(array-dimension (the (simple-array (unsigned-byte 32) (* *)) ,v) 1))
+\defmacro{ancolsU8}
+\begin{chunk}{defmacro ancolsU8}
+(defmacro ancolsU8 (v)
+ `(array-dimension (the (simple-array (unsigned-byte 8) (* *)) ,v) 1))
\end{chunk}
-\defmacro{makeMatrixU32}
-\begin{chunk}{defmacro makeMatrixU32}
-(defmacro makeMatrixU32 (n m)
- `(make-array (list ,n ,m) :element-type '(unsigned-byte 32)
+\defmacro{makeMatrixU8}
+\begin{chunk}{defmacro makeMatrixU8}
+(defmacro makeMatrixU8 (n m)
+ `(make-array (list ,n ,m) :element-type '(unsigned-byte 8)
:initial-element 0))
\end{chunk}
-\defmacro{makeMatrix1U32}
-\begin{chunk}{defmacro makeMatrix1U32}
-(defmacro makeMatrix1U32 (n m s)
- `(make-array (list ,n ,m) :element-type '(unsigned-byte 32)
+\defmacro{makeMatrix1U8}
+\begin{chunk}{defmacro makeMatrix1U8}
+(defmacro makeMatrix1U8 (n m s)
+ `(make-array (list ,n ,m) :element-type '(unsigned-byte 8)
:initial-element ,s))
\end{chunk}
@@ -39455,6 +39456,52 @@ Given a form, $u$, we try to recover the input line that created it.
\end{chunk}
+\section{U32Matrix}
+
+\defmacro{aref2U32}
+\begin{chunk}{defmacro aref2U32}
+(defmacro aref2U32 (v i j)
+ `(aref (the (simple-array (unsigned-byte 32) (* *)) ,v) ,i ,j))
+
+\end{chunk}
+
+\defmacro{setAref2U32}
+\begin{chunk}{defmacro setAref2U32}
+(defmacro setAref2U32 (v i j s)
+ `(setf (aref (the (simple-array (unsigned-byte 32) (* *)) ,v) ,i ,j), s))
+
+\end{chunk}
+
+\defmacro{anrowsU32}
+\begin{chunk}{defmacro anrowsU32}
+(defmacro anrowsU32 (v)
+ `(array-dimension (the (simple-array (unsigned-byte 32) (* *)) ,v) 0))
+
+\end{chunk}
+
+\defmacro{ancolsU32}
+\begin{chunk}{defmacro ancolsU32}
+(defmacro ancolsU32 (v)
+ `(array-dimension (the (simple-array (unsigned-byte 32) (* *)) ,v) 1))
+
+\end{chunk}
+
+\defmacro{makeMatrixU32}
+\begin{chunk}{defmacro makeMatrixU32}
+(defmacro makeMatrixU32 (n m)
+ `(make-array (list ,n ,m) :element-type '(unsigned-byte 32)
+ :initial-element 0))
+
+\end{chunk}
+
+\defmacro{makeMatrix1U32}
+\begin{chunk}{defmacro makeMatrix1U32}
+(defmacro makeMatrix1U32 (n m s)
+ `(make-array (list ,n ,m) :element-type '(unsigned-byte 32)
+ :initial-element ,s))
+
+\end{chunk}
+
\section{DirectProduct}
\defun{vec2list}{vec2list}
\begin{chunk}{defun vec2list}
@@ -43949,10 +43996,13 @@ This needs to work off the internal exposure list, not the file.
;;; above level 0 macros
+\getchunk{defmacro ancolsU8}
\getchunk{defmacro ancolsU16}
\getchunk{defmacro ancolsU32}
+\getchunk{defmacro anrowsU8}
\getchunk{defmacro anrowsU16}
\getchunk{defmacro anrowsU32}
+\getchunk{defmacro aref2U8}
\getchunk{defmacro aref2U16}
\getchunk{defmacro aref2U32}
\getchunk{defmacro assq}
@@ -44015,6 +44065,8 @@ This needs to work off the internal exposure list, not the file.
\getchunk{defmacro make-double-matrix1}
\getchunk{defmacro make-double-vector}
\getchunk{defmacro make-double-vector1}
+\getchunk{defmacro makeMatrixU8}
+\getchunk{defmacro makeMatrix1U8}
\getchunk{defmacro makeMatrixU16}
\getchunk{defmacro makeMatrix1U16}
\getchunk{defmacro makeMatrixU32}
@@ -44024,6 +44076,7 @@ This needs to work off the internal exposure list, not the file.
\getchunk{defmacro qvlenU32}
\getchunk{defmacro Rest}
\getchunk{defmacro startsId?}
+\getchunk{defmacro setAref2U8}
\getchunk{defmacro setAref2U16}
\getchunk{defmacro setAref2U32}
\getchunk{defmacro seteltU8}
diff --git a/books/ps/v103u8matrix.eps b/books/ps/v103u8matrix.eps
new file mode 100644
index 0000000..207b8a8
--- /dev/null
+++ b/books/ps/v103u8matrix.eps
@@ -0,0 +1,278 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: graphviz version 2.26.3 (20100126.1600)
+%%Title: pic
+%%Pages: 1
+%%BoundingBox: 36 36 118 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 118 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 82 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+0.16355 0.45339 0.92549 graphcolor
+newpath -4 -5 moveto
+-4 112 lineto
+79 112 lineto
+79 -5 lineto
+closepath fill
+1 setlinewidth
+0.16355 0.45339 0.92549 graphcolor
+newpath -4 -5 moveto
+-4 112 lineto
+79 112 lineto
+79 -5 lineto
+closepath stroke
+% U8MAT
+gsave
+[ /Rect [ 4 72 70 108 ]
+ /Border [ 0 0 0 ]
+ /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=U8MAT) >>
+ /Subtype /Link
+/ANN pdfmark
+0.27273 0.73333 1 nodecolor
+newpath 70 108 moveto
+4 108 lineto
+4 72 lineto
+70 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.27273 0.73333 1 nodecolor
+newpath 70 108 moveto
+4 108 lineto
+4 72 lineto
+70 72 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 86.4 moveto 50 (U8MAT) alignedtext
+grestore
+% MATCAT
+gsave
+[ /Rect [ 0 0 74 36 ]
+ /Border [ 0 0 0 ]
+ /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=MATCAT) >>
+ /Subtype /Link
+/ANN pdfmark
+0.60606 0.73333 1 nodecolor
+newpath 74 36 moveto
+0 36 lineto
+0 0 lineto
+74 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.60606 0.73333 1 nodecolor
+newpath 74 36 moveto
+0 36 lineto
+0 0 lineto
+74 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 14.4 moveto 58 (MATCAT) alignedtext
+grestore
+% U8MAT->MATCAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 37 71.83 moveto
+37 64.13 37 54.97 37 46.42 curveto
+stroke
+0 0 0 edgecolor
+newpath 40.5 46.41 moveto
+37 36.41 lineto
+33.5 46.41 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 40.5 46.41 moveto
+37 36.41 lineto
+33.5 46.41 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 66a526e..b0bf79c 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20130227 tpd src/axiom-website/patches.html 20130227.01.tpd.patch
+20130227 tpd src/input/machinearithmetic.input unit test U8Matrix
+20130227 tpd src/algebra/Makefile add U8Matrix
+20130227 tpd books/bookvol5 add support code for U8Matrix
+20130227 tpd books/bookvol10.3 add U8Matrix
+20130227 tpd books/ps/v103u8matrix.eps added
20130226 tpd src/axiom-website/patches.html 20130226.02.tpd.patch
20130226 tpd books/ps/v103u16matrix.eps added
20130226 tpd books/bookvol10.3 add U16Matrix
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index a7d5082..8a56e3a 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -4881,7 +4881,7 @@ LAYER9=\
${OUT}/LODO1.o ${OUT}/LODO2.o ${OUT}/LPOLY.o \
${OUT}/LSMP.o ${OUT}/LSMP1.o ${OUT}/MATCAT2.o \
${OUT}/PROJPL.o ${OUT}/PTCAT.o ${OUT}/STRICAT.o ${OUT}/TRIMAT.o \
- ${OUT}/U16MAT.o ${OUT}/U32MAT.o \
+ ${OUT}/U8MAT.o ${OUT}/U16MAT.o ${OUT}/U32MAT.o \
layer9done
@
@@ -5116,6 +5116,19 @@ LAYER9=\
/*"ULSCAT" -> {"TRANFUN"; "TRIGCAT"; "ATRIG"; "HYPCAT"; "AHYP"}*/
/*"ULSCAT" -> {"ELEMFUN"; "FIELD"; "DIVRING"}*/
+"U8MAT" [color="#88FF44",href="bookvol10.3.pdf#nameddest=U8MAT"]
+"U8MAT" -> "MATCAT"
+/*"U8MAT" -> {"ARR2CAT"; "HOAGG"; "AGG"; "TYPE"; "SETCAT"; "BASTYPE"}*/
+/*"U8MAT" -> {"KOERCE"; "EVALAB"; "IEVALAB"; "INS"; "UFD"; "GCDDOM"}*/
+/*"U8MAT" -> {"INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"}*/
+/*"U8MAT" -> {"ABELMON"; "ABELSG"; "SGROUP"; "MONOID"; "LMODULE"}*/
+/*"U8MAT" -> {"BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"; "ENTIRER"}*/
+/*"U8MAT" -> {"EUCDOM"; "PID"; "OINTDOM"; "ORDRING"; "OAGROUP"}*/
+/*"U8MAT" -> {"OCAMON"; "OAMON"; "OASGP"; "ORDSET"; "DIFRING"}*/
+/*"U8MAT" -> {"KONVERT"; "RETRACT"; "LINEXP"; "PATMAB"; "CFCAT"; "REAL"}*/
+/*"U8MAT" -> {"CHARZ"; "STEP"; "A1AGG"; "FLAGG"; "LNAGG"; "IXAGG"}*/
+/*"U8MAT" -> {"ELTAGG"; "ELTAB"; "CLAGG"; "INT"; "OM"; "FIELD"; "DIVRING"}*/
+
"U16MAT" [color="#88FF44",href="bookvol10.3.pdf#nameddest=U16MAT"]
"U16MAT" -> "MATCAT"
/*"U16MAT" -> {"ARR2CAT"; "HOAGG"; "AGG"; "TYPE"; "SETCAT"; "BASTYPE"}*/
@@ -18383,6 +18396,7 @@ REGRESS= \
UnivariateTaylorSeriesCZero.regress \
UnivariateTaylorSeriesCategory.regress \
UniversalSegment.regress \
+ U8Matrix.regress \
U16Matrix.regress \
U32Matrix.regress \
U8Vector.regress \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index b6e75e2..431ead0 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3991,5 +3991,7 @@ books/bookvol10.3 add U32Matrix
books/bookvol10.4 comment out bad code in GUESS
20130226.02.tpd.patch
books/bookvol10.3 add U16Matrix
+20130227.01.tpd.patch
+books/bookvol10.3 add U8Matrix