📄 ms dos.c
字号:
}
}
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 + -