📄 command.lst
字号:
C51 COMPILER V8.02 COMMAND 09/14/2007 22:10:14 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE COMMAND
OBJECT MODULE PLACED IN command.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE command.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <command.h>
2
3
4 #define STATE_WHITESPACE 0
5 #define STATE_WORD 1
6
7 #define MAX_ARGS MAX_CMD_LEN/4
8
9
10 int argc, num_commands;
11 char *argv[MAX_ARGS];
12 int Help();
13 int Dir();
14
15 typedef int (*cmdproc)();
16
17 typedef struct {
18 char *cmd;
19 char *hlp;
20 cmdproc proc;
21 }CMD_STRUC;
22
23 CMD_STRUC CMD_INNER[] =
24 { {"help", "show help", Help},
25 {"?", "= help", Help},
26 {"dir", "dir", Dir},
27 {NULL, NULL, NULL}
28 };
29 int Dir()
30 {
31 1 int i;
32 1 for(i=0;i<argc;i++)
33 1 {
34 2 PrintStr(argv[i]);
35 2 PrintStr("\r\n");
36 2 }
37 1 for(i=0; CMD_INNER[i].cmd!=NULL; i++)
38 1 {
39 2 if(CMD_INNER[i].hlp!=NULL)
40 2 {
41 3 PrintStr(CMD_INNER[i].cmd);
42 3 PrintStr(" ------ ");
43 3 PrintStr(CMD_INNER[i].hlp);
44 3 PrintChar('\r');
45 3 PrintChar('\n');
46 3 }
47 2 }
48 1 return 0;
49 1 }
50 int Help()
51 {
52 1 char i;
53 1 for(i=0;i<argc;i++)
54 1 {
55 2 PrintStr(argv[i]);
C51 COMPILER V8.02 COMMAND 09/14/2007 22:10:14 PAGE 2
56 2 PrintStr("\r\n");
57 2 }
58 1 PrintStr("Welcome you come here\r\n");
59 1 PrintStr("2004.9.22\r\n");
60 1 return 0;
61 1 }
62
63 int GetCmdMatche(char *cmdline)
64 {
65 1 int i,j;
66 1 char temp;
67 1
68 1 for(i=0; CMD_INNER[i].cmd!=NULL; i++)
69 1 {
70 2 j=0;
71 2 while(*(cmdline+j) != 0)
72 2 {
73 3 temp = *(cmdline+j);
74 3 if(temp > 'A' && temp < 'Z') temp=temp+32;
75 3 if(*(CMD_INNER[i].cmd+j) != temp)
76 3 {
77 4 break;
78 4 }
79 3 j++;
80 3 }
81 2 if(*(CMD_INNER[i].cmd+j)==0&& *(cmdline+j)==0)
82 2 {
83 3 return i;
84 3 }
85 2
86 2 }
87 1 return -1;
88 1 }
89 void ParseArgs(char *cmdline, int *argc, char **argv)
90 {
91 1 char *c;
92 1 int state = STATE_WHITESPACE;
93 1 int i;
94 1
95 1 *argc = 0;
96 1
97 1 if(strlen(cmdline) == 0)
98 1 return;
99 1
100 1 /* convert all tabs into single spaces */
101 1 c = cmdline;
102 1 while(*c != '\0')
103 1 {
104 2 if(*c == '\t')
105 2 *c = ' ';
106 2 c++;
107 2 }
108 1
109 1 c = cmdline;
110 1 i = 0;
111 1
112 1 /* now find all words on the command line */
113 1 while(*c != '\0')
114 1 {
115 2 if(state == STATE_WHITESPACE)
116 2 {
117 3 if(*c != ' ')
C51 COMPILER V8.02 COMMAND 09/14/2007 22:10:14 PAGE 3
118 3 {
119 4 argv[i] = c; //将argv[i]指向c
120 4 i++;
121 4 state = STATE_WORD;
122 4 }
123 3 }
124 2 else
125 2 { /* state == STATE_WORD */
126 3 if(*c == ' ')
127 3 {
128 4 *c = '\0';
129 4 state = STATE_WHITESPACE;
130 4 }
131 3 }
132 2 c++;
133 2 }
134 1
135 1 *argc = i;
136 1 }
137 int ParseCmd(char *cmdline, int cmd_len)
138 {
139 1 int num_commands;
140 1
141 1 if(cmd_len == 0)return 0;
142 1 ParseArgs(cmdline, &argc, argv);
143 1
144 1 /* only whitespace */
145 1 if(argc == 0)
146 1 return 0;
147 1
148 1 num_commands = GetCmdMatche(argv[0]);
149 1 if(num_commands<0)
150 1 return -1;
151 1
152 1 if(CMD_INNER[num_commands].proc!=NULL)
153 1 CMD_INNER[num_commands].proc();
154 1
155 1 return 0;
156 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1048 ----
CONSTANT SIZE = 76 ----
XDATA SIZE = 136 23
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -