一、目的和要求
1. 實驗目的
(1)掌握指令解釋程式的原理;
(2)*掌握簡單的DOS調用方法;
(3)掌握C語言程式設計初步。
2.實驗要求
編寫類似于DOS,UNIX的指令行解釋程式
(1)自行定義系統提示符
(2)自定義指令集(8-10個)
(3)使用者輸入HELP以查找指令的幫助
(4)列出指令的功能,區分内部還是外部指令
(5)使用者輸入QUIT退出
(6)内部指令有dir, cd, md, rd, cls, date, time, ren, copy等。
二、實驗内容
根據教師指定的實驗課題,完成設計、編碼、測試工作。
三、實驗環境
1.PC微機
2.Windows 作業系統
3.C/C++程式開發內建環境
四、實驗原理及核心算法參考程式段
- 指令解釋程式的原理:
指令解釋程式的主要功能是:
1) 接受和執行一條使用者從鍵盤輸入的指令,它通常儲存一張指令名字(動詞)表,其中記錄着所有操作指令及其處理程式的入口位址或有關資訊。
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4
5 #define MAXLINE 1000
6 #define N 100
7 #define Head1 "Microsoft Windows XP [版本 5.1.2600]"
8 #define Head2 "<C> 版權所有 1985-2001 Microsoft Corp."
9 #define Head3 "C:\\Documents and Settings\\Administrator>"
10
11
12 void FakeTopTitle()
13 {
14 printf(Head1"\n");
15 printf(Head2"\n");
16 printf("\n");
17 //printf(Head3);
18 }
19
20 /*
21 void ReadFromDocument()
22 {
23 FILE *fp;
24 char arr[MAXLINE+1];
25 printf("\n");
26 if ((fp = fopen ("CommandLine.txt", "r")) == NULL)
27 {
28 perror ("File open error!\n");
29 exit (1);
30 }
31 while ((fgets (arr, MAXLINE, fp)) != NULL)
32 {
33 fputs (arr, stderr);
34 }
35 printf("\n\n");
36 printf(Head3);
37 }
38 */
39 /*
40 void Test()
41 {
42 char s[200][200] = {0};
43 int i=0;
44 FILE *fp;
45 fp = fopen("CommandLine.txt","r");
46 printf("\n");
47 for(i=0;i<200;i++)
48 {
49 fscanf(fp,"%s",s[i]);
50 printf("%s\n",s[i]);
51 }
52 }
53 */
54
55 int main()
56 {
57 int i;
58 char a[100][100]={"assoc","attrib","break","bootcfg","cacls","call","cd","chcp","chdir",
59 "chkdsk","chkntfs","cls","cmd","color","comp","compact","convert",
60 "copy","date","del","dir","diskcomp","diskcopy","diskpart","doskey",
61 "driverquery","echo","endlocal","erase","eventquery","fc",
62 "find","for","format","fsutil","ftype","goto","gpresult","help","if",
63 "label","md","mkdir","mode","more","move","openfiles","pagefileconfig",
64 "path","pause","popd","print","prompt","pushd","rd","recover","rem",
65 "ren","rename","replace","rmdir","set","setlocal","sc","schtasks",
66 "shift","shutdown","sort","start","subst","systeminfo","tasklist",
67 "taskkill","time","title","tree","type","ver","verify","vol","xcopy",
68 "wmic"};
69 char b[100];
70 FakeTopTitle();
71 loop1:printf(Head3);
72 gets(b);
73 for(i=0;i<N;i++)
74 {
75 if(strcmp(a[i],b)==0)
76 {
77 system(b);
78 printf("\n");
79 printf(Head3);
80 getchar();
81 }
82 else
83 {
84 break;
85 }
86 if(strcmp(b,"exit")==0)
87 {
88 exit(0);
89 getchar();
90 }
91 }
92 system(b);
93 goto loop1;
94 getchar();
95 return 0;
96 }