/* spr.c; ソース印刷プログラム (教科書 List7-7) * * ・行番号を付加する * ・一定行数毎に改ページをする * ・タブを空白文字に変換する * 注意; XEmacsで作ったソースにはもともとタブは含まれていない * * (文字コードは EUC-jp) */ #include # define MAX_LINES 60 /* 1ページに出力する行数.実際にプリンターに出力してこの値を調整する */ # define TABS 4 /* TABをスペース4個に変換する */ int main(void); int main(void) { int c; int column = 0; /* 先頭から何文字目か */ long lines = 1L; /* 行番号 */ printf("%8ld : ", lines); /* まずは行番号を印刷 */ while ( ( c = getchar() ) != EOF ) { if ( c == '\t' ) { /* TAB文字だったらスペースに変換 */ do { putchar(' '); column++; } while ( column % TABS != 0 ); /* 次のTABコラムまで空白文字で埋める*/ } else if ( c == '\n' ) { /* 改行文字だったら行送り */ putchar(c); column = 0; lines++; if ( (lines-1) % MAX_LINES == 0 ) { /* 改ページすべきかどうか */ putchar('\f'); /* \f は Form feed (改ページ文字) */ } printf("%8ld : ", lines); /* 次行の行番号を印刷 */ } else { /* TAB文字でも改行文字でもない場合 */ putchar(c); column++; } } return 0; }