PrintLine(strHelpTitle); //Print out the help informationline by line.
PrintLine(strHelpVer);
PrintLine(strHelpMem);
PrintLine(strHelpSysInfo);
PrintLine(strSysName);
PrintLine(strHelpHelp);
PrintLine(strSupport);
PrintLine(strTime);
PrintLine(strRunTime);
PrintLine(strIoCtrlApp);
PrintLine(strSysDiagApp);
PrintLine(strFsApp);
PrintLine(strNetApp);
PrintLine(strFdiskApp);
PrintLine(strLoadappApp);
PrintLine(strGUIApp);
#ifdef __CFG_APP_JVM
PrintLine(strJvmApp);
#endif //__CFG_APP_JVM
PrintLine(strReboot);
PrintLine(strCls);
return S_OK;
}
需要注意的是,不僅僅要增加一個(gè)LPSTR(char*)類型的字符串定義,還要在下面增加對(duì)應(yīng)的PrintLine輸出,否則不會(huì)有信息書出來(lái)。
完成上述三個(gè)步驟之后,重新編譯HelloX內(nèi)核,然后用最新的內(nèi)核引導(dǎo)計(jì)算機(jī)。進(jìn)入shell后,執(zhí)行help命令,應(yīng)該可以看到新增加的外部命令了。輸入對(duì)應(yīng)的外部命令字符串,即可看到外部命令的執(zhí)行結(jié)果。
實(shí)際上,外部命令的復(fù)雜之處,主要還是在于如何處理用戶輸入,以及如何根據(jù)用戶的輸入,調(diào)用對(duì)應(yīng)的子命令處理函數(shù)。HelloX實(shí)現(xiàn)了很多外部命令,比如本文講到的network命令,系統(tǒng)診斷sysdiag命令,輸入輸出控制ioctrl命令,以及文件系統(tǒng)操作命令fs等。開發(fā)者可以在這些外部實(shí)現(xiàn)的基礎(chǔ)上,利用已有的框架,修改特定的部分即可。比如,對(duì)于外部命令的入口函數(shù),可以直接在現(xiàn)有的基礎(chǔ)上,修改一下函數(shù)名。對(duì)于子命令處理函數(shù),可以根據(jù)需要,進(jìn)行修改或定義。完成后,要增加到本地子命令映射數(shù)組中。比如network命令的子命令映射數(shù)組如下:
static struct __NETWORK_CMD_MAP{
LPSTR lpszCommand;
DWORD (*CommandHandler)(__CMD_PARA_OBJ*);
LPSTR lpszHelpInfo;
}SysDiagCmdMap[] = {
{"iflist", iflist, " iflist : Show all network interface(s) insystem."},
{"ping", ping, " ping : Check a specifiedhost's reachbility."},
{"route", route, " route : List all route entry(ies) insystem."},
{"exit", _exit, " exit : Exit theapplication."},
{"help", help, " help : Print out thisscreen."},
{"showint", showint, " showint : Display ethernet interface's statisticsinformation."},
{"assoc", assoc, " assoc : Associate to a specified WiFiSSID."},
{"scan", scan, " scan : Scan WiFi networks andshow result."},
{"setif", setif, " setif : Set IP configurations to a giveninterface."},
{NULL, NULL, NULL}
};
數(shù)組元素的第一個(gè)參數(shù),就是子命令字符串,第二個(gè)參數(shù),是該子命令的處理函數(shù)。最后一個(gè)字符串信息,則是該子命令的幫助信息。在外部命令提示符下,輸入help,就會(huì)顯示出所有可用的子命令幫助信息。
開發(fā)者可以在此基礎(chǔ)上,根據(jù)自己的實(shí)現(xiàn),修改或刪除特定的映射表項(xiàng)即可。
需要注意的是,為了確保整體代碼的整潔,建議外部命令的組織,遵循下列原則:
1. 所有新增外部命令的代碼,放在一個(gè)新創(chuàng)建的代碼文件中,不要與現(xiàn)有的shell源文件放在一起;
2. 新增加的外部命令源文件,放在shell目錄下。