⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfmt.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
字号:
/* mfmt: sets bold and underline for mail files */
/* (c) 1995 miguel de icaza */

#include <stdio.h>

enum states {
    header,
    definition,
    plain,
    newline,
    seen_f,
    seen_r,
    seen_o,
    header_new,
    seen_m
};

void
omain (void)
{
    enum states state = header;
    int prev = 0;
    int c;

    while ((c = getchar ()) != EOF){
	if (c != '\n'){
	    switch (state){
	    case header:
		putchar ('_');
		putchar ('\b');
		break;

	    case definition:
		putchar (c);
		putchar ('\b');
		break;
	    default:
		break;	/* inhibit compiler warnings */
	    }
	}
	putchar (c);
	if ((state != plain) && c == ':')
	    state = definition;

	if (c == '\n' && prev == '\n')
	    state = plain;

	if (state == definition && c == '\n')
	    state = header;

	prev = c;
    }
}

int
main (void)
{
    int state = newline;
    int space_seen;
    int c;

    while ((c = getchar ()) != EOF){
	switch (state){
	case plain:
	    if (c == '\n')
		state = newline;
	    putchar (c);
	    break;

	case newline:
	    if (c == 'F')
		state = seen_f;
	    else {
		state = plain;
		putchar (c);
	    }
	    break;

	case seen_f:
	    if (c == 'r')
		state = seen_r;
	    else {
		printf ("F%c", c);
		state = plain;
	    }
	    break;

	case seen_r:
	    if (c == 'o')
		state = seen_o;
	    else {
		state = plain;
		printf ("Fr%c", c);
	    }
	    break;

	case seen_o:
	    if (c == 'm'){
		state = seen_m;
	    } else {
		state = plain;
		printf ("Fro%c", c);
	    }
	    break;

	case seen_m:
	    if (c == ' '){
		state = definition;
		printf ("_\bF_\br_\bo_\bm ");
	    } else {
		state = plain;
		printf ("From%c", c);
	    }
	    break;

	case header_new:
	    space_seen = 0;
            if (c == ' ' || c == '\t') {
                state = definition;
                putchar (c);
                break;
            }
	    if (c == '\n'){
		state = plain;
		putchar (c);
		break;
	    }

	case header:
	    if (c == '\n'){
		putchar (c);
		state = header_new;
		break;
	    }
	    printf ("_\b%c", c);
	    if (c == ' ')
		space_seen = 1;
	    if (c == ':' && !space_seen)
		state = definition;
	    break;

	case definition:
	    if (c == '\n'){
		putchar (c);
		state = header_new;
		break;
	    }
	    printf ("%c\b%c", c, c);
	    break;
	}
    }
    return (0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -