@Section @Title { Embedded mode } @Tag { embedded } @Begin @PP When the C program texts are to be embedded in a larger Lout document, the procedure is somewhat different. You need to include the @Code "cprint" setup file, like this: @ID @OneRow @Code { "@SysInclude { cprint }" "@SysInclude { doc }" "@Doc @Text @Begin" "..." "@End @Text" } This file includes everything needed to set up for C program formatting. @PP The C parts of the document are enclosed in @Code "@CP { ... }" like this: @ID @OneRow @Code { "@IndentedDisplay @CP {" "#include " "" "treeprint(p) /* print tree p recursively */" "struct tnode *p;" "{" " if (p != NULL) {" " treeprint(p->left);" " printf(\"%4d %s\\n\", p->count, p->word);" " treeprint(p->right);" " }" "}" "}" } Although C programs violate the rules of legal Lout input in many ways, these rules are suspended by the @Code "@CP" symbol, allowing the C text to be incorporated with absolutely no modifications. The result is @ID @OneRow @CP { #include treeprint(p) /* print tree p recursively */ struct tnode *p; { if (p != NULL) { treeprint(p->left); printf("%4d %s\n", p->count, p->word); treeprint(p->right); } } } We have chosen to use the @Code "@IndentedDisplay" symbol from Section {@NumberOf displays} to obtain an indented display, but in fact @Code "@CP" may appear anywhere at all. When including a C text within a paragraph, use @Code "@OneCol @CP { ... }" to prevent it being broken across two lines, if desired. @PP In cases where the C text has unbalanced braces, it is necessary to use the alternative form @Code "@CP @Begin ... @End @CP" so that Lout does not confuse C braces with Lout braces. @PP The @Code "@CP" symbol has a @Code "style" option for changing the printing style. The default value of @Code "style" is {@Code "fixed"}, which produces the style shown above. To obtain a varying-width font style, use @Code "style { varying }" like this: @ID @OneRow @Code { "@CP" " style { varying }" "{" "#include " "" "treeprint(p) /* print tree p recursively */" "struct tnode *p;" "{" " if (p != NULL) {" " treeprint(p->left);" " printf(\"%4d %s\\n\", p->count, p->word);" " treeprint(p->right);" " }" "}" "}" } The result in this case will be @ID @OneRow @CP style { varying } { #include treeprint(p) /* print tree p recursively */ struct tnode *p; { if (p != NULL) { treeprint(p->left); printf("%4d %s\n", p->count, p->word); treeprint(p->right); } } } There is also a third style called @Code "style { symbol }" which is similar to @Code "varying" except that it uses characters from the Adobe Symbol font to produce a more mathematical-looking result: @ID @OneRow @CP style { symbol } { #include treeprint(p) /* print tree p recursively */ struct tnode *p; { if (p != NULL) { treeprint(p->left); printf("%4d %s\n", p->count, p->word); treeprint(p->right); } } } The @Code "@CP" symbol has additional options which allow a finer control over the style. Here they all are, with their default values: @ID @OneRow @Code { "@CP" " style { fixed }" " font { Courier }" " strings { Base }" " identifiers { Base }" " comments { Base }" " keywords { Base }" " numbers { Base }" " operators { Base }" " size { -1.0p }" " line { 1.0vx }" " tabin { 8 }" " tabout { 8s }" "{" " ..." "}" } We are already familiar with {@Code "style"}. After that comes {@Code "font"}, which determines the font family to use, followed by six options giving the particular faces within that family in which to print C strings, identifiers, comments, keywords, numbers, and operators. {@Code "Base"} means the basic face; other commonly available choices are {@Code "Slope"} and {@Code "Bold"}. These options may all be set to different faces if desired. The default values shown are correct for @Code "style { fixed }" only; the other styles have other defaults (Section {@NumberOf cpsetup}). @PP The @Code "size" option is the font size to use, and @Code "line" is the inter-line spacing. The default values specify that @Code "size" is to be one point smaller than in the surrounding document; this was done to compensate for Courier's relatively large appearance compared to other fonts of the same nominal size. Again, these defaults are different for different values of {@Code "style"}. @PP The @Code "tabin" and @Code "tabout" options are the subject of Section {@NumberOf tabs}. @End @Section