4 #include "system/sysapi/sysapi.h"
5 #include "library/container/assoc/assoc.h"
11 void Command_Initialize(void)
13 /* システムメモリを使う連想配列を生成 */
14 Assoc_CreateEx(&Command_Assoc, SysMem_GetMemIf());
18 void Command_AddCommand(const char *pszName, COMMAND_FUNC pfncMain)
20 Assoc_Add(&Command_Assoc, pszName, &pfncMain, sizeof(pfncMain));
25 COMMAND_ERR Command_Execute(const char *pszCommandLine, int *piExitCode)
27 const COMMAND_FUNC *ppfncMain;
28 COMMAND_ERR Ret = COMMAND_ERR_NG;
37 iLen = strlen(pszCommandLine);
38 if ( (pszBuf = (char *)SysMem_Alloc(iLen+1)) == NULL )
40 return COMMAND_ERR_NG;
42 if ( (ppszArgv = (char **)SysMem_Alloc((iLen/2+1) * sizeof(char *))) == NULL )
45 return COMMAND_ERR_NG;
49 strcpy(pszBuf, pszCommandLine);
53 while ( pszBuf[i] == ' ' )
58 if ( pszBuf[i] == '\0' )
64 ppszArgv[iArgc++] = &pszBuf[i];
67 while ( pszBuf[i] != ' ' && pszBuf[i] != '\0' )
72 if ( pszBuf[i] == '\0' )
79 ppszArgv[iArgc] = NULL;
83 ppfncMain = (const COMMAND_FUNC *)Assoc_Get(&Command_Assoc, ppszArgv[0]);
84 if ( ppfncMain != NULL )
86 iExitCode = (*ppfncMain)(iArgc, ppszArgv);
87 if ( piExitCode != NULL )
89 *piExitCode = iExitCode;
96 SysMem_Free(ppszArgv);
102 COMMAND_PTR Command_GetFirstCommand(void)
106 Pos = Assoc_GetFirst(&Command_Assoc);
108 return (COMMAND_PTR)Pos;
112 COMMAND_PTR Command_GetNextCommand(COMMAND_PTR Ptr, const char **ppszName)
116 Pos = (ASSOC_POS)Ptr;
118 Assoc_GetAt(&Command_Assoc, Pos, ppszName);
120 Pos = Assoc_GetNext(&Command_Assoc, Pos);
122 return (COMMAND_PTR)Pos;
126 COMMAND_FUNC Command_GetCommandAddr(const char *pszName)
128 const COMMAND_FUNC *ppfncMain;
130 ppfncMain = (const COMMAND_FUNC *)Assoc_Get(&Command_Assoc, pszName);