diff --git a/books/bookvol7.pamphlet b/books/bookvol7.pamphlet
index 68f1b46..54d4fa7 100644
--- a/books/bookvol7.pamphlet
+++ b/books/bookvol7.pamphlet
@@ -7266,6 +7266,229 @@ int main(int argc, char **argv){
 
 @
 \chapter{The htadd command}
+\section{ex2ht Call Graph}
+This was generated by the GNU cflow program with the argument list.
+Note that the line:NNNN numbers refer to the line in the code after
+it has been tangled from this file.
+\begin{verbatim}
+cflow --emacs -l -n -b -T --omit-arguments htadd.c
+\end{verbatim}
+\begin{verbatim}
+;; This file is generated by GNU cflow 1.3. -*- cflow -*-
+    2 {   0} +-main() <int main () line:2528>
+    3 {   1}   +-parseArgs() <void parseArgs () line:2188>
+    4 {   2}   | +-strcmp()
+    5 {   2}   | +-fprintf()
+    6 {   2}   | +-exit()
+    7 {   2}   | \-strcpy()
+    8 {   1}   +-fprintf()
+    9 {   1}   +-parserInit() <void parserInit () line:1611>
+   10 {   2}   | +-hashInit() <void hashInit () line:1376>
+   11 {   3}   |   \-halloc() <char *halloc () line:1355>
+   12 {   4}   |     +-fopen()
+   13 {   4}   |     +-malloc()
+   14 {   4}   |     +-fprintf()
+   15 {   4}   |     +-sprintf()
+   16 {   4}   |     \-exit()
+   17 {   2}   | +-stringEqual() <int stringEqual () line:1470>
+   18 {   3}   |   \-strcmp()
+   19 {   2}   | +-stringHash() <int stringHash () line:1462>
+   20 {   2}   | +-halloc() <char *halloc () line:1355> [see 11]
+   21 {   2}   | \-hashInsert() <void hashInsert () line:1389>
+   22 {   3}   |   +-halloc() <char *halloc () line:1355> [see 11]
+   23 {   3}   |   \-fprintf()
+   24 {   1}   +-buildDBFilename() <int buildDBFilename () line:2241>
+   25 {   2}     +-getenv()
+   26 {   2}     +-fprintf()
+   27 {   2}     +-sprintf()
+   28 {   2}     +-strcpy()
+   29 {   2}     +-stat()
+   30 {   2}     +-perror()
+   31 {   2}     +-exit()
+   32 {   2}     \-writable() <int writable () line:2224>
+   33 {   3}       +-geteuid()
+   34 {   3}       +-getegid()
+   35 {   3}       \-fprintf()
+   36 {   1}   +-unlink()
+   37 {   1}   +-deleteFile() <int deleteFile () line:2473>
+   38 {   2}   | +-strcpy()
+   39 {   2}   | +-extendHT() <void extendHT () line:1223>
+   40 {   3}   | | +-strpostfix() <int strpostfix () line:1213>
+   41 {   4}   | | | \-strlen()
+   42 {   3}   | | \-strcat()
+   43 {   2}   | +-fopen()
+   44 {   2}   | +-fprintf()
+   45 {   2}   | +-tempFileOpen() <FILE *tempFileOpen () line:1343>
+   46 {   3}   | | +-strcpy()
+   47 {   3}   | | +-strcat()
+   48 {   3}   | | +-fopen()
+   49 {   3}   | | +-perror()
+   50 {   3}   | | \-exit()
+   51 {   2}   | +-deleteDB() <void deleteDB () line:2495>
+   52 {   3}   | | +-initScanner() <void initScanner () line:1628>
+   53 {   4}   | |   +-getenv()
+   54 {   4}   | |   \-strcmp()
+   55 {   3}   | | +-getChar() <int getChar () line:1775>
+   56 {   4}   | | | \-getChar1() <int getChar1 () line:1718>
+   57 {   5}   | | |   +-getc()
+   58 {   5}   | | |   +-get_int()
+   59 {   5}   | | |   +-spadErrorHandler()
+               | | |   |  <void spadErrorHandler () line:1149>
+   60 {   6}   | | |   | +-longjmp()
+   61 {   6}   | | |   | +-fprintf()
+   62 {   6}   | | |   | \-exit()
+   63 {   5}   | | |   +-get_string_buf()
+   64 {   5}   | | |   \-fprintf()
+   65 {   3}   | | +-getFilename() <void getFilename () line:2442>
+   66 {   4}   | | | +-getChar() <int getChar () line:1775> [see 55]
+   67 {   4}   | | | +-whitespace()
+   68 {   4}   | | | +-fprintf()
+   69 {   4}   | | | +-exit()
+   70 {   4}   | | | +-filedelim()
+   71 {   4}   | | | \-ungetChar() <void ungetChar () line:1685>
+   72 {   3}   | | +-allocString() <char *allocString () line:1474>
+   73 {   4}   | |   +-halloc() <char *halloc () line:1355> [see 11]
+   74 {   4}   | |   +-strlen()
+   75 {   4}   | |   \-strcpy()
+   76 {   3}   | | +-getToken() <int getToken () line:1820> (R)
+   77 {   4}   | | | +-strcpy()
+   78 {   4}   | | | +-free()
+   79 {   4}   | | | +-getChar() <int getChar () line:1775> [see 55]
+   80 {   4}   | | | +-whitespace()
+   81 {   4}   | | | +-ungetChar() <void ungetChar () line:1685> [see 71]
+   82 {   4}   | | | +-getToken() <int getToken () line:1820> 
+               | | | | (recursive: see 76) [see 76]
+   83 {   4}   | | | +-isalpha()
+   84 {   4}   | | | +-keywordType() <int keywordType () line:2150> (R)
+   85 {   5}   | | |   +-hashFind() <char *hashFind () line:1424>
+   86 {   5}   | | |   +-beginType() <int beginType () line:2088> (R)
+   87 {   6}   | | |     +-beType() <int beType () line:2020> (R)
+   88 {   7}   | | |       +-getExpectedToken() 
+               | | |       | <void getExpectedToken () line:1691> (R)
+   89 {   8}   | | |         +-getToken() <int getToken () line:1820> 
+               | | |         | (recursive: see 76) [see 76]
+   90 {   8}   | | |         +-tokenName() <void tokenName () line:1489>
+   91 {   9}   | | |         | +-strcpy()
+   92 {   9}   | | |         | \-sprintf()
+   93 {   8}   | | |         +-fprintf()
+   94 {   8}   | | |         +-printPageAndFilename() 
+               | | |         | <void printPageAndFilename () line:1571>
+   95 {   9}   | | |         | +-sprintf()
+   96 {   9}   | | |         | \-fprintf()
+   97 {   8}   | | |         +-printNextTenTokens() 
+               | | |         | <void printNextTenTokens () line:1598> (R)
+   98 {   9}   | | |         | +-fprintf()
+   99 {   9}   | | |         | +-getToken() <int getToken () line:1820> 
+               | | |         | | (recursive: see 76) [see 76]
+  100 {   9}   | | |         | \-printToken() <void printToken () line:1561>
+  101 {  10}   | | |         |   +-printf()
+  102 {  10}   | | |         |   +-tokenName() 
+               | | |         |   | <void tokenName () line:1489> [see 90]
+  103 {  10}   | | |         |   \-fflush()
+  104 {   8}   | | |         +-longjmp()
+  105 {   8}   | | |         \-exit()
+  106 {   7}   | | |       \-strcmp()
+  107 {   6}   | | |     +-fprintf()
+  108 {   6}   | | |     +-printPageAndFilename() 
+               | | |     | <void printPageAndFilename () line:1571> [see 94]
+  109 {   6}   | | |     +-printNextTenTokens() 
+               | | |     | <void printNextTenTokens () line:1598> (R) [see 97]
+  110 {   6}   | | |     +-jump() <void jump () line:1481>
+  111 {   7}   | | |       +-exit()
+  112 {   7}   | | |       +-longjmp()
+  113 {   7}   | | |       \-fprintf()
+  114 {   6}   | | |     \-pushBeStack() <void pushBeStack () line:1974>
+  115 {   7}   | | |       +-halloc() <char *halloc () line:1355> [see 11]
+  116 {   7}   | | |       \-allocString() 
+               | | |         <char *allocString () line:1474> [see 72]
+  117 {   5}   | | |   \-endType() <int endType () line:2113> (R)
+  118 {   6}   | | |     +-beType() <int beType () line:2020> (R) [see 87]
+  119 {   6}   | | |     +-fprintf()
+  120 {   6}   | | |     +-printPageAndFilename() 
+               | | |     | <void printPageAndFilename () line:1571> [see 94]
+  121 {   6}   | | |     +-printNextTenTokens() 
+               | | |     | <void printNextTenTokens () line:1598> (R) [see 97]
+  122 {   6}   | | |     +-jump() <void jump () line:1481> [see 110]
+  123 {   6}   | | |     \-checkAndPopBeStack() 
+               | | |       <void checkAndPopBeStack () line:1996> (R)
+  124 {   7}   | | |       +-fprintf()
+  125 {   7}   | | |       +-printPageAndFilename() 
+               | | |       | <void printPageAndFilename () line:1571> [see 94]
+  126 {   7}   | | |       +-printNextTenTokens() 
+               | | |       | <void printNextTenTokens () line:1598> (R)
+               | | |       | [see 97]
+  127 {   7}   | | |       +-jump() <void jump () line:1481> [see 110]
+  128 {   7}   | | |       \-free()
+  129 {   4}   | | | +-isdigit()
+  130 {   4}   | | | \-delim()
+  131 {   3}   | | +-atoi()
+  132 {   3}   | | +-strcmp()
+  133 {   3}   | | +-fprintf()
+  134 {   3}   | | +-putc()
+  135 {   3}   | | \-free()
+  136 {   2}   | +-fclose()
+  137 {   2}   | +-copyFile() <void copyFile () line:2429>
+  138 {   3}   | | +-fopen()
+  139 {   3}   | | +-getc()
+  140 {   3}   | | +-putc()
+  141 {   3}   | | \-fclose()
+  142 {   2}   | \-unlink()
+  143 {   1}   \-addfile() <void addfile () line:2285>
+  144 {   2}     +-htFileOpen() <FILE *htFileOpen () line:1326>
+  145 {   3}     | +-buildHtFilename() <int buildHtFilename () line:1231>
+  146 {   4}     | | +-cwd()
+  147 {   4}     | | +-getcwd()
+  148 {   4}     | | +-strcpy()
+  149 {   4}     | | +-strcat()
+  150 {   4}     | | +-strlen()
+  151 {   4}     | | +-fprintf()
+  152 {   4}     | | +-exit()
+  153 {   4}     | | +-extendHT() <void extendHT () line:1223> [see 39]
+  154 {   4}     | | +-access()
+  155 {   4}     | | +-pathname() <int pathname () line:1198>
+  156 {   4}     | | +-getenv()
+  157 {   4}     | | +-halloc() <char *halloc () line:1355> [see 11]
+  158 {   4}     | | \-strcmp()
+  159 {   3}     | +-fprintf()
+  160 {   3}     | +-exit()
+  161 {   3}     | +-fopen()
+  162 {   3}     | \-perror()
+  163 {   2}     +-fopen()
+  164 {   2}     +-fprintf()
+  165 {   2}     +-exit()
+  166 {   2}     +-tempFileOpen() <FILE *tempFileOpen () line:1343> [see 45]
+  167 {   2}     +-updateDB() <void updateDB () line:2327>
+  168 {   3}     | +-addNewPages() <void addNewPages () line:2378>
+  169 {   4}     |   +-stat()
+  170 {   4}     |   +-fprintf()
+  171 {   4}     |   +-initScanner() <void initScanner () line:1628> [see 52]
+  172 {   4}     |   +-getToken() <int getToken () line:1820> (R) [see 76]
+  173 {   4}     |   +-Special()
+  174 {   4}     |   +-ptype()
+  175 {   4}     |   +-exit()
+  176 {   4}     |   \-printf()
+  177 {   3}     | +-initScanner() <void initScanner () line:1628> [see 52]
+  178 {   3}     | +-getChar() <int getChar () line:1775> [see 55]
+  179 {   3}     | +-getFilename() <void getFilename () line:2442> [see 65]
+  180 {   3}     | +-allocString() <char *allocString () line:1474> [see 72]
+  181 {   3}     | +-getToken() <int getToken () line:1820> (R) [see 76]
+  182 {   3}     | +-atoi()
+  183 {   3}     | +-strcmp()
+  184 {   3}     | +-saveScannerState() <void saveScannerState () line:1646>
+  185 {   4}     | | \-halloc() <char *halloc () line:1355> [see 11]
+  186 {   3}     | +-restoreScannerState() 
+                 |   <void restoreScannerState () line:1662>
+  187 {   4}     |   +-fprintf()
+  188 {   4}     |   +-exit()
+  189 {   4}     |   +-fseek()
+  190 {   4}     |   \-free()
+  191 {   3}     | +-fprintf()
+  192 {   3}     | +-putc()
+  193 {   3}     | \-free()
+  194 {   2}     +-fclose()
+  195 {   2}     +-copyFile() <void copyFile () line:2429> [see 137]
+  196 {   2}     \-unlink()
+\end{verbatim}
 The \verb|htadd| function can manipulate the database of hypertex pages.
 To rebuild the hypertex database changes to the \verb|$AXIOM/doc| 
 subdirectory and type:
diff --git a/changelog b/changelog
index 335f012..a7ed8a0 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20091125 tpd src/axiom-website/patches.html 20091125.03.tpd.patch
+20091125 tpd books/bookvol7 add call graph for htadd
 20091125 tpd src/axiom-website/patches.html 20091125.02.tpd.patch
 20091125 tpd books/bookvol7 add call graph for ex2ht
 20091125 tpd src/axiom-website/patches.html 20091125.01.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index eaafddd..5e1c85d 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2276,5 +2276,7 @@ In process, not yet released<br/><br/>
 books/bookvol7 add call graph for hypertex <br/>
 <a href="patches/20091125.02.tpd.patch">20091125.02.tpd.patch</a>
 books/bookvol7 add call graph for ex2ht <br/>
+<a href="patches/20091125.03.tpd.patch">20091125.03.tpd.patch</a>
+books/bookvol7 add call graph for htadd <br/>
  </body>
 </html>
