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

📄 ms dos.c

📁 C语言实现的MS-DOS
💻 C
📖 第 1 页 / 共 2 页
字号:
        }
}
date()/*打印当日的日期*/
{
        struct date d;
        getdate(&d);
        PRF("   Today is %d-%d-%d", d.da_year, d.da_mon, d.da_day);
}
time()/*获取当前的时间*/
{
        struct time t;
        gettime(&t);
        PRF("   The current time is:%2d:%02d:%02d", t.ti_hour, t.ti_min, t.ti_sec);
}
find()/*在当前目录下搜索指定的文件*/
{
        char *p;
        struct ffblk ffblk;
        int done;
        scanf("%s", file);
        if(strcmp(file, "/?" == 0)
                PRF("   find filename";
        else
        {
                PRF("Directory listing of %s:\n", file);
                done=findfirst(file, &ffblk, 0);
                while(!done)
                {
                        PRF("  %s\n", ffblk.ff_name);
                        done=findnext(&ffblk);
                }
        }
}
change()/*更改驱动盘*/
{
        int disk;
        switch(str1[0])/*将输入字符的第一个字符赋给disk,代表驱动盘*/
        {
        case 'a':
        case 'A':disk=0; break;
        case 'c':
        case 'C':disk=2; break;
        case 'd':
        case 'D':disk=3; break;
        case 'e':
        case 'E':disk=4; break;
        case 'f':
        case 'F':disk=5; break;
        case 'g':
        case 'G':disk=6; break;
        case 'h':
        case 'H':disk=7; break;
        }
        setdisk(disk); /*设置输入的为当前驱动盘*/
        getcwd(buffer, MAXPATH); /*获取当前驱动盘的目录*/
}
call()/*调用子程序并运行*/
{
        int result;
        scanf("%s", file);
        result=spawnl(P_WAIT, file, NULL);
        if(result == -1)/*当调用错误的时候就终止程序*/
        {
                perror("Error from spawnl";
                exit(1);
        }
}
color()/*设置当前文本颜色*/
{
        int txtcol;
        scanf("%d", &txtcol); ;
        textcolor(txtcol); /*设置文本颜色*/
        clrscr(); /*清屏后才能看到效果*/
}
link()/*将一个文件接到另一个文件的后面*/
{
        FILE *fp1, *fp2;
        char ch1, ch2, file1[MAXPATH], file2[MAXPATH];
        scanf("%s", file1);
        scanf("%s", file2);
        if((fp1=fopen(file1, "r") == NULL)
                PRF("cannot open %s", file1);
        /*以a方式打开文件file2时,文件指针已经指向该文件的末尾,可以增加数据*/
        if((fp2=fopen(file2, "a") == NULL)
                PRF("cannot open %s", file2);
        while(!feof(fp1))
        fputc(fgetc(fp1), fp2);
        fclose(fp1);
        fclose(fp2);
        PRF("   Link %s to %s successfully!", file1, file2);
}
fc()/*比较两个文件*/
{
        FILE *fp1, *fp2;
        char ch1, ch2, file1[MAXPATH], file2[MAXPATH];
        int flag=0;
        scanf("%s", file1);
        scanf("%s", file2);
        if((fp1=fopen(file1, "r") == NULL)
                PRF("cannot open %s", file1);
        if((fp2=fopen(file2, "r") == NULL)
                PRF("cannot open %s", file2);
        while(!feof(fp1) || !feof(fp2))/*当文件都没有结束的时候,依次比较,若有不同,则退出*/
        {
                ch1=fgetc(fp1);
                ch2=fgetc(fp2);
                if(ch1 != ch2)
                {
                        flag=1;
                        break;
                }
        }
        fclose(fp1);
        fclose(fp2);
        (flag)?PRF("   Two fils are different!":PRF("   Two fils are the same!";
}
/*这里可以写自己编写的命令函数*/
help()/*帮助文件*/
{
        PRF("   mf    used to creat a new text file\n";
        PRF("   dir   used to show all the files of current directory\n";
        PRF("   del   used to delete a already exist file\n";
        PRF("   cd    used to go to a new directory\n";
        PRF("   cd..  used to go to the directory upon this one\n";
        PRF("   cls   used to clean the screen\n";
        PRF("   ver   used to show the version of this programme\n";
        PRF("   type  used to show contents of a already exist file\n";
        PRF("   edit  used to edit a file and end with character '$'\n";
        PRF("   copy  used to copy a already exist file to another place\n";
        PRF("   ren   used to rename a already exist file\n";
        PRF("   md    used to make a new directory\n";
        PRF("   rd    used to delete a already exist and empty directory\n";
        PRF("   date  used to show today's date\n";
        PRF("   time  used to show today's time\n";
        PRF("   find  used to find a file's in current directory\n";
        PRF("   call  used to call a already exist programme and run it\n";
        PRF("   color used to change the text's color\n";
        PRF("   fc    used to compete two files\n";
        PRF("   link  used to copy a file's contents to another file\n";
        PRF("All orders can input with file's or directory's name without cls cd.. and ver\n";
        PRF("You can enter like this 'orders /?' for help\n";
}
main()
{
        int flag; /*用于判断输入字符串和命令是否相等, 相等则返回零*/
        PRF("Copyright by MaBiQiang!2004-4-14\nYou can E-mail to me:mxbgq@sohu.com.\n";
        getcwd(buffer, MAXPATH); /*取得当前工作目录*/
        PRF("%s>", buffer);
        while(strcmp(str1, "exit" != 0)
        {
                scanf("%s", str1);
                if(strcmp(str1, "?" == 0 || strcmp(str1, "help" == 0)
                        help();
                else
                        if(strcmp(str1, "mf" == 0)flag=1; /*给flag赋不同的值,就执行不同的命令*/
                        else if(strcmp(str1, "dir" == 0)flag=2;
                        else if(strcmp(str1, "del" == 0)flag=3;
                        else if(strcmp(str1, "cd" == 0)flag=4;
                        else if(strcmp(str1, "cd.." == 0)flag=5;
                        else if(strcmp(str1, "cls" == 0)flag=6;
                        else if(strcmp(str1, "ver" == 0)flag=7;
                        else if(strcmp(str1, "type" == 0)flag=8;
                        else if(strcmp(str1, "edit" == 0)flag=9;
                        else if(strcmp(str1, "copy" == 0)flag=10;
                        else if(strcmp(str1, "ren" == 0)flag=11;
                        else if(strcmp(str1, "md" == 0)flag=12;
                        else if(strcmp(str1, "rd" == 0)flag=13;
                        else if(strcmp(str1, "date" == 0)flag=14;
                        else if(strcmp(str1, "time" == 0)flag=15;
                        else if(strcmp(str1, "find" == 0)flag=16;
                        else if(strcmp(str1, "A:" == 0 || strcmp(str1, "a:" == 0)flag=17;
                        else if(strcmp(str1, "C:" == 0 || strcmp(str1, "c:" == 0)flag=18;
                        else if(strcmp(str1, "D:" == 0 || strcmp(str1, "d:" == 0)flag=19;
                        else if(strcmp(str1, "E:" == 0 || strcmp(str1, "e:" == 0)flag=20;
                        else if(strcmp(str1, "F:" == 0 || strcmp(str1, "f:" == 0)flag=21;
                        else if(strcmp(str1, "G:" == 0 || strcmp(str1, "g:" == 0)flag=22;
                        else if(strcmp(str1, "H:" == 0 || strcmp(str1, "h:" == 0)flag=23;
                        else if(strcmp(str1, "call" == 0)flag=24;
                        else if(strcmp(str1, "color" == 0)flag=25;
                        else if(strcmp(str1, "fc" == 0)flag=26;
                        else if(strcmp(str1, "link" == 0)flag=27;
                        else if(strcmp(str1, "exit" == 0)break;
                        /*这里可以加入想要增加的命令,同上*/
                else PRF("'%s' is not a effect order of this programme!\n", str1);
                        
                switch(flag)/*根据输入调用命令行*/
                {
                case 1:makefile(); flag=0; break;
                case 2:dir(); flag=0; break;
                case 3:del(); flag=0; break;
                case 4:cd(); flag=0; break;
                case 5:cdup(); flag=0; break;
                case 6:cls(); flag=0; break;
                case 7:ver(); flag=0; break;
                case 8:type(); flag=0; break;
                case 9:edit(); flag=0; break;
                case 10:copy(); flag=0; break;
                case 11:ren(); flag=0; break;
                case 12:mdir(); flag=0; break;
                case 13:rdir(); flag=0; break;
                case 14:date(); flag=0; break;
                case 15:time(); flag=0; break;
                case 16:find(); flag=0; break;
                case 17:
                case 18:
                case 19:
                case 20:
                case 21:
                case 22:
                case 23:change(); flag=0; break;
                case 24:call(); flag=0; break;
                case 25:color(); flag=0; break;
                case 26:fc(); flag=0; break;
                case 27:link(); flag=0; break;
                        /*这里可以加入想要增加的命令的调用函数,同上*/
                }
                PRF("\n%s>", buffer);
        }
} 

⌨️ 快捷键说明

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