$(OBJS_DIR)/volumeobj_makedir.$(EXT_OBJ): $(FILE_DIR)/volumeobj_makedir.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/volumeobj_remove.$(EXT_OBJ): $(FILE_DIR)/volumeobj_remove.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/command.$(EXT_OBJ): $(COMMAND_DIR)/command.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
-$(OBJS_DIR)/shell.$(EXT_OBJ): $(SHELL_DIR)/shell.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/mempol.$(EXT_OBJ): $(MEMPOL_DIR)/mempol.c $(COMMON_HEADERS)
$(OBJS_DIR)/assoc.$(EXT_OBJ): $(ASSOC_DIR)/assoc.c $(COMMON_HEADERS)
$(OBJS_DIR)/list_create.$(EXT_OBJ): $(LIST_DIR)/list_create.c $(COMMON_HEADERS)
$(OBJS_DIR)/fatfile_delete.$(EXT_OBJ): $(FATVOL_DIR)/fatfile_delete.c $(COMMON_HEADERS)
$(OBJS_DIR)/fatfile_constructor.$(EXT_OBJ): $(FATVOL_DIR)/fatfile_constructor.c $(COMMON_HEADERS)
$(OBJS_DIR)/fatfile_destructor.$(EXT_OBJ): $(FATVOL_DIR)/fatfile_destructor.c $(COMMON_HEADERS)
+$(OBJS_DIR)/shell_main.$(EXT_OBJ): $(SHELL_DIR)/shell_main.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/shell_create.$(EXT_OBJ): $(SHELL_DIR)/shell_create.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/shell_delete.$(EXT_OBJ): $(SHELL_DIR)/shell_delete.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/shell_executecommand.$(EXT_OBJ): $(SHELL_DIR)/shell_executecommand.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/shell_executescript.$(EXT_OBJ): $(SHELL_DIR)/shell_executescript.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/shell_inputline.$(EXT_OBJ): $(SHELL_DIR)/shell_inputline.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/shell_interactive.$(EXT_OBJ): $(SHELL_DIR)/shell_interactive.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/shell_putchar.$(EXT_OBJ): $(SHELL_DIR)/shell_putchar.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/shell_curright.$(EXT_OBJ): $(SHELL_DIR)/shell_curright.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/shell_curleft.$(EXT_OBJ): $(SHELL_DIR)/shell_curleft.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/shell_replaceline.$(EXT_OBJ): $(SHELL_DIR)/shell_replaceline.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
$(OBJS_DIR)/processlist_main.$(EXT_OBJ): $(PROCESSLIST_DIR)/processlist_main.c $(COMMON_HEADERS)
$(OBJS_DIR)/memdump_main.$(EXT_OBJ): $(MEMDUMP_DIR)/memdump_main.c $(COMMON_HEADERS)
$(OBJS_DIR)/memwrite_main.$(EXT_OBJ): $(MEMWRITE_DIR)/memwrite_main.c $(COMMON_HEADERS)
LINK_EVENT ?= Yes
LINK_FILE ?= Yes
LINK_COMMAND ?= Yes
-LINK_SHELL ?= Yes
# Librarys
LINK_MEMPOL ?= Yes
LINK_FATVOL ?= Yes
# Applications
+LINK_SHELL ?= Yes
LINK_PROCESSLIST ?= Yes
LINK_MEMDUMP ?= Yes
LINK_MEMWRITE ?= Yes
endif
-# Shell
-ifeq ($(LINK_SHELL),Yes)
-SHELL_DIR = $(HOSAPLFW_DIR)/system/shell
-SRC_DIRS += $(SHELL_DIR)
-CSRCS += $(SHELL_DIR)/shell.c
-endif
-
-
# --------------------------------------------------
# Librarys
# Applications
# --------------------------------------------------
-# System Command
+# Shell
+ifeq ($(LINK_SHELL),Yes)
+SHELL_DIR = $(HOSAPLFW_DIR)/application/syscmd/shell
+SRC_DIRS += $(SHELL_DIR)
+CSRCS += $(SHELL_DIR)/shell_main.c
+CSRCS += $(SHELL_DIR)/shell_create.c
+CSRCS += $(SHELL_DIR)/shell_delete.c
+CSRCS += $(SHELL_DIR)/shell_executecommand.c
+CSRCS += $(SHELL_DIR)/shell_executescript.c
+CSRCS += $(SHELL_DIR)/shell_inputline.c
+CSRCS += $(SHELL_DIR)/shell_interactive.c
+CSRCS += $(SHELL_DIR)/shell_putchar.c
+CSRCS += $(SHELL_DIR)/shell_curright.c
+CSRCS += $(SHELL_DIR)/shell_curleft.c
+CSRCS += $(SHELL_DIR)/shell_replaceline.c
+endif
+
+
+# Process List
ifeq ($(LINK_PROCESSLIST),Yes)
PROCESSLIST_DIR = $(HOSAPLFW_DIR)/application/syscmd/processlist
SRC_DIRS += $(PROCESSLIST_DIR)
$(CMD_CP) $(COMMAND_DIR)\command.c $(OBJS_DIR)\
-$(OBJS_DIR)\shell.h : $(SHELL_DIR)\shell.h
- $(CMD_CP) $(SHELL_DIR)\shell.h $(OBJS_DIR)\
-
-$(OBJS_DIR)\shell.c : $(SHELL_DIR)\shell.c
- $(CMD_CP) $(SHELL_DIR)\shell.c $(OBJS_DIR)\
-
-
$(OBJS_DIR)\mempol.h : $(MEMPOL_DIR)\mempol.h
$(CMD_CP) $(MEMPOL_DIR)\mempol.h $(OBJS_DIR)\
$(CMD_CP) $(FATVOL_DIR)\fatfile_destructor.c $(OBJS_DIR)\
+$(OBJS_DIR)\shell.h : $(SHELL_DIR)\shell.h
+ $(CMD_CP) $(SHELL_DIR)\shell.h $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_local.h : $(SHELL_DIR)\shell_local.h
+ $(CMD_CP) $(SHELL_DIR)\shell_local.h $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_main.c : $(SHELL_DIR)\shell_main.c
+ $(CMD_CP) $(SHELL_DIR)\shell_main.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_create.c : $(SHELL_DIR)\shell_create.c
+ $(CMD_CP) $(SHELL_DIR)\shell_create.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_delete.c : $(SHELL_DIR)\shell_delete.c
+ $(CMD_CP) $(SHELL_DIR)\shell_delete.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_executecommand.c : $(SHELL_DIR)\shell_executecommand.c
+ $(CMD_CP) $(SHELL_DIR)\shell_executecommand.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_executescript.c : $(SHELL_DIR)\shell_executescript.c
+ $(CMD_CP) $(SHELL_DIR)\shell_executescript.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_inputline.c : $(SHELL_DIR)\shell_inputline.c
+ $(CMD_CP) $(SHELL_DIR)\shell_inputline.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_interactive.c : $(SHELL_DIR)\shell_interactive.c
+ $(CMD_CP) $(SHELL_DIR)\shell_interactive.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_putchar.c : $(SHELL_DIR)\shell_putchar.c
+ $(CMD_CP) $(SHELL_DIR)\shell_putchar.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_curright.c : $(SHELL_DIR)\shell_curright.c
+ $(CMD_CP) $(SHELL_DIR)\shell_curright.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_curleft.c : $(SHELL_DIR)\shell_curleft.c
+ $(CMD_CP) $(SHELL_DIR)\shell_curleft.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\shell_replaceline.c : $(SHELL_DIR)\shell_replaceline.c
+ $(CMD_CP) $(SHELL_DIR)\shell_replaceline.c $(OBJS_DIR)\
+
+
$(OBJS_DIR)\processlist.h : $(PROCESSLIST_DIR)\processlist.h
$(CMD_CP) $(PROCESSLIST_DIR)\processlist.h $(OBJS_DIR)\
$(OBJS_DIR)\command.$(EXT_OBJ): $(OBJS_DIR)\command.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
-$(OBJS_DIR)\shell.$(EXT_OBJ): $(OBJS_DIR)\shell.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
-
$(OBJS_DIR)\mempol.$(EXT_OBJ): $(OBJS_DIR)\mempol.c $(COMMON_HEADERS)
$(OBJS_DIR)\assoc.$(EXT_OBJ): $(OBJS_DIR)\assoc.c $(COMMON_HEADERS)
$(OBJS_DIR)\fatfile_constructor.$(EXT_OBJ): $(OBJS_DIR)\fatfile_constructor.c $(COMMON_HEADERS)
$(OBJS_DIR)\fatfile_destructor.$(EXT_OBJ): $(OBJS_DIR)\fatfile_destructor.c $(COMMON_HEADERS)
+$(OBJS_DIR)\shell_main.$(EXT_OBJ): $(OBJS_DIR)\shell_main.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\shell_create.$(EXT_OBJ): $(OBJS_DIR)\shell_create.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\shell_delete.$(EXT_OBJ): $(OBJS_DIR)\shell_delete.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\shell_executecommand.$(EXT_OBJ): $(OBJS_DIR)\shell_executecommand.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\shell_executescript.$(EXT_OBJ): $(OBJS_DIR)\shell_executescript.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\shell_inputline.$(EXT_OBJ): $(OBJS_DIR)\shell_inputline.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\shell_interactive.$(EXT_OBJ): $(OBJS_DIR)\shell_interactive.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\shell_putchar.$(EXT_OBJ): $(OBJS_DIR)\shell_putchar.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\shell_curright.$(EXT_OBJ): $(OBJS_DIR)\shell_curright.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\shell_curleft.$(EXT_OBJ): $(OBJS_DIR)\shell_curleft.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\shell_replaceline.$(EXT_OBJ): $(OBJS_DIR)\shell_replaceline.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+
$(OBJS_DIR)\processlist_main.$(EXT_OBJ): $(OBJS_DIR)\processlist_main.c $(COMMON_HEADERS)
$(OBJS_DIR)\memdump_main.$(EXT_OBJ): $(OBJS_DIR)\memdump_main.c $(COMMON_HEADERS)
!ifndef LINK_COMMAND
LINK_COMMAND = Yes
!endif
-!ifndef LINK_SHELL
-LINK_SHELL = Yes
-!endif
# Librarys
!ifndef LINK_MEMPOL
!endif
# Applications
+!ifndef LINK_SHELL
+LINK_SHELL = Yes
+!endif
!ifndef LINK_PROCESSLIST
LINK_PROCESSLIST = Yes
!endif
!endif
-# Shell
-!if "$(LINK_SHELL)" == "Yes"
-SHELL_DIR = $(HOSAPLFW_DIR)\system\shell
-HEADERS = $(HEADERS) $(OBJS_DIR)\shell.h
-CSRCS = $(CSRCS) $(SHELL_DIR)\shell.c
-OBJS = $(OBJS) $(OBJS_DIR)\shell.$(EXT_OBJ)
-!endif
-
-
# --------------------------------------------------
# Librarys
# Applications
# --------------------------------------------------
-# System Command
+# Shell
+!if "$(LINK_SHELL)" == "Yes"
+SHELL_DIR = $(HOSAPLFW_DIR)\application\syscmd\shell
+HEADERS = $(HEADERS) $(OBJS_DIR)\shell.h
+HEADERS = $(HEADERS) $(OBJS_DIR)\shell_local.h
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_main.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_main.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_create.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_create.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_delete.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_delete.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_executecommand.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_executecommand.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_executescript.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_executescript.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_inputline.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_inputline.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_interactive.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_interactive.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_putchar.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_putchar.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_curright.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_curright.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_curleft.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_curleft.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SHELL_DIR)\shell_replaceline.c
+OBJS = $(OBJS) $(OBJS_DIR)\shell_replaceline.$(EXT_OBJ)
+!endif
+
+
+# Process List
!if "$(LINK_PROCESSLIST)" == "Yes"
PROCESSLIST_DIR = $(HOSAPLFW_DIR)\application\syscmd\processlist
HEADERS = $(HEADERS) $(OBJS_DIR)\processlist.h
"command.c",
]
],
- [
- "Shell",
- "\$(COMMON_HEADERS) \$(SYSTEM_HEADERS)",
- "\$(HOSAPLFW_DIR)/system/shell",
- "SHELL",
- "Yes",
- [
- "shell.h",
- ],
- [
- "shell.c",
- ]
- ],
],
[
"Librarys",
[
"Applications",
[
- "System Command",
+ "Shell",
+ "\$(COMMON_HEADERS) \$(SYSTEM_HEADERS)",
+ "\$(HOSAPLFW_DIR)/application/syscmd/shell",
+ "SHELL",
+ "Yes",
+ [
+ "shell.h",
+ "shell_local.h",
+ ],
+ [
+ "shell_main.c",
+ "shell_create.c",
+ "shell_delete.c",
+ "shell_executecommand.c",
+ "shell_executescript.c",
+ "shell_inputline.c",
+ "shell_interactive.c",
+ "shell_putchar.c",
+ "shell_curright.c",
+ "shell_curleft.c",
+ "shell_replaceline.c",
+ ]
+ ],
+ [
+ "Process List",
"\$(COMMON_HEADERS)",
"\$(HOSAPLFW_DIR)/application/syscmd/processlist",
"PROCESSLIST",
* @file sample.c
* @brief %jp{サンプルプログラム}%en{Sample program}
*
- * Copyright (C) 1998-2006 by Project HOS
+ * Copyright (C) 1998-2008 by Project HOS
* http://sourceforge.jp/projects/hos/
*/
#include "system/file/console.h"
#include "system/process/process.h"
#include "system/command/command.h"
-#include "system/shell/shell.h"
#include "driver/serial/pc16550/pc16550drv.h"
#include "driver/console/vt100/vt100drv.h"
+#include "application//syscmd/shell/shell.h"
#include "application//syscmd/processlist/processlist.h"
#include "application/utility/memdump/memdump.h"
#include "application/utility/memwrite/memwrite.h"
#include "system/file/console.h"
#include "system/process/process.h"
#include "system/command/command.h"
-#include "system/shell/shell.h"
#include "driver/serial/renesas/scidrv.h"
#include "driver/console/vt100/vt100drv.h"
-#include "application/example/hello/hello.h"
+#include "application/syscmd/shell/shell.h"
#include "application/filecmd/filelist/filelist.h"
#include "application/utility/memdump/memdump.h"
#include "application/utility/memwrite/memwrite.h"
#include "application/utility/memtest/memtest.h"
#include "application/utility/keytest/keytest.h"
+#include "application/example/hello/hello.h"
#include "boot.h"
#include "regs_sh7144.h"
-int Boot_Process(VPARAM Param);
+
+int Boot_Process(VPARAM Param); /* プートプロセス */
+
/* ブートタスク */
"================================================================\n"
" Hyper Operating System Application Flamework\n"
"\n"
- " Copyright (C) 1998-2007 by Project HOS\n"
+ " Copyright (C) 1998-2008 by Project HOS\n"
" http://sourceforge.jp/projects/hos/\n"
"================================================================\n"
"\n");
+++ /dev/null
-
-/* Shellのようなもの (現状てきとーー) */
-/* そのうちちゃんとリダイレクトとか Ctrl+C とかいろいろつける予定... (--; */
-
-
-#include <stdlib.h>
-#include <string.h>
-#include "shell.h"
-#include "system/file/file.h"
-#include "system/file/stdfile.h"
-#include "system/file/console.h"
-#include "system/memory/memory.h"
-#include "system/process/process.h"
-#include "system/command/command.h"
-
-
-#define SHELL_MAX_COMMAND 256
-#define SHELL_MAX_HISTORY 4
-
-
-typedef struct t_shell_background
-{
- struct t_shell_background *pNext;
- HANDLE hProcess;
-} T_SHELL_BACKGROUND;
-
-
-typedef struct c_shell
-{
- int iCurPos; /* カーソルの文字列上の位置 */
- int iCurScreenX; /* カーソルのスクリーンのX位置 */
- int iScreenWidth; /* スクリーンの幅 */
- int iCommandLen; /* コマンドの文字列長 */
-
- char *pszCommanBuf; /* コマンドラインバッファ */
- char **ppszHistory; /* ヒストリバッファ */
- int iCommandBufSize; /* コマンドバッファのサイズ */
- int iHistoryMax; /* ヒストリの最大個数 */
-/* int iHistoryNum; */ /* ヒストリの個数 */
-
- int iSimpleExec; /* 単純実行オプション */
- T_SHELL_BACKGROUND *pBackGround; /* バックグランドジョブ */
-} C_SHELL;
-
-
-C_SHELL *Shell_Create(int iCommandBufSize, int iHistoryMax, int iSimpleExec);
-void Shell_Delete(C_SHELL *self);
-int Shell_Interactive(C_SHELL *self);
-int Shell_ExecuteScript(C_SHELL *self, const char *pszFileName);
-int Shell_ExecuteCommand(C_SHELL *self, const char *pszCommand);
-int Shell_InputLine(C_SHELL *self, char *pszBuf, int iBufSize);
-void Shell_PutChar(C_SHELL *self, int c);
-void Shell_CurRight(C_SHELL *self);
-void Shell_CurLeft(C_SHELL *self);
-void Shell_ReplaceLine(C_SHELL *self, const char *pszNewLine); /* ラインを置き換える */
-
-
-
-int Shell_Main(int argc, char *argv[])
-{
- C_SHELL *self;
- int iCommandBufSize = SHELL_MAX_COMMAND;
- int iHistoryMax = SHELL_MAX_HISTORY;
- int iSimpleExec = 0;
- int iInteractive = 0;
- int iExecString = 0;
- char *pszScript = NULL;
- int iExitCode = 0;
- int i;
-
-
- /* オプションを解析 */
- for ( i = 1; i < argc; i++ )
- {
- if ( argv[i][0] == '-' )
- {
- if ( strcmp(&argv[i][1], "i") == 0 ) /* インタラクティブモード */
- {
- iInteractive = 1;
- }
- else if ( strcmp(&argv[i][1], "exe") == 0 ) /* 単純実行 */
- {
- iSimpleExec = 1;
- }
- else if ( strcmp(&argv[i][1], "s") == 0 && i+1 < argc ) /* 文字列実行 */
- {
- i++;
- iExecString = i;
- }
- else if ( strcmp(&argv[i][1], "buf") == 0 && i+1 < argc ) /* コマンドバッファ設定 */
- {
- i++;
- iCommandBufSize = strtol(argv[i], NULL, 0);
- }
- else if ( strcmp(&argv[i][1], "his") == 0 && i+1 < argc ) /* ヒストリ数設定 */
- {
- i++;
- iHistoryMax = strtol(argv[i], NULL, 0);
- }
- }
- else
- {
- pszScript = argv[i];
- }
- }
-
-
- /* オブジェクト生成 */
- if ( (self = Shell_Create(iCommandBufSize, iHistoryMax, iSimpleExec)) == NULL )
- {
- return 1;
- }
-
-
- if ( iExecString > 0 )
- {
- /* 文字列実行 */
- self->pszCommanBuf[0] = '\0';
- for ( i = iExecString; i < argc; i++ )
- {
- strcat(self->pszCommanBuf, argv[i]);
- if ( i + 1 < argc )
- {
- strcat(self->pszCommanBuf, " ");
- }
- }
-
- /* 実行 */
- iExitCode = Shell_ExecuteCommand(self, self->pszCommanBuf);
- }
- else if ( pszScript != NULL )
- {
- /* スクリプト実行 */
- iExitCode = Shell_ExecuteScript(self, pszScript);
- }
-
- /* インタラクティブモード */
- if ( iInteractive )
- {
- iExitCode = Shell_Interactive(self);
- }
-
- /* オブジェクト削除 */
- Shell_Delete(self);
-
- return iExitCode;
-}
-
-
-/* コンストラクタ */
-C_SHELL *Shell_Create(int iCommandBufSize, int iHistoryMax, int iSimpleExec)
-{
- C_SHELL *self;
-
- /* オブジェクト生成 */
- if ( (self = Memory_Alloc(sizeof(C_SHELL))) == NULL )
- {
- StdIo_PutString("Memory error\n");
- return NULL;
- }
-
- /* メンバ初期化 */
- self->iScreenWidth = 80;
- self->pBackGround = NULL;
- self->iSimpleExec = iSimpleExec;
- self->iCommandBufSize = iCommandBufSize;
- self->iHistoryMax = iHistoryMax;
- self->pszCommanBuf = NULL;
- self->ppszHistory = NULL;
-
- /* メモリ確保 */
- if ( (self->pszCommanBuf = (char *)Memory_Alloc(sizeof(char) * self->iCommandBufSize)) == NULL )
- {
- return NULL;
- }
- if ( self->iHistoryMax > 0 )
- {
- if ( (self->ppszHistory = (char **)Memory_Alloc(sizeof(char *) * self->iHistoryMax)) == NULL )
- {
- Memory_Free(self->pszCommanBuf);
- return NULL;
- }
- memset(self->ppszHistory, 0, sizeof(char *) * self->iHistoryMax);
- }
-
- return self;
-}
-
-
-/* デストラクタ */
-void Shell_Delete(C_SHELL *self)
-{
- int i;
-
- if ( self->ppszHistory != NULL )
- {
- for ( i = 0; i < self->iHistoryMax; i++ )
- {
- if ( self->ppszHistory[i] != NULL )
- {
- Memory_Free(self->ppszHistory[i]);
- }
- }
- Memory_Free(self->ppszHistory);
- }
- Memory_Free(self->pszCommanBuf);
-
-
- Memory_Free(self);
-}
-
-
-/* スクリプト実行 */
-int Shell_ExecuteScript(C_SHELL *self, const char *pszFileName)
-{
- HANDLE hFile;
- int iLen;
-
- /* ファイルオープン */
- if ( (hFile = File_Open(pszFileName, FILE_OPEN_READ | FILE_OPEN_TEXT)) == HANDLE_NULL )
- {
- StdIo_PrintFormat("open error : %s\n", pszFileName);
- return 1;
- }
-
- /* ファイルを実行 */
- while ( (iLen = File_GetString(hFile, self->pszCommanBuf, self->iCommandBufSize)) > 0 )
- {
- /* 末尾の改行削除 */
- if ( self->pszCommanBuf[iLen-1] == '\n' )
- {
- self->pszCommanBuf[iLen-1] = '\0';
- }
-
- /* 実行 */
- if ( self->pszCommanBuf[0] != '\0' && self->pszCommanBuf[0] != '#' )
- {
- Shell_ExecuteCommand(self, self->pszCommanBuf);
- }
- }
-
- /* ファイルクローズ */
- File_Close(hFile);
-
- return 0;
-}
-
-
-
-/* インタラクティブモード */
-int Shell_Interactive(C_SHELL *self)
-{
- T_SHELL_BACKGROUND *pBg;
- char *pszHisBuf;
- int i;
- int j;
-
- for ( ; ; )
- {
- /* コマンド入力 */
- Shell_InputLine(self, self->pszCommanBuf, self->iCommandBufSize - 1);
-
- /* exit なら抜ける */
- if ( strcmp(self->pszCommanBuf, "exit") == 0 )
- {
- break;
- }
-
- /* 空行なら無視 */
- if ( self->pszCommanBuf[0] == 0 )
- {
- continue;
- }
-
-
- /* ヒストリ記憶 */
- if ( self->ppszHistory != NULL )
- {
- if ( (pszHisBuf = Memory_Alloc(strlen(self->pszCommanBuf) + 1)) != NULL )
- {
- strcpy(pszHisBuf, self->pszCommanBuf);
-
- /* ヒストリ重複削除 */
- for ( i = 0; i < self->iHistoryMax; i++ )
- {
- if ( strcmp(self->ppszHistory[i], self->pszCommanBuf) == 0 )
- {
- Memory_Free(self->ppszHistory[i]);
- for ( j = i; j+1 < self->iHistoryMax; j++ )
- {
- self->ppszHistory[j] = self->ppszHistory[j+1];
- }
- break;
- }
- }
-
- /* 古いものを削除 */
- if ( self->ppszHistory[self->iHistoryMax-1] != NULL )
- {
- Memory_Free(self->ppszHistory[self->iHistoryMax-1]);
- }
- for ( i = self->iHistoryMax-1; i > 1; i-- )
- {
- self->ppszHistory[i] = self->ppszHistory[i-1];
- }
-
- /* 追加 */
- self->ppszHistory[0] = pszHisBuf;
- }
- }
-
- /* コマンド実行 */
- Shell_ExecuteCommand(self, self->pszCommanBuf);
-
- /* 終了ジョブが無いかチェック */
- pBg = self->pBackGround;
- if ( pBg != NULL )
- {
- }
- }
-
- return 0;
-}
-
-
-int Shell_ExecuteCommand(C_SHELL *self, const char *pszCommand)
-{
- T_PROCESS_CREATE_INF Inf;
- HANDLE hProcess;
- int iExitCode = 0;
- int iBackGround = 0;
- int iLen;
-
- if ( self->iSimpleExec )
- {
- Command_Execute(pszCommand, &iExitCode);
- }
- else
- {
- iLen = strlen(pszCommand);
- if ( iLen > 1 && pszCommand[iLen - 1] == '&' )
- {
- ((char *)pszCommand)[iLen - 1] = '\0';
- iBackGround = 1;
- }
-
- /* プロセスの生成 */
- Inf.pszCommandLine = pszCommand;
- Inf.pszCurrentDir = Process_GetCurrentDir(HANDLE_NULL);
- Inf.pfncEntry = NULL; /* 起動アドレス */
- Inf.Param = 0; /* ユーザーパラメータ */
- Inf.StackSize = 2048; /* スタックサイズ */
- Inf.Priority = PROCESS_PRIORITY_NORMAL+1; /* プロセス優先度 */
- Inf.hTerminal = Process_GetTerminal(HANDLE_NULL); /* ターミナル */
- Inf.hConsole = Process_GetConsole(HANDLE_NULL); /* コンソール */
- Inf.hStdIn = Process_GetStdIn(HANDLE_NULL); /* 標準入力 */
- Inf.hStdOut = Process_GetStdOut(HANDLE_NULL); /* 標準出力 */
- Inf.hStdErr = Process_GetStdErr(HANDLE_NULL); /* 標準エラー出力 */
- hProcess = Process_Create(&Inf);
-
- if ( iBackGround )
- {
- T_SHELL_BACKGROUND *pBg;
-
- /* バックグランドジョブをリストに登録 */
- pBg = (T_SHELL_BACKGROUND *)Memory_Alloc(sizeof(T_SHELL_BACKGROUND));
- pBg->hProcess = hProcess;
- if ( self->pBackGround == NULL )
- {
- self->pBackGround = pBg;
- pBg->pNext = pBg;
- }
- else
- {
- pBg->pNext = self->pBackGround->pNext;
- self->pBackGround->pNext = pBg;
- }
- }
- else
- {
- /* フォアグランドなら終わるまで待つ */
- Process_WaitExit(hProcess);
- Process_Delete(hProcess);
- }
- }
-
- return iExitCode;
-}
-
-
-
-/* 1行入力 */
-int Shell_InputLine(C_SHELL *self, char *pszBuf, int iBufSize)
-{
- int iHistoryPos = -1;
- int i;
- int c;
-
-
- /* プロンプトを出す */
- StdIo_PutString("\r% ");
- self->iCurScreenX = 2;
-
- self->iCommandLen = 0;
- self->iCurPos = 0;
-
- for ( ; ; )
- {
- c = StdCon_GetCh();
-
- switch ( c )
- {
- case '\n': /* 改行なら入力完了 */
- pszBuf[self->iCommandLen] = '\0';
- StdCon_PutString("\r\n");
- return self->iCommandLen;
-
-
- case CONSOLE_KEY_BACKSPACE: /* バックスペースなら */
- if ( self->iCurPos > 0 )
- {
- memmove(&pszBuf[self->iCurPos - 1], &pszBuf[self->iCurPos], self->iCommandLen - self->iCurPos);
- self->iCurPos--;
- self->iCommandLen--;
- Shell_CurLeft(self);
- for ( i = 0; i < self->iCommandLen - self->iCurPos; i++ )
- {
- Shell_PutChar(self, pszBuf[self->iCurPos + i]);
- }
- Shell_PutChar(self, ' ');
- for ( i = 0; i < self->iCommandLen - self->iCurPos + 1; i++ )
- {
- Shell_CurLeft(self);
- }
- }
- break;
-
- case CONSOLE_KEY_UP: /* 上 */
- if ( iHistoryPos + 1 < self->iHistoryMax && self->ppszHistory[iHistoryPos + 1] != NULL )
- {
- iHistoryPos++;
- Shell_ReplaceLine(self, self->ppszHistory[iHistoryPos]);
- }
- break;
-
- case CONSOLE_KEY_DOWN: /* 下 */
- if ( iHistoryPos > 0 )
- {
- iHistoryPos--;
- Shell_ReplaceLine(self, self->ppszHistory[iHistoryPos]);
- }
- break;
-
- case CONSOLE_KEY_RIGHT: /* 右 */
- if ( self->iCurPos < self->iCommandLen )
- {
- Shell_CurRight(self);
- self->iCurPos++;
- }
- break;
-
- case CONSOLE_KEY_LEFT: /* 左 */
- if ( self->iCurPos > 0 )
- {
- Shell_CurLeft(self);
- self->iCurPos--;
- }
- break;
-
- case '\t': /* TAB */
- break;
-
- default: /* カーソル位置に文字設定 */
- if ( c >= 0x20 && c <= 255 )
- {
- if ( self->iCurPos < iBufSize - 1 )
- {
- memmove(&pszBuf[self->iCurPos + 1], &pszBuf[self->iCurPos], self->iCommandLen - self->iCurPos);
- pszBuf[self->iCurPos++] = (char)c;
- self->iCommandLen++;
- for ( i = 0; i < self->iCommandLen - self->iCurPos + 1; i++ )
- {
- Shell_PutChar(self, pszBuf[self->iCurPos + i - 1]);
- }
- for ( i = 0; i < self->iCommandLen - self->iCurPos; i++ )
- {
- Shell_CurLeft(self);
- }
- }
- else
- {
- StdCon_PutChar('\a');
- }
- }
- break;
- }
- }
-}
-
-
-
-/* スクリーンに1文字出力 */
-void Shell_PutChar(C_SHELL *self, int c)
-{
- StdCon_PutChar(c);
- self->iCurScreenX++;
- if ( self->iCurScreenX >= self->iScreenWidth )
- {
- self->iCurScreenX = 0;
- StdCon_PutString("\n");
- }
-}
-
-/* カーソル右移動 */
-void Shell_CurRight(C_SHELL *self)
-{
- self->iCurScreenX++;
- if ( self->iCurScreenX >= self->iScreenWidth )
- {
- self->iCurScreenX = 0;
- StdCon_PutString("\n");
- }
- else
- {
- StdCon_PutString("\x1b[1C"); /* カーソル右 */
- }
-}
-
-/* カーソル左移動 */
-void Shell_CurLeft(C_SHELL *self)
-{
- if ( self->iCurScreenX == 0 )
- {
- self->iCurScreenX = self->iScreenWidth - 1;
- StdCon_PutString("\x1b[1A\x1b[80C");
- }
- else
- {
- self->iCurScreenX--;
- StdCon_PutString("\x1b[1D"); /* カーソル左 */
- }
-}
-
-/* ラインを置き換える */
-void Shell_ReplaceLine(C_SHELL *self, const char *pszNewLine)
-{
- int iOldLen;
- int i;
-
- /* 前回の長さを保存 */
- iOldLen = self->iCommandLen;
-
- /* 行先頭まで移動 */
- while ( self->iCurPos > 0 )
- {
- Shell_CurLeft(self);
- self->iCurPos--;
- }
-
- /* 新しい文字列を出力 */
- for ( i = 0; pszNewLine[i] != '\0'; i++ )
- {
- Shell_PutChar(self, pszNewLine[i]);
- self->pszCommanBuf[i] = pszNewLine[i];
- self->iCurPos++;
- }
- self->iCommandLen = i;
-
- /* 末尾削除 */
- for ( i = self->iCommandLen; i < iOldLen; i++ )
- {
- Shell_PutChar(self, ' ');
- }
- for ( i = self->iCommandLen; i < iOldLen; i++ )
- {
- Shell_CurLeft(self);
- }
-}
-
-
-/* end of file */
+++ /dev/null
-/**
- * Hyper Operating System Application Framework
- *
- * @file shell.h
- * @brief %jp{シェル}
- *
- * Copyright (C) 2006 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#ifndef __HOS__shell_h__
-#define __HOS__shell_h__
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int Shell_Main(int argc, char *argv[]);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
-#endif /* __HOS__shell_h__ */
-
-
-/* end of file */
+++ /dev/null
-# -----------------------------------------------------------------------------
-# Hyper Operating System V4 コンフィギュレーター
-# Borland-C++ Version 5.5 用 メイクファイル
-#
-# Copyright (C) 1998-2006 by Project HOS
-# http://sourceforge.jp/projects/hos/
-# -----------------------------------------------------------------------------
-
-
-# ツール
-CC = bcc32
-LINK = bcc32
-
-
-# オプション
-CFLAGS = -c -O2 -I..\..\include -I..\..\..\kernel\include -I..\..\..\kernel\include\arch\proc\$(ARCH_PROC) -I..\..\..\kernel\include\arch\irc\$(ARCH_IRC)
-LFLAGS =
-
-
-# ターゲット
-!ifndef TARGET
-TARGET = h4acfg
-!endif
-
-OBJS_DIR = objs\$(TARGET)
-
-
-# オブジェクトファイル
-OBJS = $(OBJS_DIR)\hos4cfg.obj \
- $(OBJS_DIR)\analyze.obj \
- $(OBJS_DIR)\parpack.obj \
- $(OBJS_DIR)\read.obj \
- $(OBJS_DIR)\defercd.obj \
- $(OBJS_DIR)\intstk.obj \
- $(OBJS_DIR)\idlstk.obj \
- $(OBJS_DIR)\knlheap.obj \
- $(OBJS_DIR)\maxtpri.obj \
- $(OBJS_DIR)\apidef.obj \
- $(OBJS_DIR)\apiinc.obj \
- $(OBJS_DIR)\cretsk.obj \
- $(OBJS_DIR)\deftex.obj \
- $(OBJS_DIR)\cresem.obj \
- $(OBJS_DIR)\creflg.obj \
- $(OBJS_DIR)\credtq.obj \
- $(OBJS_DIR)\crembx.obj \
- $(OBJS_DIR)\crempf.obj \
- $(OBJS_DIR)\crembf.obj \
- $(OBJS_DIR)\timtic.obj \
- $(OBJS_DIR)\crecyc.obj \
- $(OBJS_DIR)\crealm.obj \
- $(OBJS_DIR)\defexc.obj \
- $(OBJS_DIR)\attini.obj \
- $(OBJS_DIR)\definh.obj \
- $(OBJS_DIR)\attisr.obj
-
-.path.cpp = ..\..\source
-.path.obj = $(OBJS_DIR)
-
-.suffixes:
-.suffixes: .cpp
-
-
-# ターゲット生成
-$(TARGET): mkdir_objs $(OBJS)
- $(LINK) -e$(TARGET) $(OBJS)
-
-mkdir_objs:
- -mkdir objs
- -mkdir $(OBJS_DIR)
-
-
-# クリーンアップ
-clean:
- del $(OBJS) $(TARGET)
-
-# 推論規則
-.cpp.obj:
- $(CC) $(CFLAGS) -o$@ $<
-
-
-# -----------------------------------------------------------------------------
-# Copyright (C) 1998-2006 by Project HOS
-# -----------------------------------------------------------------------------
# オブジェクトファイル
-OBJS = $(OBJS_DIR)/hos4cfg.o \
+OBJS = $(OBJS_DIR)/h4acfg.o \
$(OBJS_DIR)/analyze.o \
$(OBJS_DIR)/parpack.o \
$(OBJS_DIR)/read.o \
# オブジェクトファイル
-OBJS = $(OBJS_DIR)\hos4cfg.obj \
+OBJS = $(OBJS_DIR)\h4acfg.obj \
$(OBJS_DIR)\analyze.obj \
$(OBJS_DIR)\parpack.obj \
$(OBJS_DIR)\read.obj \
+++ /dev/null
-# -----------------------------------------------------------------------------
-# HOS-V4a configulator
-#
-# Copyright (C) 1998-2007 by Project HOS
-# http://sourceforge.jp/projects/hos/
-# -----------------------------------------------------------------------------
-
-
-# ツール
-CC = cl
-LINK = cl
-
-
-# オプション
-CFLAGS = /I..\..\include /I..\..\..\kernel\include /I..\..\..\kernel\include\arch\proc\$(ARCH_PROC) /I..\..\..\kernel\include\arch\irc\$(ARCH_IRC)
-LFLAGS =
-
-
-# ターゲット
-TARGET = h4acfg
-
-# オブジェクトディレクトリ
-OBJS_DIR = objs_$(TARGET)
-
-
-# オブジェクトファイル
-OBJS = $(OBJS_DIR)\hos4cfg.obj \
- $(OBJS_DIR)\analyze.obj \
- $(OBJS_DIR)\parpack.obj \
- $(OBJS_DIR)\read.obj \
- $(OBJS_DIR)\defercd.obj \
- $(OBJS_DIR)\intstk.obj \
- $(OBJS_DIR)\dpcque.obj \
- $(OBJS_DIR)\idlstk.obj \
- $(OBJS_DIR)\knlheap.obj \
- $(OBJS_DIR)\maxtpri.obj \
- $(OBJS_DIR)\apidef.obj \
- $(OBJS_DIR)\apiinc.obj \
- $(OBJS_DIR)\cretsk.obj \
- $(OBJS_DIR)\deftex.obj \
- $(OBJS_DIR)\cresem.obj \
- $(OBJS_DIR)\creflg.obj \
- $(OBJS_DIR)\credtq.obj \
- $(OBJS_DIR)\crembx.obj \
- $(OBJS_DIR)\crempf.obj \
- $(OBJS_DIR)\crembf.obj \
- $(OBJS_DIR)\timtic.obj \
- $(OBJS_DIR)\crecyc.obj \
- $(OBJS_DIR)\crealm.obj \
- $(OBJS_DIR)\defexc.obj \
- $(OBJS_DIR)\attini.obj \
- $(OBJS_DIR)\definh.obj \
- $(OBJS_DIR)\attisr.obj
-
-
-# ターゲット生成
-$(TARGET): mkdir_objs $(OBJS)
- $(LINK) $(LFLAGS) $(OBJS) -o $(TARGET)
-
-mkdir_objs:
- -mkdir $(OBJS_DIR)
-
-clean:
- -del $(TARGET) $(TARGET).exe $(OBJS)
-
-{..\..\source}.cpp{$(OBJS_DIR)}.obj :
- cl $(CFLAGS) /c $< /Fo$@
-
-
-
-# end of file
}
else if ( strcmp(pszApiName, "KERNEL_MAX_ISRID") == 0 )
{
+ int iId;
+
if ( m_iMaxId > 0 )
{
return CFG_ERR_MULTIDEF;
}
-
- int iId;
+
+ if ( m_iResObj > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
if ( (iId = atoi(pszParams)) <= 0 )
{
return CFG_ERR_PARAM;
return CFG_ERR_OK;
}
+ else if ( strcmp(pszApiName, "KERNEL_RES_ISRID") == 0 )
+ {
+ int iId;
+
+ if ( m_iMaxId > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
+ if ( (iId = atoi(pszParams)) <= 0 )
+ {
+ return CFG_ERR_PARAM;
+ }
+
+ m_iResObj += iId;
+
+ return CFG_ERR_OK;
+ }
else if ( strcmp(pszApiName, "KERNEL_MIN_INTNO") == 0 )
{
m_iMinIntNo = atoi(pszParams);
{
return AddParams(pszParams);
}
- else if ( strcmp(pszApiName, "HOS_MAX_ALMID") == 0 )
+ else if ( strcmp(pszApiName, "KERNEL_MAX_ALMID") == 0 )
{
int iId;
return CFG_ERR_OK;
}
- else if ( strcmp(pszApiName, "HOS_RES_ALMOBJ") == 0 )
+ else if ( strcmp(pszApiName, "KERNEL_RSV_ALMID") == 0 )
{
int iId;
- if ( m_iMaxId > 0 )
+ if ( m_iMaxId > 0 )
{
- return CFG_ERR_DEF_CONFLICT;
+ return CFG_ERR_DEF_CONFLICT;
}
- if ( (iId = atoi(pszParams)) <= 0 )
+ if ( (iId = atoi(pszParams)) <= 0 )
{
- return CFG_ERR_PARAM;
+ return CFG_ERR_PARAM;
}
- m_iResObj += iId;
+ m_iResObj += iId;
- return CFG_ERR_OK;
- }
+ return CFG_ERR_OK;
+ }
return CFG_ERR_NOPROC;
}
return CFG_ERR_MULTIDEF;
}
+ if ( m_iResObj > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
if ( (iId = atoi(pszParams)) <= 0 )
{
return CFG_ERR_PARAM;
return CFG_ERR_OK;
}
-
+ else if ( strcmp(pszApiName, "KERNEL_RSV_DTQID") == 0 )
+ {
+ int iId;
+
+ if ( m_iMaxId > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
+ if ( (iId = atoi(pszParams)) <= 0 )
+ {
+ return CFG_ERR_PARAM;
+ }
+
+ m_iResObj += iId;
+
+ return CFG_ERR_OK;
+ }
+
+
return CFG_ERR_NOPROC;
}
{
return AddParams(pszParams);
}
- else if ( strcmp(pszApiName, "HOS_MAX_DTQID") == 0 )
+ else if ( strcmp(pszApiName, "KERNEL_MAX_DTQID") == 0 )
{
int iId;
return CFG_ERR_OK;
}
- else if ( strcmp(pszApiName, "HOS_RES_DTQOBJ") == 0 )
+ else if ( strcmp(pszApiName, "KERNEL_RES_DTQID") == 0 )
{
int iId;
- if ( m_iMaxId > 0 )
+ if ( m_iMaxId > 0 )
{
- return CFG_ERR_DEF_CONFLICT;
+ return CFG_ERR_DEF_CONFLICT;
}
- if ( (iId = atoi(pszParams)) <= 0 )
+ if ( (iId = atoi(pszParams)) <= 0 )
{
- return CFG_ERR_PARAM;
+ return CFG_ERR_PARAM;
}
- m_iResObj += iId;
+ m_iResObj += iId;
- return CFG_ERR_OK;
- }
+ return CFG_ERR_OK;
+ }
return CFG_ERR_NOPROC;
}
{
return CFG_ERR_MULTIDEF;
}
+
+ if ( m_iResObj > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
if ( (iId = atoi(pszParams)) <= 0 )
{
return CFG_ERR_OK;
}
+ else if ( strcmp(pszApiName, "KERNEL_RSV_FLGID") == 0 )
+ {
+ int iId;
+
+ if ( m_iMaxId > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
+ if ( (iId = atoi(pszParams)) <= 0 )
+ {
+ return CFG_ERR_PARAM;
+ }
+
+ m_iResObj += iId;
+
+ return CFG_ERR_OK;
+ }
return CFG_ERR_NOPROC;
}
{
return AddParams(pszParams);
}
- else if ( strcmp(pszApiName, "HOS_MAX_MBFID") == 0 )
+ else if ( strcmp(pszApiName, "KERNEL_MAX_MBFID") == 0 )
{
int iId;
return CFG_ERR_OK;
}
- else if ( strcmp(pszApiName, "HOS_RES_MBFOBJ") == 0 )
+ else if ( strcmp(pszApiName, "KERNEL_RSV_MBFID") == 0 )
{
int iId;
- if ( m_iMaxId > 0 )
+ if ( m_iMaxId > 0 )
{
- return CFG_ERR_DEF_CONFLICT;
+ return CFG_ERR_DEF_CONFLICT;
}
- if ( (iId = atoi(pszParams)) <= 0 )
+ if ( (iId = atoi(pszParams)) <= 0 )
{
- return CFG_ERR_PARAM;
+ return CFG_ERR_PARAM;
}
- m_iResObj += iId;
-
- return CFG_ERR_OK;
- }
+ m_iResObj += iId;
+ return CFG_ERR_OK;
+ }
+
return CFG_ERR_NOPROC;
}
return CFG_ERR_MULTIDEF;
}
+ if ( m_iResObj > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
if ( (iId = atoi(pszParams)) <= 0 )
{
return CFG_ERR_PARAM;
return CFG_ERR_OK;
}
+ else if ( strcmp(pszApiName, "KERNEL_RSV_MBXID") == 0 )
+ {
+ int iId;
+
+ if ( m_iMaxId > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
+ if ( (iId = atoi(pszParams)) <= 0 )
+ {
+ return CFG_ERR_PARAM;
+ }
+
+ m_iResObj += iId;
+
+ return CFG_ERR_OK;
+ }
return CFG_ERR_NOPROC;
}
return CFG_ERR_MULTIDEF;
}
+ if ( m_iResObj > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
if ( (iId = atoi(pszParams)) <= 0 )
{
return CFG_ERR_PARAM;
return CFG_ERR_OK;
}
+ else if ( strcmp(pszApiName, "KERNEL_RSV_MPFID") == 0 )
+ {
+ int iId;
+
+ if ( m_iMaxId > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
+ if ( (iId = atoi(pszParams)) <= 0 )
+ {
+ return CFG_ERR_PARAM;
+ }
+
+ m_iResObj += iId;
+
+ return CFG_ERR_OK;
+ }
return CFG_ERR_NOPROC;
}
return CFG_ERR_MULTIDEF;
}
+ if ( m_iResObj > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
if ( (iId = atoi(pszParams)) <= 0 )
{
return CFG_ERR_PARAM;
return CFG_ERR_OK;
}
+ else if ( strcmp(pszApiName, "KERNEL_RSV_SEMID") == 0 )
+ {
+ int iId;
+
+ if ( m_iMaxId > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
+ if ( (iId = atoi(pszParams)) <= 0 )
+ {
+ return CFG_ERR_PARAM;
+ }
+
+ m_iResObj += iId;
+
+ return CFG_ERR_OK;
+ }
return CFG_ERR_NOPROC;
}
}
else if ( strcmp(pszApiName, "KERNEL_MAX_TSKID") == 0 )
{
+ int iId;
+
if ( m_iMaxId > 0 )
{
return CFG_ERR_MULTIDEF;
}
+
+ if ( m_iResObj > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
- int iId;
if ( (iId = atoi(pszParams)) <= 0 )
{
return CFG_ERR_PARAM;
return CFG_ERR_OK;
}
+ else if ( strcmp(pszApiName, "KERNEL_RSV_TSKID") == 0 )
+ {
+ int iId;
+
+ if ( m_iMaxId > 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
+ if ( (iId = atoi(pszParams)) <= 0 )
+ {
+ return CFG_ERR_PARAM;
+ }
+
+ m_iResObj += iId;
+
+ return CFG_ERR_OK;
+ }
return CFG_ERR_NOPROC;
}
カーネルについての説明を記載します。
-2. カーネルのビルド
+2. 準備するもの
+ カーネルのビルドには、ターゲットCPU用のコンパイラの他に
+以下の何れかの環境が必要になります。
+
+ [gmake環境] GNU make + gcc (Linux, Free-BSD, Cygwin などの環境)
+ [nmake環境] nmake + cl (Windows + Visual-C++ 環境)
+
+
+ 何れかの環境をホスト側に事前に準備し、PATHなどの環境変数を
+準備して、コンパイラやmakeが動く状態にしておいてください。
+
+
+3. カーネルのビルド
kernel/build ディレクトリの下に、各ターゲットプロセッサ毎に
ビルド環境を用意しています。
- 現時点では、環境は GNU make 系のみ用意しております。
- 近年では、Windows系 及び UNIX系 どちらでも GNU make が利用可能に
-なってきておりますので、別途入手をお願いします。
- 将来的には nmake などその他の環境も考慮に入れたいと考えています。
- ターゲットプロセッサのディレクトリで
+ kernel/build以下のディレクトリは
+
+ プロセッサアーキテクチャ名/バージョン名/コンパイラセット
+
+ の順で、階層管理されています。
+ 例えば、SH2 を日立製のshcコンパイラで使いたい場合は
+
+ kernel/build/sh/sh2/shc
+
+ がビルドディレクトリとなります。
+
+ ビルドディレクトリにおいて
+
+ [GNU make の場合]
+ make -f gmake.mak
- make -f gmake.mak
+ [nmake の場合]
+ nmake -f nmake.mak
など、と実行すれば、カーネルライブラリが出来上がります。
-3. カーネルの使い方
+4. カーネルの使い方
HOS-V4aカーネルは、ユーザーアプリケーションにライブラリを
リンクする形で利用します。
ライブラリ形式での提供ですので、スタートアップルーチンや
割込みベクタテーブルなどは、サンプル等を参考に、ユーザー側で
準備する必要があります。
- これにコンフィギュレータ(h4acfg.txt参照)にて、作成した
+ これにコンフィギュレータ(cfgrtr.txt参照)にて、作成した
kernel_cfg.c をコンパイルしてリンクすることで HOSのAPIが
利用可能となります。
適切に設定してください。
-4. HOS-V4a独自API
+5. HOS-V4a独自API
HOS-V4aはμITRON4.0仕様準拠のAPIの他に、独自のAPIを備えています。
μITRON4.0仕様では、実装依存APIは vxxx_xxx の形で提供することと
定めており、HOS-V4a の独自APIもこの形式を取ります。
-4.1 カーネルの起動
+5.1 カーネルの起動
【API】
ER vsta_knl(void);
呼び出してください。
-4.2 割込み要因のクリア
+5.2 割込み要因のクリア
【API】
ER vclr_int(INTNO intno);
信号が消えない)では割込み処理の後にクリアします。
-4.3 割込みレベル変更
+5.3 割込みレベル変更
【API】
ER vchg_ilv(INTNO intno, INT ilv);
本APIはIRCに割込みレベル機能があった場合に適用されるものです。
-4.4 割込みレベル取得
+5.4 割込みレベル取得
【API】
ER vget_ilv(INTNO intno, INT *p_ilv);
-4. カーネルのカスタマイズ
+6. カーネルのカスタマイズ
HOS-V4a は用途に応じて、利用しないAPIや属性を取り外したり、
適用する内部アルゴリズムを選択することで、メモリを削減したり、
* @param tskid %en{ID number of the task to be activated}%jp{タスクID}
* @return void
*/
-ER act_tsk(
- ID tskid)
+ER act_tsk(ID tskid)
{
- _KERNEL_T_TSKHDL tskhdl;
- _KERNEL_T_TCB *tcb;
- const _KERNEL_T_TCB_RO *tcb_ro;
+ _KERNEL_T_TSKHDL tskhdl;
+ _KERNEL_T_TCB_PTR tcb;
+ _KERNEL_T_TCB_RO_PTR tcb_ro;
if ( tskid == TSK_SELF ) /* %jp{自タスク指定時の変換} */
{