阅读cce源代码日记(FreeBSD)

2009-05-13 02:15:22来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

2006年2月19日:

从main.c开始:

#include
#include
#include
#include
#include
#include

#include

#include
#include
#include



int main(int argc, const char *argv[])
{
    int cfd,mode;

    fprintf(stderr,"\r\nCCE> Console Chinese Environment "VERSION "\n");
   
    if (geteuid() != 0)
    {
        fatal("Can't get I/O permissions. CCE needs suid-root.\n");
    }

    //下面的代码是打开/dev/vga设备,用ioctl获得信息
    cfd = open("/dev/vga", O_WRONLY);
   
    if (cfd

    ioctl(cfd, KDGETMODE, &mode);

    ioctl(cfd, VT_GETACTIVE, &VtNum);

    close(cfd);




    if (mode != KD_TEXT)
    {
        fatal("You can only start CCE on text console.\n");
    }

    //对cce启动命令行进行处理,包括命令参数格式的检查
    ProcessArgs(argc-1, argv+1);

    //term.c
    TermInit();   //一些初始化,cce所需要使用的各种资源

    if (ReadConfig(CONFIG_NAME)
        fprintf(stderr, "CCE> error reading %s\n", CONFIG_NAME);
        exit(EXIT_FAILURE);
    }
    //进行设置,然后启动一个循环,维持cce中文环境
    TermStart();
   
    return 0;
}


2月19日


/* Do initialization before reading config file */
void TermInit()
{
    init.display = init.termio = FALSE;
    text_mode = TRUE;

    /* Initialize subsystems. */
   
    CapInit();
    ChildInit();
    MouseInit();
    InputInit();
    FontInit();
    KeymapInit();
    VtInit();
    ConsoleInit();
}

涉及到的数据结构:

(1)

struct initInfo
{
    bool display;                        /* display initialized */
    bool termio;                         /* termio saved */
};

static struct initInfo init;


(2)


text_mode,在Vc.c中设置的全局变量,初始为false

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:make installkernel指定安装位置

下一篇:FreeBSD计划