* gcustom-layout.c, gprefs.c: Make the preferences dialog
[midnight-commander.git] / src / mfmt.c
blob665414308611b728468f4f168dbbfdab5c0d7791
1 /* mfmt: sets bold and underline for mail files */
2 /* (c) 1995 miguel de icaza */
4 #include <stdio.h>
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
18 void
19 omain (void)
21 enum states state = header;
22 int prev = 0;
23 int c;
25 while ((c = getchar ()) != EOF){
26 if (c != '\n'){
27 switch (state){
28 case header:
29 putchar ('_');
30 putchar ('\b');
31 break;
33 case definition:
34 putchar (c);
35 putchar ('\b');
36 break;
37 default:
38 break; /* inhibit compiler warnings */
41 putchar (c);
42 if ((state != plain) && c == ':')
43 state = definition;
45 if (c == '\n' && prev == '\n')
46 state = plain;
48 if (state == definition && c == '\n')
49 state = header;
51 prev = c;
55 int
56 main (void)
58 int state = newline;
59 int space_seen;
60 int c;
62 while ((c = getchar ()) != EOF){
63 switch (state){
64 case plain:
65 if (c == '\n')
66 state = newline;
67 putchar (c);
68 break;
70 case newline:
71 if (c == 'F')
72 state = seen_f;
73 else if (c == '\n')
74 putchar ('\n');
75 else {
76 state = plain;
77 putchar (c);
79 break;
81 case seen_f:
82 if (c == 'r')
83 state = seen_r;
84 else {
85 printf ("F%c", c);
86 state = plain;
88 break;
90 case seen_r:
91 if (c == 'o')
92 state = seen_o;
93 else {
94 state = plain;
95 printf ("Fr%c", c);
97 break;
99 case seen_o:
100 if (c == 'm'){
101 state = seen_m;
102 } else {
103 state = plain;
104 printf ("Fro%c", c);
106 break;
108 case seen_m:
109 if (c == ' '){
110 state = definition;
111 printf ("_\bF_\br_\bo_\bm ");
112 } else {
113 state = plain;
114 printf ("From%c", c);
116 break;
118 case header_new:
119 space_seen = 0;
120 if (c == ' ' || c == '\t') {
121 state = definition;
122 putchar (c);
123 break;
125 if (c == '\n'){
126 state = plain;
127 putchar (c);
128 break;
131 case header:
132 if (c == '\n'){
133 putchar (c);
134 state = header_new;
135 break;
137 printf ("_\b%c", c);
138 if (c == ' ')
139 space_seen = 1;
140 if (c == ':' && !space_seen)
141 state = definition;
142 break;
144 case definition:
145 if (c == '\n'){
146 putchar (c);
147 state = header_new;
148 break;
150 printf ("%c\b%c", c, c);
151 break;
154 return (0);