The author used the following data structure for the convenience of representing a frame of reference (on Page 168 of the book)
Code :
class GLFrame{
    protected:
         float vLocation[3];
         float vUp[3];
         float vForward[3];
 
 
   public:
...
}

Then he provided a function that calculates a matrix which is unclear to me (on Page 168 of the book):
Code :
void GetMatrix(M3DMatrix44f matrix, bool bRotationOnly = false)
{
   // Calculate the right side (x) vector, drop it right into the matrix
   M3DVector3f vXAxis;
   m3dCrossProduct3(vXAxis, vUp, vForward);
 
 
   // Set matrix column does not fill in the fourth value...
   m3dSetMatrixColumn44(matrix, vXAxis, 0);
   matrix[3] = 0.0f;
 
   // Y Column
   m3dSetMatrixColumn44(matrix, vUp, 1);
   matrix[7] = 0.0f;       
 
   // Z Column
   m3dSetMatrixColumn44(matrix, vForward, 2);
   matrix[11] = 0.0f;
 
 
   // Translation (already done)
   if(bRotationOnly == true) 
    {
      matrix[12] = 0.0f;
      matrix[13] = 0.0f;
      matrix[14] = 0.0f;
     }
    else
      m3dSetMatrixColumn44(matrix, vOrigin, 3);
 
 
    matrix[15] = 1.0f;
}

He used the matrix on Page 174 through
Code :
modelViewMatrix.MultMatrix(spheres[i]); //it equals to multiply the matrix got from spheres[i].GetMatrix()
Here, spheres[i] is an object of the GLFrame class.
I think the author actually wanted to multiply the object's model transform matrix, but he misused the GetMatrix() function.
Could anyone help me verify my assumption?

Sorry for my rough description.