Blob


1 /*
2 * 1-22. Write a program to "fold" long input lines into two or more shorter
3 * lines after the last non-blank character that occurs before the n-th
4 * column of input. Make sure your program does something intelligent with
5 * very long lines, and if there are no blanks or tabs before the specified
6 * column.
7 */
9 #include <stdio.h>
10 #define WIDTH 80
11 #define TABSTOP 8
13 int strln(char s[]);
14 void copy(char to[], char from[]);
16 main()
17 {
18 int c, i, ci;
19 char current[WIDTH+1];
20 int len;
22 ci = i = 0;
24 while ((c = getchar())!=EOF) {
25 if (c == ' ') {
26 current[ci] = '\0';
27 len = strln(current)+1;
28 if (i+len <= WIDTH) {
29 printf("%s%c", current, c);
30 i += len;
31 } else {
32 printf("\n%s%c", current, c);
33 i = len;
34 }
35 ci = 0;
36 } else if (c == '\n') {
37 current[ci] = '\0';
38 printf("%s%c", current, c);
39 ci = i = 0;
40 } else if (c == '\t') {
41 len = strln(current)+TABSTOP;
42 current[ci] = '\0';
43 if (i+len <= WIDTH) {
44 printf("%s%c", current, c);
45 i += len;
46 } else {
47 printf("\n%s%c", current, c);
48 i = len;
49 }
50 ci = 0;
51 } else {
52 len = strln(current)+1;
53 if (i+len <= WIDTH) {
54 current[ci] = c;
55 ++ci;
56 } else {
57 current[ci] = '\0';
58 printf("%s\n%c", current, c);
59 ci = 0;
60 i = 1;
61 }
62 }
63 current[ci] = '\0';
64 }
65 }
66 int strln(char s[])
67 {
68 int i;
69 for (i=0; s[i] != '\0'; ++i)
70 ;
71 return i;
72 }
73 void copy(char to[], char from[])
74 {
75 int i;
76 i = 0;
77 while ((to[i] = from[i]) != '\0')
78 ++i;
79 }