% Copyright 1991 by Norman Ramsey. All rights reserved. % See file COPYRIGHT for more information. \subsection{Managing indentation and columns} These functions are used to help accumulate indentations across module boundaries by measuring the widths of various strings in columns. The size of things depends on [[tabsize]] as defined in columns.h. If [[tabsize == 0]], tabs shouldn't be touched on input and won't be generated on output. <
>= extern int tabsize; extern int columnwidth (char *s); /* number of columns string occupies */ extern int limitcolumn (char *s, int startcolumn); /* width of startcolumn blanks plus s */ extern void indent_for (int width, FILE *fp); /* indent to width; next char -> width+1 */ <<*>>= static char rcsid[] = "$Id: columns.nw,v 2.24 2008/10/06 01:03:05 nr Exp nr $"; static char rcsname[] = "$Name: v2_12 $"; #include #include "columns.h" int tabsize = 8; <<*>>= int columnwidth (char *s) { /* width of a string in columns */ (void)rcsid; /* avoid a warning */ (void)rcsname; /* avoid a warning */ return limitcolumn(s, 0); } <<*>>= int limitcolumn (char *s, int col) { while (*s) { col++; if (*s=='\t' && tabsize > 0) while (col % tabsize != 0) col++; s++; } return col; } <<*>>= void indent_for (int width, FILE *fp) { /* write whitespace [[width]] columns wide */ /*fprintf(fp,"<%2d>",width); if (width>4) {fprintf(fp," "); width -= 4;}*/ if (tabsize > 1) while (width >= tabsize) { putc('\t', fp); width -= tabsize; } while (width > 0) { putc(' ', fp); width--; } }