- Rearrange reactos.dff according to rosapps rearrange.
[reactos.git] / rosapps / mc / src / mfmt.c
1 /* mfmt: sets bold and underline for mail files */
2 /* (c) 1995 miguel de icaza */
3
4 #include <stdio.h>
5
6 enum states {
7 header,
8 definition,
9 plain,
10 newline,
11 seen_f,
12 seen_r,
13 seen_o,
14 header_new,
15 seen_m
16 };
17
18 void
19 omain (void)
20 {
21 enum states state = header;
22 int prev = 0;
23 int c;
24
25 while ((c = getchar ()) != EOF){
26 if (c != '\n'){
27 switch (state){
28 case header:
29 putchar ('_');
30 putchar ('\b');
31 break;
32
33 case definition:
34 putchar (c);
35 putchar ('\b');
36 break;
37 default:
38 break; /* inhibit compiler warnings */
39 }
40 }
41 putchar (c);
42 if ((state != plain) && c == ':')
43 state = definition;
44
45 if (c == '\n' && prev == '\n')
46 state = plain;
47
48 if (state == definition && c == '\n')
49 state = header;
50
51 prev = c;
52 }
53 }
54
55 int
56 main (void)
57 {
58 int state = newline;
59 int space_seen;
60 int c;
61
62 while ((c = getchar ()) != EOF){
63 switch (state){
64 case plain:
65 if (c == '\n')
66 state = newline;
67 putchar (c);
68 break;
69
70 case newline:
71 if (c == 'F')
72 state = seen_f;
73 else {
74 state = plain;
75 putchar (c);
76 }
77 break;
78
79 case seen_f:
80 if (c == 'r')
81 state = seen_r;
82 else {
83 printf ("F%c", c);
84 state = plain;
85 }
86 break;
87
88 case seen_r:
89 if (c == 'o')
90 state = seen_o;
91 else {
92 state = plain;
93 printf ("Fr%c", c);
94 }
95 break;
96
97 case seen_o:
98 if (c == 'm'){
99 state = seen_m;
100 } else {
101 state = plain;
102 printf ("Fro%c", c);
103 }
104 break;
105
106 case seen_m:
107 if (c == ' '){
108 state = definition;
109 printf ("_\bF_\br_\bo_\bm ");
110 } else {
111 state = plain;
112 printf ("From%c", c);
113 }
114 break;
115
116 case header_new:
117 space_seen = 0;
118 if (c == ' ' || c == '\t') {
119 state = definition;
120 putchar (c);
121 break;
122 }
123 if (c == '\n'){
124 state = plain;
125 putchar (c);
126 break;
127 }
128
129 case header:
130 if (c == '\n'){
131 putchar (c);
132 state = header_new;
133 break;
134 }
135 printf ("_\b%c", c);
136 if (c == ' ')
137 space_seen = 1;
138 if (c == ':' && !space_seen)
139 state = definition;
140 break;
141
142 case definition:
143 if (c == '\n'){
144 putchar (c);
145 state = header_new;
146 break;
147 }
148 printf ("%c\b%c", c, c);
149 break;
150 }
151 }
152 return (0);
153 }